manjey73

Ответы в темах

Просмотр 15 сообщений - с 10,051 по 10,065 (из 10,066 всего)
  • Автор
    Записи
  • manjey73
    Участник

    Причина как оказалось несогласованность библиотек сборки (Log.dll, ScadaCommCommon.dll, ScadaData.dll). Дело в том, что собираю на домашнем компе по удаленке, а тестирую на работе. Вот разность версий scada и повлияла.

    Остались вопросы по части формирования сообщений в лог и окно Коммуникатора.
    В Коммуникаторе на вкладке «Данные КП» не отображается строка «Команды ТУ отсутствуют» и соответственно вывод команды при ее появлении.

    В строке «Команды ТУ (всего/ошибок) отображается только счетчик «всего».

    Какие функции отвечают за дополнительный функционал и как их правильно формировать.
    Лучше небольшими примерами кода с комментарием.

    в ответ на: Не могу подкл Segnetics к скаде #1717
    manjey73
    Участник

    В настройках должен быть TCP Client, а не Server, сервером является как раз Сигнетик.

    в ответ на: Не могу подкл Segnetics к скаде #1716
    manjey73
    Участник

    1. Позволяет ли Сигнетик два и более подключений к одному порту ?
    Возможна ситуация, что один сокет, одно подключение
    2. На примере ПЛК100 Овен, кроме IP адреса еще все равно приходится указывать адрес в сети Modbus, без этого нет подключения. Как с этим у Сигнетика ?

    в ответ на: Редактор Таблиц #1712
    manjey73
    Участник

    Обновить в Администраторе таблицу, передать серверу, перезапустить сервер.

    manjey73
    Участник

    Так формулы нет, используется режим команды Стандартная без формулы и без указания Значения команды.
    Должно быть передано вещественное число, которое вводим в поле ввода

    в ответ на: Не могу подкл Segnetics к скаде #1708
    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 лет, 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….

Просмотр 15 сообщений - с 10,051 по 10,065 (из 10,066 всего)