я это понимаю, ответ тоже Modbus, просто не такой, как ожидалось :) Интересно, слейвом в MS4D никто не пользуется с версии 1.2? и никто не выкатил ранее в баг репорт и никто не исправил?
Вид для печати
я это понимаю, ответ тоже Modbus, просто не такой, как ожидалось :) Интересно, слейвом в MS4D никто не пользуется с версии 1.2? и никто не выкатил ранее в баг репорт и никто не исправил?
Да все это проверялось, более того если послать значение которое при перемене байт не меняет значение то обмен проходит без ошибок например если послать 55 55 55 55 или 01 01 01 01. Это почти однозначная ошибка в реализации протокола (ну может быть есть некая не описанная в документации настройка, но я честно в этом сомневаюсь) и существует она несколько лет с версии 1.2.
Тут ситуация вот какая, есть аппаратно-программный комплекс (иностранного производства). В данном комплексе есть своя среда разработки с поддержкой определенного набора устройств. Нужно включить в работу устройство не из этого списка. Среди поддерживаемого оборудования есть WAGO 750-362. Вот только ПО этого комплекса не использует для записи команду 16, а только 6.
Ну так этот "аппаратно-программный комплекс (иностранного производства)" всегда будет говорить что запрос битый. Вы знаете его дальнейшую логику (переповторять до усрачки/положить болт/....)?
Но раз вы просто эмулируете вагу для проверки, исходите из того что вага - норм, а на эмулятор на МS4D сами кладите болт.
Если же эта МS4D как эмулятор чем-то так мила, но с 6-й сложно эмулировать - сделайте прозрачную прокладку которая ответ на ф.6 приводит в нужный вид.
Именно так и происходит, 10 попыток записи и БОЛТ (не шмогла я), 10 раз запись разных значений и ПОЛНЫЙ БОЛТ на устройство (да ну его нафиг) :) .
В 20-21-ом году обошел проблему тем что установку значений перенес в MS4D а в зарубежном ПО оставил только чтение. В этот раз решил немножко заморочиться. Открыл запрос в ТП и спросил на форуме (прикольная дискуссия получилась :) ). А вариантов решения есть целых три Python, Java и OpenScada (это те которые на тестовом проекте проверены и работают)
Ну нравится мне MS4D, нравится :) .
С прослойкой на уровне tcp заморачиваться лениво, а вот идею вы подали - использовать для обмена COM-порт. Это надо обдумать.
ну и чем вам прослойка не угодила? ну по крайней мере до момента исправления проблемы как минимум.
илиЦитата:
Ну нравится мне MS4D, нравится .
Ну так определитесь. За вас то не сможемЦитата:
Мне проще на питоне, джаве или опенскаде эмуляцию ваги реализовать.
Тык там почти не нужно, там поток четко "пакетизируется". Все условия-то по tcpЦитата:
нужно разбирать весь поток
if (от MS4D) & (размер = 12) & ([7] = 6) then swap [10] и [11]
а если попробовать в OPC UA ? MS4D ведь с ней работает. правда я не пробовал Modbus slave, который есть в RapidScada преобразовывать в OPC UA (надо будет попробовать). Ну и Modbus slave там правда платный от разраба.
В смысле не занимаясь разбором пакетов, просто as is так сказать.
И вероятно еще пересчитать CRC придется.
ну, тут палка о двух концах. Перевод в RTU в MS4D по справке указанием порта 0. и вот как оно там что формирует обратный пакет непонятно. При этом ошибка со слов и в TCP и в RTU режиме.
Возможно еще до расчета CRC, который либо считается либо нет при уже явном определении через что ответ (TCP или RTU)
какое RTU?
Запустил серверКод:открыл tcp-сервер
постучались в сервер -> открыл tcp-клиента в сторону MS4D
OnRecv из MS4D
если нужное -> swap //см. выше
отправил постучавшемуся
OnRecv от постучавшего
отправил в MS4D
OnDisconnect от MS4D
close постучавшемуся
OnDisconnect постучавшего
close для MS4D
Настроил на него "аппаратно-программный комплекс (иностранного производства)"
Всё
выше AlexF проверил через COM порт в том числе https://owen.ru/forum/showthread.php...l=1#post470121Цитата:
какое RTU?
Первая линия техподдержки передала проблему разработчикам.