Отображение теста в Таблицах.

Просмотр 15 сообщений - с 1 по 15 (из 15 всего)
  • Автор
    Сообщения
  • #4840
    Oleg
    Участник

    Здравствуйте. У нас возник следующий вопрос.
    Из OPC читается либо символ CHAR либо строка STRING. Коммуникатор получает ASCII код 76 вместо буквы. При выборе формата входного канала как Тест ASCII (или Unicode) значение в таблице не переводится в символ.
    Тоже самое и со строкой String. В журнале видно, что коммуникатор ее получает («R8899») но отобразить в таблице ее никак не получается.
    При попытке использовать написанную на C# формулу сервер падает.

    Подскажите пожалуйста, как лучше работать с char/string в RapidScada.
    Заранее спасибо!

    Журнал коммуникатора:
    КП 21. Обработка тега. Наименование: PLC_M/DB50.DBB0:CHAR[0..4]. Значение: System.SByte[]. Качество: good
    КП 21. Обработка тега. Наименование: PLC_M/DB50.DBB6:STRING. Значение: R8899. Качество: good

    Данные КП:
    | 3 | PLC_M/DB50.DBB0:CHAR[0..4][0] | 76,000 | 203 |
    ……..
    | 8 | PLC_M/DB50.DBB6:STRING | 0,000 | 208 |

    #4842
    Mikhail
    Модератор

    Добрый день!

    Чтобы превратить считанное значение 76 в строку, которая сможет отображаться в таблице, нужно добавить такую формулу (не тестировал):

    double EncodeByte(byte b)
    {
      byte[] buf = new byte[8];
      buf[0] = b; // или попробовать buf[7] = b
      return BitConverter.ToDouble(buf, 0);
    }
    

    Затем использовать её в формуле входного канала: EncodeByte((byte)Cnl)
    Смысл в том, чтобы «уложить» полученные байты (символы) в число double.

    • Этот ответ был изменен 7 лет назад от Mikhail.
    #4844
    Mikhail
    Модератор

    Для драйвера KpOpc.dll считывание строк типа string пока не реализовано, но если Вы согласитесь поучаствовать в тестировании этой функции, то можно реализовать.
    Максимально возможная длина строк — 8 латинских символов.

    #4866
    Oleg
    Участник

    Спасибо за помощь. Формула работает.

    Я немного изменил под свои нужды: вызывается функция GetDesign(328,329,330,331,332), в качестве аргументов номера каналов с кодом номера заказа.

    double GetDesign(int A, int B, int C, int D, int E)
    {
    double A_val = Val(A);
    double B_val = Val(B);
    double C_val = Val(C);
    double D_val = Val(D);
    double E_val = Val(E);
    
    byte A_byte = System.Convert.ToByte(A_val);
    byte B_byte = System.Convert.ToByte(B_val);
    byte C_byte = System.Convert.ToByte(C_val);
    byte D_byte = System.Convert.ToByte(D_val);
    byte E_byte = System.Convert.ToByte(E_val);
    
    byte[] buf = new byte[8];
    buf[0] = A_byte;
    buf[1] = B_byte;
    buf[2] = C_byte;
    buf[3] = D_byte;
    buf[4] = E_byte;
    
    return BitConverter.ToDouble(buf, 0);
    }

    Готов поучавствовать в тестировании.

    #4869
    Mikhail
    Модератор

    Готов поучавствовать в тестировании.

    Спасибо. Тогда в ближайшую неделю или две я выложу в эту тему обновлённую библиотеку для пробы.

    #4913
    Mikhail
    Модератор

    Попробуйте обновление. Нужно переписать обе DLL поверх существующих в папке ScadaComm. В Администраторе для каналов выберите формат ASCII текст.
    Напишите, пожалуйста, о результате.

    #4914
    manjey73
    Участник

    Это только для OPC будет действовать ? а для всего и вся можно сделать, чтобы тестировать ?
    для SNMP например или Modbus ?

    #4915
    Mikhail
    Модератор

    Для SNMP и Modbus должно работать без обновления — только для входных каналов поставить формат ASCII.

    #4916
    Mikhail
    Модератор

    Сохраняйте резервные копии, т.к. новая ScadaData.dll теоретически может нарушить работу других драйверов. В ней вычищены некоторые устаревшие методы.

    #4970
    Oleg
    Участник

    Михаил, спасибо! Сегодня начну тестирование.

    #5056
    Oleg
    Участник

    Михаил,

    Все работает. Несколько дней из плк считывались три переменные integer и три string (одна длиной 256 байт, в базу пишется 8). Все нормально.
    Вот лог коммуникатора: https://drive.google.com/file/d/0B6MHBdrMIRXFVXBTcDhUMmlabkU/view?usp=sharing
    Что еще нужно проверить?

    #5057
    Mikhail
    Модератор

    Спасибо за информацию. Если в процессе работы заметите какие-либо ошибки — пишите.

    #5068
    Oleg
    Участник

    Хорошо, обязательно напишу.

    #5730
    Andrew
    Участник

    Михаил, помогите, пожалуйста, вот в каком вопросе. Мне нужно отображать картинку когда есть текст в теге OPC сервера и скрывать ее, если значение этого тега пустое. С каким числом нужно сравнить значение в канале?
    Пробую использовать обновленные библиотеки для связи с OPC сервером, где поддерживается передача текста.

    #5767
    Mikhail
    Модератор

    Andrew, заведите, пожалуйста, отдельную тему для нового вопроса. Скриншоты приложите, чтобы ускорить процесс.

Просмотр 15 сообщений - с 1 по 15 (из 15 всего)
  • Вы должны авторизироваться для ответа в этой теме.