Просмотр полной версии : Не правильные значения переменных при передачи по протоколу Modbus (ПЛК210 - ПК)
Здравствуйте.
Пишу обмен ПЛК 210 с программой на ПК по протоколу Modbus TCP. ПЛК выступает в роли slave. Столкнулся с такой проблемой, что при обмене значения переменных имеют не верное значения.
В Codesys есть переменная типа REAL, с помощью функции REAL_TO_WORD2 конвертирую в два значения WORD и передаю по modbus на ПК. С пк считываю значение как float и оно имеет не верное значение. Например передаю с плк 12 а приходит 2,3....
Пробовал передавать значение типа int, но все равно происходит расхождение значений.
Помогите пожалуйста настроить обмен.
kondor3000
29.07.2023, 16:39
Здравствуйте.
Пишу обмен ПЛК 210 с программой на ПК по протоколу Modbus TCP. ПЛК выступает в роли slave. Столкнулся с такой проблемой, что при обмене значения переменных имеют не верное значения.
В Codesys есть переменная типа REAL, с помощью функции REAL_TO_WORD2 конвертирую в два значения WORD и передаю по modbus на ПК. С пк считываю значение как float и оно имеет не верное значение. Например передаю с плк 12 а приходит 2,3....
Пробовал передавать значение типа int, но все равно происходит расхождение значений.
Помогите пожалуйста настроить обмен.
Float это 32 битная переменная ( 2 регистра WORD или 4 байта), при не правильном отображении надо поменять местами регистры ( байты)
Для начала поменяйте местами WORD-ы.
У меня из числа 12.0 при перестановке регистров получилось 2.340729e-041
Поменял местами WORD, теперь значение на ПК стало 3,015625, но не 12 Во вложении скриншот регистров во время отладки
Так же я пробовал с типом INT используя один регистр WORD. Все равно не правильно значение передается. Может у вас есть рабочий пример, буду очень благодарен?
kondor3000
29.07.2023, 18:59
Так же я пробовал с типом INT используя один регистр WORD. Все равно не правильно значение передается. Может у вас есть рабочий пример, буду очень благодарен?
У вас нормальный пример и проблема в перестановке регистров и байт, (при условии, что адрес регистров правильный) надо найти правильную комбинацию их всего 4. Вот скрин с вариантами 69283
Правильное число получено при перестановке регистров 123.4568
Скачайте Овен ОРС сервер, дело 2 минут, добавьте свой флоат, там есть переставить регистры и переставить байты и проверьте https://owen.ru/product/new_opc_server
Если у вас и целочисленное INT не правильно отображается, то ещё и байты надо переставить.
В вашей программе тоже должна быть перестановка.
Вот скрин с вашим числом 12, всё как у вас 69288
Кстати байты можно переставить и у вас в программе, вместо FALSE поставить TRUE на входе блока 69289
У вас нормальный пример и проблема в перестановке регистров и байт, (при условии, что адрес регистров правильный) надо найти правильную комбинацию их всего 4. Вот скрин с вариантами 69283
Правильное число получено при перестановке регистров 123.4568
Скачайте Овен ОРС сервер, дело 2 минут, добавьте свой флоат, там есть переставить регистры и переставить байты и проверьте https://owen.ru/product/new_opc_server
Если у вас и целочисленное INT не правильно отображается, то ещё и байты надо переставить.
В вашей программе тоже должна быть перестановка.
Вот скрин с вашим числом 12, всё как у вас 69288
Кстати байты можно переставить и у вас в программе, вместо FALSE поставить TRUE на входе блока 69289
Спасибо большое. Помогло.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot