Ответы в темах
-
АвторЗаписи
-
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 лет, 6 месяцев назад пользователем
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 лет, 6 месяцев назад пользователем
manjey73.
manjey73УчастникТак вот и вопрос, как переопределять SendCmd чтобы он был привязан к номерам сигналов управления.
manjey73УчастникВ формулах создал так, сервер при таком варианте загружается без ругани.
public short StringToInt16 (byte[] val)
{
string s = Encoding.Default.GetString(val);
short num;
Int16.TryParse(s, out num);
return num;
}В Администраторе на канале управления указываю использовать формулу и StringToInt16(CmdData) и получаю ошибку
2016-03-14 12:36:04 <VHPC><система><ERR> Ошибка при компилировании исходного кода формул:
Строка 457, колонка 101: error CS0029: Неявное преобразование типа «int» в «byte[]» невозможно
Для ознакомления с исходным кодом см. файл C:\SCADA\ScadaServer\Log\CalcEngine.cs
manjey73УчастникКажется я понял из-за чего ошибки, использовались новые библиотеки Коммуникатора для работы с SNMP. И я добавлял их в ссылки из установленной scada….
manjey73Участник1. я открываю исходники OpenKp находящиеся в ветке scada-master, если там переноса не было то почему ругается ?
2. собрал Log, ScadaData, ScadaCommCommon, ScadaServerCommon из ветки scada-develop
Заменил ссылки, все так же ругается на ScadaUtils и ShowError -
Ответ изменён 10 лет, 6 месяцев назад пользователем
-
АвторЗаписи