Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Отображение теста в Таблицах.
- В этой теме 14 ответов, 4 участника, последнее обновление 6 лет, 10 месяцев назад сделано Mikhail.
-
АвторСообщения
-
15.03.2017 в 11:53 #4840OlegУчастник
Здравствуйте. У нас возник следующий вопрос.
Из 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 |15.03.2017 в 16:44 #4842MikhailМодераторДобрый день!
Чтобы превратить считанное значение 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.
15.03.2017 в 16:49 #4844MikhailМодераторДля драйвера KpOpc.dll считывание строк типа string пока не реализовано, но если Вы согласитесь поучаствовать в тестировании этой функции, то можно реализовать.
Максимально возможная длина строк — 8 латинских символов.18.03.2017 в 19:13 #4866OlegУчастникСпасибо за помощь. Формула работает.
Я немного изменил под свои нужды: вызывается функция 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); }
Готов поучавствовать в тестировании.
20.03.2017 в 09:25 #4869MikhailМодераторГотов поучавствовать в тестировании.
Спасибо. Тогда в ближайшую неделю или две я выложу в эту тему обновлённую библиотеку для пробы.
27.03.2017 в 17:20 #4913MikhailМодераторПопробуйте обновление. Нужно переписать обе DLL поверх существующих в папке ScadaComm. В Администраторе для каналов выберите формат ASCII текст.
Напишите, пожалуйста, о результате.27.03.2017 в 17:47 #4914manjey73УчастникЭто только для OPC будет действовать ? а для всего и вся можно сделать, чтобы тестировать ?
для SNMP например или Modbus ?27.03.2017 в 18:44 #4915MikhailМодераторДля SNMP и Modbus должно работать без обновления — только для входных каналов поставить формат ASCII.
27.03.2017 в 18:45 #4916MikhailМодераторСохраняйте резервные копии, т.к. новая ScadaData.dll теоретически может нарушить работу других драйверов. В ней вычищены некоторые устаревшие методы.
30.03.2017 в 14:51 #4970OlegУчастникМихаил, спасибо! Сегодня начну тестирование.
03.04.2017 в 14:32 #5056OlegУчастникМихаил,
Все работает. Несколько дней из плк считывались три переменные integer и три string (одна длиной 256 байт, в базу пишется 8). Все нормально.
Вот лог коммуникатора: https://drive.google.com/file/d/0B6MHBdrMIRXFVXBTcDhUMmlabkU/view?usp=sharing
Что еще нужно проверить?03.04.2017 в 15:40 #5057MikhailМодераторСпасибо за информацию. Если в процессе работы заметите какие-либо ошибки — пишите.
03.04.2017 в 17:55 #5068OlegУчастникХорошо, обязательно напишу.
04.05.2017 в 16:40 #5730AndrewУчастникМихаил, помогите, пожалуйста, вот в каком вопросе. Мне нужно отображать картинку когда есть текст в теге OPC сервера и скрывать ее, если значение этого тега пустое. С каким числом нужно сравнить значение в канале?
Пробую использовать обновленные библиотеки для связи с OPC сервером, где поддерживается передача текста.05.05.2017 в 13:52 #5767MikhailМодераторAndrew, заведите, пожалуйста, отдельную тему для нового вопроса. Скриншоты приложите, чтобы ускорить процесс.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.