PDA

Просмотр полной версии : непонятное поведение SysLibCom



alexx12
09.02.2023, 13:59
Подскажите, кто знает: с помощью ПЛК100 нужно опрашивать регулятор температуры ТЕРМОДАТ 12 каналов. Прибор понимает только modbus ASCII. Текущая температура находится в регистрах начиная с 0. Параметры порта- 8 бит данных, один стоп бит, без контроля четности. При настройке опроса в ПЛК через конфигуратор всё прекрасно работает. И текущая температура и заданная считывается без проблем. Попытался организовать опрос через библиотеку MODBUS.lib по примеру из описания библиотеки. Опрашивать решил пока один канал. Прибор отвечает, но очень долго. Подключившись параллельно линии RS485 сниффером видно, что прибор отвечает бессвязным набором символов, которые не интерпретируются в посылку modbus ASCII. Причем ответ всегда одинаковый, судя по набору символов. А примерно 1 раз в 50 посылок ответ приходит нормальный. Далее опять белиберда и через 50 посылок верный ответ. Решил опять организовать опрос через конфигуратор. Также один кaнaл, тот же самый. Сниффер показал адекватный ответ от прибора. Попробовал просто через терминал с компа отправлять посылку аналогичную той, что отправляет ПЛК. Ответ также адекватный. Выкинул прослойку MODBUS.lib и решил опрашивать просто библиотекой SysLibCom, посылая ту же посылку, что и через терминал. Тоже белиберда в ответ приходит. В попытках понять причину установил скорость обмена на приборе и в библиотеке на 57600 и обмен пошел нормальный. Вернул на 9600- белиберда. Любая другая скорость кроме 57600-белиберда. Посылка одна и таже. Настройки порта в библиотеке не меняю кроме скорости. Что я не так делаю? 6580665807

kondor3000
09.02.2023, 14:11
Не знаю какой пример вы использовали, только у вас половины нет в программе. Посмотрите Скрин и сравните со своей программой.

Термодат на 12 каналов настраивается и на modbus ASCII и на modbus RTU, почему скорость 9600, в Термодате по умолчанию по моему 115200. 65809
Вот скрин, переделанный пример c сайта, для опроса Термодат 22-M5 ( Modbus RTU, адрес 32, 115200, 8N1 ) 12 каналов INT, начиная с адреса 0

Примеры сетевого обмена,
5) Обмен через библиотеки Modbus и OwenNet
https://owen.ru/product/codesys_v2/example_program

alexx12
09.02.2023, 14:47
Новые термодаты умеют RTU. Старые могли только ascii и свой собственный "термодат". У меня необходимость опрашивать именно термодат старого образца. И причем именно на скорости 9600. В моей программе нет "половины" которая относится к библиотеке MODBUS.lib. В программе я тупо открываю порт и шлю в него готовую посылку, которая спрашивает текущую температуру 6-го канала у прибора с адресом 30. Эту же самую посылку я отправляю просто терминалом из винды и получаю нормальный ответ. А после отправки её же с ПЛК получаю ерунду (это видно на приложенных картинках). Собственно это я и описал в своем посте

alexx12
09.02.2023, 15:00
Все примеры, которые находил, я перепробовал. Также обновил прошивку ПЛК до последней. Ничего не помогает. Я бы обвинил во всём термодат, но ту же самую посылку из терминала с компа он принимает и отдает корректный ответ. Причем на любой скорости

kondor3000
09.02.2023, 16:13
Все примеры, которые находил, я перепробовал. Также обновил прошивку ПЛК до последней. Ничего не помогает. Я бы обвинил во всём термодат, но ту же самую посылку из терминала с компа он принимает и отдает корректный ответ. Причем на любой скорости

Начинаем сначала. Вы прибор опросить хотите или записать уставки в него? Пишите про чтение 6 канала, а выкладываете проект на запись с какой то билебердой.

Переделать пример с сайта, надо 10 мин.
Протокол и скорость можно в примере поставить ASCII и 9600

alexx12
09.02.2023, 16:34
В проекте я посылаю посылку "3А 31 45 30 33 30 30 30 35 30 30 30 31 44 39 0D 0A" что соответствует ":1E0300050001D9" в формате ASCII. Где 1Е-адрес прибора, 05- адрес регистра. Не пойму, где вы тут увидели про 58 адрес? Переменная "a" у меня инкримируется каждый цикл ПЛК. При достижении 350 происходит собственно посылка, после чего переменная обнуляется. Своеобразная пауза между посылками на скорую руку

Валенок
09.02.2023, 17:35
в t чего ?

alexx12
10.02.2023, 08:16
t-количество переданных байт (из описания функции SysComWrite)

Валенок
10.02.2023, 20:17
t-количество переданных байт (из описания функции SysComWrite)
Не что должно, а что есть?

alexx12
13.02.2023, 09:42
Число 17. Появляется сразу после передачи посылки. Криминала не увидел