Подвисание службы коммуникатора

Стартовая страница Форумы Ошибки в работе Ошибки Коммуникатора Подвисание службы коммуникатора

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

    Добрый день, коллеги!
    У меня подвисает служба коммуникатора при попытке записать значение в переменную.
    Использую OPC dll, канал управления в базе прописан, номер команды — 99. Пытаюсь писать в Lectus OPC.

    https://postimg.org/image/t457nfw3n/
    https://postimg.org/image/3r1y48hw5/

    На картинках параметры для dll и собственно команда.
    После зависания службы привести ее (службу) в чувство с помощью GUI не удается. Диспетчер задач винды говорит, что служба работает. Лечится только остановом процесса.
    Самое интересное, что после перезапуска службы вижу результат исполнения команды — новое значение в переменной.

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

    Добрый день!
    Подвисает только одна линия связи? Пишется ли лог остальных линий и Коммуникатора при этом?
    Что будет если перезапустить только 1 линию связи?

    Если у Вас протокол Модбас, то лучше всего избавиться от прослойки OPC и работать родным драйвером Rapid SCADA. Будет работать быстро и надёжно.

    #3391
    kustar
    Участник

    От ОРС избавиться не могу. Разработчик, проектируя СИКН, отступил от стандарта MODBUS — использовал четырехбайтные регистры для float. 4 байта вместо стандартных 2+2.
    Я пытался вашей dll читать напрямую по MODBUS, она их не понимает. Не только она. Попробовал три или четыре разных ОРС — ошибка чтения регистров. У разработчика стоит Lectus, у него есть возможность настройки разрядности MODBUS регистров, он понимает.
    Так что, придется работать через Lectus’а.
    Теперь по ситуации. На коммуникаторе работает только одна линия связи (ОРС), остальные неактивны. При подвисании GUI сообщал, что не может остановить службу. Т.е. она работала, ДЗ тоже видел ее в системе как активную службу. Д.З. также не мог остановить. Остановил, выгрузив процесс.
    Логи линий, к сожалению, короткие, на 5 мин работы линии. Поэтому я информацию упустил. Перетерты и лог и бак.
    А в логе службы повторяется строчка:
    2016-10-26 12:28:51 <ARM><СИСТЕМА><ACT> Получена неактуальная команда из файла: команда управления приложением
    Это уже после всех перезапусков.

    #3392
    kustar
    Участник

    Я, видимо, что-то не так настроил в канале управления.
    Михаил, если можно, прошу тезисно, как настроить в скаде работу с тэгом на чтение и запись.

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

    Разработчик, проектируя СИКН, отступил от стандарта MODBUS — использовал четырехбайтные регистры для float. 4 байта вместо стандартных 2+2.

    Опишите подробнее, как они закодированы. Скорее всего, это решаемый вопрос.

    Подвисание скорее всего не связано с настройкой, а связано с Лектусом. По нему попадались негативные отзывы, никак не связанные с использованием этого сервера для Rapid SCADA.

    Чтобы что-то рекомендовать нужны логи, о которых написал выше.

    #3394
    kustar
    Участник

    Поскольку приходится экспериментировать на живом объекте, логи представлю чуть попозже. Сейчас не очень удобно.
    Что касается MODBUS’а. По стандарту float занимает 2 регистра, размер регистра — 2 байта. Адресация для float: 0x0h — первый, 0x2h — второй и тд.
    В моем случае адресация для float: 0x0h — первый, 0х1h — второй и тд. Размер регистра — 4 байт.
    Порядок старший — младший уже не помню, хорошо бы реализовать возможность перестановок полубайт в произвольном порядке.

    #3395
    manjey73
    Участник

    kustar вы что-то путаете, в Modbus на float 2 регистра например 0х00h — первый (2 байта) и 0х01h — (второй) — всего 4 байта.

    Перестановка в KpModbus.dll есть

    У вас не размер регистра 4 байта а просто длина 4 байта видимо указывается.

    Неужели вы в Lectus указывая разрядность регистра следующим читаете 0х01h ?

    • Этот ответ был изменен 7 лет, 5 месяцев назад от manjey73.
    #3397
    kustar
    Участник

    Ничего не путаю. Разработчик СИКН упростил себе задачу адресации float’ов, сделав ее по порядку без пропусков: 0x0h, 0x1h, 0x2h и тд. Цена — отступление от стандарта MODBUS.
    А Lectus имеет возможность настройки именно РАЗМЕРА РЕГИСТРА MODBUS.
    Т.е. у них float укладывается в один регистр. Но мало кто такой регистр может прочитать. Разве что Lectus.

    А перестановки, таки да, есть!!

    #3399
    manjey73
    Участник

    Блин, да какая разница как сделал разработчик СИКН, если там все те же 4 байта ?

    OPC Lectus работает с Modbus и умудряется читать данную переменную, а то, что вы не можете ее правильно прочесть другим инструментом, так это все только от настроек…

    Вам кто-то мешает вместо 0х1h который придумал разработчик чего-то там указать 0x2h и опробовать смену байт проверить ???? не пойму….

    float никогда не укладывался в один регистр, судя по всему разработчики Lectus такие же, как разработчик вашего СИКН….

    Покажите где в Lectus указывается количество байт на регистр ?
    Какую функцию вы используете для чтения ?

    • Этот ответ был изменен 7 лет, 5 месяцев назад от manjey73.
    #3401
    manjey73
    Участник

    Смотрю справку на Lectus, не вижу ничего военного, чтобы говорило, что только он один может прочесть СИКН.

    #3402
    kustar
    Участник

    Если узнаете Lectus, то вот здесь:
    https://postimg.org/image/ya6y9jedr/
    Функция 03, стандартная.

    Что касается настройки инструментов, потратил на это две недели.
    Сделал простой вывод: инструменты, заточенные под стандартные источники, не работают с нестандартными.
    И еще: один четырехбайтный регистр и два двухбайтных регистра — это две большие разницы.
    Не повторяйте мой опыт в части потери времени, просто поверьте.

    И кстати, мы уже далеко ушли от заявленной темы.

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

    Существует множество отклонений от Модбас. То, что описывает kustar, похоже на http://www.simplymodbus.ca/Enron.htm

    Если адресуются сразу 4 байта, то может быть и можно настроить KpModbus.dll, но заранее трудно сказать, нужно анализировать и сравнивать пакеты.

    #3404
    manjey73
    Участник

    Теперь понятно, нашел это в справке.
    Можете показать запрос ответ логером порта если подключиться по COM порту к устройству ? Есть такая возможность ?

    з.ы. можно драйвер накидать для Rapid SCADA.
    Или побаловаться с настройкой групп для запросов и потом накладывая формулу на канал.

    нужен вывод логера с родным ПО, что посылается, что получается в ответ…

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

    Если Лектус может отобразить запросы и ответы в 16-ричном виде, то можно их закинуть в http://modbus.rapidscada.net/ и посмотреть, что выдаст утилита.

    #3406
    kustar
    Участник

    Lectus работает по MODBUS TCP, собственного MODBUS терминала у него нет.
    Если зайти на СИКН каким-нибудь терминалом и прочитать 4 первых регистра, получим вот это:

    [22:39:37,352] <—:00 03 00 00 00 06 01 03 00 00 00 04
    [22:39:37,359] —>:00 03 00 00 00 13 01 03 10 8A 23 0B 42 88 67 59 45 F7 2A 1E 42 00 00 80 3F

    Как видно, устройство отдает 16 байт.
    Загружать на парсер смысла нет, т.к. он заточен под двухбайтные регистры. А здесь четыре четырехбайтных.
    Где старшие-младшие, не помню. В Lectus’е все стоит по умолчанию, без перестановок, вроде как начиная со старшего. Учитывая то, что Lectus все же не совсем стандартная штука, перестановки возможны. Думаю, так: 78563412.
    Для ориентации тэги по адресам:
    0 — float, значение ок. +35 с дробной частью;
    1 — float, не исп., не знаю;
    2 — float, значение ок. +39 с дробной частью;
    3 — float, не исп., не знаю.

    Если нужно больше — пришлю.

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