Страница 52 из 111 ПерваяПервая ... 242505152535462102 ... ПоследняяПоследняя
Показано с 511 по 520 из 1123

Тема: Modbus Universal MasterOPC Server новый OPC сервер от компании ИнСАТ

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Отдельные темы с конкретными вопросами есть.
    Видеопримеры по работе со скриптами тут:
    http://insat.ru/products/?category=2114
    Спасибо.

  2. #2

    По умолчанию

    Есть функции читающие количество тегов, а функции возвращающей false если хотя бы 1 тег имеет статус BAD?

  3. #3

    По умолчанию

    Такой функции нет.
    Спасибо.

  4. #4

    По умолчанию

    Добрый день !
    Есть счётчик ПСЧ и пара модбас устройств , линия связи только одна.
    Вариант1 - взять Modbus Universal MasterOPC Server реализовать протокол счётчика ПСЧ на скрипте.
    А есть ещё варианты ?
    вот есть Multi-Protocol MasterOPC Server с поддержкой драйвера счётчика ПСЧ, как-бы исхитриться и его задействовать...

  5. #5

    По умолчанию

    [QUOTE=Николай НВ;246930]
    Есть счётчик ПСЧ и пара модбас устройств , линия связи только одна.
    Вариант1 - взять Modbus Universal MasterOPC Server реализовать протокол счётчика ПСЧ на скрипте.
    А есть ещё варианты ?
    /QUOTE]
    Сделать две отдельных шины

    Цитата Сообщение от Николай НВ Посмотреть сообщение
    вот есть Multi-Protocol MasterOPC Server с поддержкой драйвера счётчика ПСЧ, как-бы исхитриться и его задействовать...
    Не получится. Когда добавляете порт он будет монопольно открыт одним драйвером, из того же скрипта в Multi-Protocol обратится не получится.
    Спасибо.

  6. #6

    По умолчанию Зависание скрипта.

    Описание объекта:
    Есть прибор с стандартным протоколом 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.

  7. #7

    По умолчанию

    Мы вам ответили по почте.
    Спасибо.

  8. #8

    По умолчанию

    Прошу помощи! Принимаю от прибора посылку.
    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.

  9. #9

    По умолчанию

    Цитата Сообщение от za9c Посмотреть сообщение
    "float:6:76543210"};
    Попробуйте float:6:3210
    Спасибо.

  10. #10

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Попробуйте float:6:3210
    Спасибо - помогло!

Страница 52 из 111 ПерваяПервая ... 242505152535462102 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •