Ответы в темах
-
АвторЗаписи
-
manjey73УчастникПроцесс перевода для прибора и из прибора я обдумаю, мне важно понимать, как сформирован DateTime непосредственно в Scada.
Если я правильно помню, то DateTime в RapidScada 8-ми байтный, вот формат этих 8-ми байт меня и интересует, разложенный по полочкам.
Ну и заодно функции C#, которые облегчат формирование DateTime.
manjey73УчастникУ прибора есть данные о времени в виде 6 байт, каждый байт отвечает за свои данные (год, месяц, день, часы, минуты, секунды).
Формат далек от понимания scada в том виде, в котором оно есть.Мне нужно понять, как сформирована строка времени DateTime в scada, чтобы сформировать точно так же?
Чтобы при чтении scada восприняла и показала это как время, понятное для нее.
Ну и соответственно сделать обратный процесс в драйвере, чтобы он понял уже по своему.Планируется запись времени в прибор для коррекции по команде из scada, например функцией берется текущее время компьютера и передача в драйвер для записи.
manjey73УчастникПричина как оказалось несогласованность библиотек сборки (Log.dll, ScadaCommCommon.dll, ScadaData.dll). Дело в том, что собираю на домашнем компе по удаленке, а тестирую на работе. Вот разность версий scada и повлияла.
Остались вопросы по части формирования сообщений в лог и окно Коммуникатора.
В Коммуникаторе на вкладке «Данные КП» не отображается строка «Команды ТУ отсутствуют» и соответственно вывод команды при ее появлении.В строке «Команды ТУ (всего/ошибок) отображается только счетчик «всего».
Какие функции отвечают за дополнительный функционал и как их правильно формировать.
Лучше небольшими примерами кода с комментарием.
manjey73УчастникВ настройках должен быть TCP Client, а не Server, сервером является как раз Сигнетик.
manjey73Участник1. Позволяет ли Сигнетик два и более подключений к одному порту ?
Возможна ситуация, что один сокет, одно подключение
2. На примере ПЛК100 Овен, кроме IP адреса еще все равно приходится указывать адрес в сети Modbus, без этого нет подключения. Как с этим у Сигнетика ?
manjey73УчастникОбновить в Администраторе таблицу, передать серверу, перезапустить сервер.
manjey73УчастникТак формулы нет, используется режим команды Стандартная без формулы и без указания Значения команды.
Должно быть передано вещественное число, которое вводим в поле ввода
manjey73УчастникКартинка должна быть на доступном интернет ресурсе. radical например и подобных
Ваш компьютер таковым не является.
manjey73Участникесть некие переменные (год, месяц, число, часы, минуты) каждые по отдельности.
Это надо запаковать для отправки в scada командой SetCurData, чтобы scada поняла это как время.
Ну и соответственно потом сделать обратную процедуру.
В scada надо штатными средствами сформировать текущее время и отправить в драйвер.
manjey73Участникif (cmd.CmdTypeID == BaseValues.CmdTypes.Standard)
{
double can_in = cmd.CmdVal;
int num_com = cmd.CmdNum;Тут формирую массив для отправки в порт
Connection.Write(buf_com, 0, buf_com.Length); //послать запрос в порт
System.Threading.Thread.Sleep(ReqParams.Delay);}
else
{
WriteToLog(CommPhrases.IllegalCommand);
}
CalcCmdStats();Что и где не так ? даже попыток отправки в порт нет, абсолютно ничего. В Коммуникаторе никак не отражается на счетчик отправленных команд, никакого вывода даже в логи нет.
В логах сервера есть «Команда ТУ отменена»
-
Ответ изменён 10 лет, 5 месяцев назад пользователем
manjey73.
manjey73УчастникМихаил, можно короткий пример как принимать номер команды, тип и значение ?
manjey73УчастникC защитой понятно.
С командами с одной стороны вроде как тоже, только при выборе типа команды «Стандартная» как вводить значения ? такого функционала я так понял нет.Как вообще предполагался ввод значений, кроме Вкл/Выкл в том же Modbus ?
manjey73УчастникИ вопрос как защититься от неверно введенного значения ?
Try.Parse позволяет при неправильном значении выдать 0 на выход, а значение не должно быть нулевым, например если 0, то не менять ничего.
manjey73УчастникВ общем я так понял, поле команды может быть либо double (CmdVal, Cmd), либо байтовый массив (CmdData). То есть Коммуникатор или кто должен получить данные для отправки в одном из двух видов ?
Заработала функция
public byte[] StringToInt (byte[] val)
{
string s = Encoding.Default.GetString(val);
short num;
short.TryParse(s, out num);
byte[] buf_out = BitConverter.GetBytes(num);
if (BitConverter.IsLittleEndian)
Array.Reverse(buf_out);
return buf_out;
}И формула в канале управления
StringToInt(CmdData)Одно непонятно, почему пришлось переворачивать младшим байтом вперед ?
Ввод соответственно в строковом виде.
-
Ответ изменён 10 лет, 5 месяцев назад пользователем
manjey73.
manjey73УчастникТак вот и вопрос, как переопределять SendCmd чтобы он был привязан к номерам сигналов управления.
-
Ответ изменён 10 лет, 5 месяцев назад пользователем
-
АвторЗаписи