Отдельные темы с конкретными вопросами есть.
Видеопримеры по работе со скриптами тут:
http://insat.ru/products/?category=2114
Отдельные темы с конкретными вопросами есть.
Видеопримеры по работе со скриптами тут:
http://insat.ru/products/?category=2114
Спасибо.
Есть функции читающие количество тегов, а функции возвращающей false если хотя бы 1 тег имеет статус BAD?
Такой функции нет.
Спасибо.
Добрый день !
Есть счётчик ПСЧ и пара модбас устройств , линия связи только одна.
Вариант1 - взять Modbus Universal MasterOPC Server реализовать протокол счётчика ПСЧ на скрипте.
А есть ещё варианты ?
вот есть Multi-Protocol MasterOPC Server с поддержкой драйвера счётчика ПСЧ, как-бы исхитриться и его задействовать...
[QUOTE=Николай НВ;246930]
Есть счётчик ПСЧ и пара модбас устройств , линия связи только одна.
Вариант1 - взять Modbus Universal MasterOPC Server реализовать протокол счётчика ПСЧ на скрипте.
А есть ещё варианты ?
/QUOTE]
Сделать две отдельных шины
Не получится. Когда добавляете порт он будет монопольно открыт одним драйвером, из того же скрипта в Multi-Protocol обратится не получится.
Спасибо.
Описание объекта:
Есть прибор с стандартным протоколом Modbus + счетчик с модбасоподобным протоколом (для его опороса был написан скрипт).
Все это опрашивается через один GPRS модем.
После запуска OPC все работает отлично.
Спустя день (2 дня) происходит сбой скрипта опроса счетчика. При этом второй прибор опрашивается без проблем (прямые теги).
Перезапуск OPC сервера решает проблему. Но спустя день ошибка повторяется.
Реинициализация узла не помогает.
Как перезапустить скрипт при ошибке без перезапуска программы?
В скрипте в функции Get_Register() формируется запрос к счетчику, выполняется байтстаффинг массива запроса и отправляется в счетчик функцией server.SendAndReceiveDataByMask.
Функция server.SendAndReceiveDataByMask возвращает ответ, производится байтстаффинг, проверка контрольной суммы, обработка результата и передача требуемой переменной.
Скрипт работает, но после некоторого количества запросов прекращается получение данных от счетчика.
При запросе 1 раз в секунду скрипт выдавал ошибку примерно через 20 часов работы, при запросе раз в минуту - около 3-х дней.
При запуске скрипта происходит следующее:
В локальный массив Array[] помещаются байты запроса, вычисляется контрольная сумма и выполняется байтстаффинг.
Посылается запрос счетчику массива Array без вычисления контрольной суммы с предполагаемой длиной ответа до 80 байт.
err,Otvet_0,Len_0=server.SendAndReceiveDataByMask( 0,Lenght,SendMask,Array,ReceiveMask,80);
Эта функция возвращает в локальный массив Otvet_0[] ответ счетчика, который далее обрабатывается.
В какой-то момент времени функция server.SendAndReceiveDataByMask не может передать данные переменной Otvet_0[] и генерирует ошибку.
При этом идет полноценный обмен данными между сервером и счетчиком, в окне OPC сервера "Запросы" отображаются отправленные и принятые байты.
Часто (раз в 100...150 запросов) появляется сообщение о неверной контрольной сумме, хотя все запросы и ответы одинаковы побайтно.
Что может быть с переменными Otvet_0[] и Len_0(длина ответа) ???
Они же локальные и должны инициализироваться заново при каждом запросе.
Последний раз редактировалось Василий353; 01.06.2017 в 12:21.
Мы вам ответили по почте.
Спасибо.
Прошу помощи! Принимаю от прибора посылку.
05-07-2017 09:10:52.149 com-portCOM4) Rx: [0039] 01 03 22
00 04 часовой срез
00 17
00 00 00 01 09 0F -------- секунды минуты час день месяц год
43 03 BA B4 ---------- 131.729 (float)dest[14]
43 EA 93 65 ---------- 469.152 dest[15]
43 AA 2C 0F ---------- 340.344 dest[16]
43 A5 73 0E ---------- 330.899 dest[17]
43 E9 11 B3 ---------- 466.138 dest[18]
43 D7 60 EA ---------- 430.757 dest[19]
BA 66 ----- СРС
инициализация маски принятой таблицы-
local destmask={"byte","byte","byte","byte","byte","byte ","byte",
"byte","byte","byte","byte","byte","byte"
,"float:6:76543210"};
запрос приём передача - всё приходит правильно! Вывожу значения!
server.Message(" 14= ",dest[14]," 15= ",dest[15]," 16= ",dest[16]," 17= ",dest[17]
," 18= ",dest[18]," 19= ",dest[19])
и тут получается бред!
14 = 469.152 15= 340.344 16= 330.899 17=466.138 18=430.757 19=-0,000087
получается, что пропадает истинное значение dest[14] = 131.729, а на его место становится dest[15 ] и т.д.,
хотя байты с dest[1] по dest[13] соответствуют ответу!
подскажите пж-та, как решить данную проблему?
Добавлю - если вручную пересчитываю hex в float - всё правильно!
Последний раз редактировалось za9c; 05.07.2017 в 10:30.