Стартовая страница › Форумы › Ошибки в работе › Ошибки Коммуникатора › Подвисание службы коммуникатора
- В этой теме 36 ответов, 3 участника, последнее обновление 9 лет, 10 месяцев назад сделано
Mikhail.
-
АвторЗаписи
-
26.10.2016 в 09:55 #3388
kustarУчастникДобрый день, коллеги!
У меня подвисает служба коммуникатора при попытке записать значение в переменную.
Использую OPC dll, канал управления в базе прописан, номер команды — 99. Пытаюсь писать в Lectus OPC.https://postimg.org/image/t457nfw3n/
https://postimg.org/image/3r1y48hw5/На картинках параметры для dll и собственно команда.
После зависания службы привести ее (службу) в чувство с помощью GUI не удается. Диспетчер задач винды говорит, что служба работает. Лечится только остановом процесса.
Самое интересное, что после перезапуска службы вижу результат исполнения команды — новое значение в переменной.26.10.2016 в 11:49 #3390
MikhailМодераторДобрый день!
Подвисает только одна линия связи? Пишется ли лог остальных линий и Коммуникатора при этом?
Что будет если перезапустить только 1 линию связи?Если у Вас протокол Модбас, то лучше всего избавиться от прослойки OPC и работать родным драйвером Rapid SCADA. Будет работать быстро и надёжно.
26.10.2016 в 12:35 #3391
kustarУчастникОт ОРС избавиться не могу. Разработчик, проектируя СИКН, отступил от стандарта MODBUS — использовал четырехбайтные регистры для float. 4 байта вместо стандартных 2+2.
Я пытался вашей dll читать напрямую по MODBUS, она их не понимает. Не только она. Попробовал три или четыре разных ОРС — ошибка чтения регистров. У разработчика стоит Lectus, у него есть возможность настройки разрядности MODBUS регистров, он понимает.
Так что, придется работать через Lectus’а.
Теперь по ситуации. На коммуникаторе работает только одна линия связи (ОРС), остальные неактивны. При подвисании GUI сообщал, что не может остановить службу. Т.е. она работала, ДЗ тоже видел ее в системе как активную службу. Д.З. также не мог остановить. Остановил, выгрузив процесс.
Логи линий, к сожалению, короткие, на 5 мин работы линии. Поэтому я информацию упустил. Перетерты и лог и бак.
А в логе службы повторяется строчка:
2016-10-26 12:28:51 <ARM><СИСТЕМА><ACT> Получена неактуальная команда из файла: команда управления приложением
Это уже после всех перезапусков.26.10.2016 в 12:38 #3392
kustarУчастникЯ, видимо, что-то не так настроил в канале управления.
Михаил, если можно, прошу тезисно, как настроить в скаде работу с тэгом на чтение и запись.26.10.2016 в 13:20 #3393
MikhailМодераторРазработчик, проектируя СИКН, отступил от стандарта MODBUS — использовал четырехбайтные регистры для float. 4 байта вместо стандартных 2+2.
Опишите подробнее, как они закодированы. Скорее всего, это решаемый вопрос.
Подвисание скорее всего не связано с настройкой, а связано с Лектусом. По нему попадались негативные отзывы, никак не связанные с использованием этого сервера для Rapid SCADA.
Чтобы что-то рекомендовать нужны логи, о которых написал выше.
26.10.2016 в 14:46 #3394
kustarУчастникПоскольку приходится экспериментировать на живом объекте, логи представлю чуть попозже. Сейчас не очень удобно.
Что касается MODBUS’а. По стандарту float занимает 2 регистра, размер регистра — 2 байта. Адресация для float: 0x0h — первый, 0x2h — второй и тд.
В моем случае адресация для float: 0x0h — первый, 0х1h — второй и тд. Размер регистра — 4 байт.
Порядок старший — младший уже не помню, хорошо бы реализовать возможность перестановок полубайт в произвольном порядке.26.10.2016 в 14:54 #3395
manjey73Участникkustar вы что-то путаете, в Modbus на float 2 регистра например 0х00h — первый (2 байта) и 0х01h — (второй) — всего 4 байта.
Перестановка в KpModbus.dll есть
У вас не размер регистра 4 байта а просто длина 4 байта видимо указывается.
Неужели вы в Lectus указывая разрядность регистра следующим читаете 0х01h ?
-
Ответ изменён 9 лет, 10 месяцев назад пользователем
manjey73.
26.10.2016 в 15:53 #3397
kustarУчастникНичего не путаю. Разработчик СИКН упростил себе задачу адресации float’ов, сделав ее по порядку без пропусков: 0x0h, 0x1h, 0x2h и тд. Цена — отступление от стандарта MODBUS.
А Lectus имеет возможность настройки именно РАЗМЕРА РЕГИСТРА MODBUS.
Т.е. у них float укладывается в один регистр. Но мало кто такой регистр может прочитать. Разве что Lectus.А перестановки, таки да, есть!!
26.10.2016 в 16:18 #3399
manjey73УчастникБлин, да какая разница как сделал разработчик СИКН, если там все те же 4 байта ?
OPC Lectus работает с Modbus и умудряется читать данную переменную, а то, что вы не можете ее правильно прочесть другим инструментом, так это все только от настроек…
Вам кто-то мешает вместо 0х1h который придумал разработчик чего-то там указать 0x2h и опробовать смену байт проверить ???? не пойму….
float никогда не укладывался в один регистр, судя по всему разработчики Lectus такие же, как разработчик вашего СИКН….
Покажите где в Lectus указывается количество байт на регистр ?
Какую функцию вы используете для чтения ?-
Ответ изменён 9 лет, 10 месяцев назад пользователем
manjey73.
26.10.2016 в 16:30 #3401
manjey73УчастникСмотрю справку на Lectus, не вижу ничего военного, чтобы говорило, что только он один может прочесть СИКН.
26.10.2016 в 17:10 #3402
kustarУчастникЕсли узнаете Lectus, то вот здесь:
https://postimg.org/image/ya6y9jedr/
Функция 03, стандартная.Что касается настройки инструментов, потратил на это две недели.
Сделал простой вывод: инструменты, заточенные под стандартные источники, не работают с нестандартными.
И еще: один четырехбайтный регистр и два двухбайтных регистра — это две большие разницы.
Не повторяйте мой опыт в части потери времени, просто поверьте.И кстати, мы уже далеко ушли от заявленной темы.
26.10.2016 в 17:25 #3403
MikhailМодераторСуществует множество отклонений от Модбас. То, что описывает kustar, похоже на http://www.simplymodbus.ca/Enron.htm
Если адресуются сразу 4 байта, то может быть и можно настроить KpModbus.dll, но заранее трудно сказать, нужно анализировать и сравнивать пакеты.
26.10.2016 в 17:26 #3404
manjey73УчастникТеперь понятно, нашел это в справке.
Можете показать запрос ответ логером порта если подключиться по COM порту к устройству ? Есть такая возможность ?з.ы. можно драйвер накидать для Rapid SCADA.
Или побаловаться с настройкой групп для запросов и потом накладывая формулу на канал.нужен вывод логера с родным ПО, что посылается, что получается в ответ…
26.10.2016 в 17:28 #3405
MikhailМодераторЕсли Лектус может отобразить запросы и ответы в 16-ричном виде, то можно их закинуть в http://modbus.rapidscada.net/ и посмотреть, что выдаст утилита.
26.10.2016 в 21:19 #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, не исп., не знаю.Если нужно больше — пришлю.
-
Ответ изменён 9 лет, 10 месяцев назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.