Вы задали адрес NT ? и я нашел по Modbus таблицу, но сам документ имеет имя СПТ941 хотя по самому тексту везде 940
Вы задали адрес NT ? и я нашел по Modbus таблицу, но сам документ имеет имя СПТ941 хотя по самому тексту везде 940
Spawn не путайте ПЛК100 и 63, а то может оказаться памяти не хватит.
Если будете корячить все таки в ПЛК 63, то помогу чем смогу. По крайней мере расчет CRC без проблем. Ну и некоторое понимание определения местоположения данных, они там поддаются расчету.
Все-таки пишите на ST для ПЛК63?
из того, что помню. Если переменная не влазит в страницу памяти, то она разрывается на две страницы. Начало переменной в конце одной страницы, конец переменной в начале следующей.
Страницы памяти имеют заголовок и контрольную сумму. Если вы считаете две страницы памяти, то будет так
заголовок1 - данные_страницы1 - CRC_стр1 - заголовок2 - данные_страницы2 - CRC_стр2
В общем чутка попляшите с бубном![]()
В общем, получилось достучаться до прибора по протоколу Modbus RTU, но осталась незавершенная работа с протоколом М4. Никак не могу установить сеанс связи с прибором.
При попытке записать в порт абракадабру вида "16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#10, 16#02, 16#3F, 16#00, 16#00, 16#00, 16#00, 16#BE, 16#16", прибор в ответ шлет всего четыре байта: "16#32, 16#09, 16#04, 16#16", а должен присылать восемь байт: "16#10, 16#02, 16#3F, 16#92, 16#28, 16#00, 16#04, 16#16". Если значения 16#04 и 16#16 еще можно хоть как-то отнести к "хвосту" ответа, то от куда берутся 16#32 и 16#09 и почему ответ всего из четырех байт, не понятно...
Если в этом же (моем) коде переписать значения буфера на запрос Modbus RTU, то ответы от СПТ940 приходят "адекватные".
Не пойму в чем затык...
Вот лог опроса тепловычислителя OPC-сервером ЛОГИКА:
FDMS.png
Последний раз редактировалось Spawn; 23.03.2022 в 07:28.
Пробовал и с паузой, и без, и вообще без 16-ти FF - результат одинаковый: "16#32, 16#09, 16#04, 16#16"...
Причем, если, например, в запросе изменить адрес прибора (NT) с 02 на 03 (в приборе адрес оставить без изменений - 02), с пересчетом КС8, соответственно, то прибор молчит, значит, можно сделать вывод, что данные до прибора доходят, но в ответ он шлет какую-то несуразицу. Если КС8 "похе..ть", прибор тоже молчит...
Попробую заслать абракадабру с ПК.
Последний раз редактировалось Spawn; 23.03.2022 в 08:47.
В терминале на запрос "16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#10, 16#02, 16#3F, 16#00, 16#00, 16#00, 16#00, 16#BE, 16#16" нормальный ответ приходит: "16#10, 16#02, 16#3F, 16#92, 16#28, 16#00, 16#04, 16#16".Попробую заслать абракадабру с ПК.
melky, помогайте.
Куда копать?
Spawn начните с изучения протокола в первую очередь, есть документация на него.
Ориентироваться на лог обмена между OPC сервером и прибором надо осторожно, так как он посылает много служебной информации.
И да, он посылает первый раз 16-ть байт FF для инициализации линии или что-то вроде этого. Причем насколько помню, при обмене с ПК через интерфейс может работать и без этого. + пауза скорее всего должна быть.
// отправка стартовой последовательности
Connection.Write(ProtoRS.StartSequence, 0, ProtoRS.StartSequence.Length);
Thread.Sleep(Math.Min(ReqParams.Timeout, 1050)); // TODO !!!
Пауза нужна. глянул в свой код...
Последний раз редактировалось melky; 24.03.2022 в 09:37.
Что его изучать-то? Запрос сеанса связи "как на ладони".Spawn начните с изучения протокола в первую очередь, есть документация на него.
Затолкал в порт "16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#FF, 16#10, 16#02, 16#3F, 16#00, 16#00, 16#00, 16#00, 16#BE, 16#16", получил (должен получить) "16#10, 16#02, 16#3F, 16#92, 16#28, 16#00, 16#04, 16#16".
С терминала в порт отправлял запрос без всяких задержек (25 байт подряд одной "строкой"), ответ от СПТ приходит нормальный. Не пойму, в чем принципиальная разница использования задержки при отправке в порт данных с ПК и с ПЛК?
О какой служебной информации идет речь? В логе обмена (пост #16) ничего об этом не "сказано".так как он посылает много служебной информации.![]()