manjey73

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

Просмотр 15 сообщений - с 9,976 по 9,990 (из 9,993 всего)
  • Автор
    Записи
  • manjey73
    Участник

    Процесс перевода для прибора и из прибора я обдумаю, мне важно понимать, как сформирован DateTime непосредственно в Scada.
    Если я правильно помню, то DateTime в RapidScada 8-ми байтный, вот формат этих 8-ми байт меня и интересует, разложенный по полочкам.
    Ну и заодно функции C#, которые облегчат формирование DateTime.

    manjey73
    Участник

    У прибора есть данные о времени в виде 6 байт, каждый байт отвечает за свои данные (год, месяц, день, часы, минуты, секунды).
    Формат далек от понимания scada в том виде, в котором оно есть.

    Мне нужно понять, как сформирована строка времени DateTime в scada, чтобы сформировать точно так же?
    Чтобы при чтении scada восприняла и показала это как время, понятное для нее.
    Ну и соответственно сделать обратный процесс в драйвере, чтобы он понял уже по своему.

    Планируется запись времени в прибор для коррекции по команде из scada, например функцией берется текущее время компьютера и передача в драйвер для записи.

    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 лет, 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 чтобы он был привязан к номерам сигналов управления.

Просмотр 15 сообщений - с 9,976 по 9,990 (из 9,993 всего)