Просмотр полной версии : СП3хх + ПЛК 110-60, связь по modbus
Добрый день! Столкнулся с проблемой передачи числовых значений FLOAT из области памяти PFW по протоколу modbus rtu через интерфейс RS-232 между ПЛК110-60 и СП310. Имеются регистры PFW402-416.В функциональной области добавил копирование регистров из PFW402-416 в регистры 4х6-4х20 с типом данных DWord. В настройках проекта у порта стоят галочки: Передача данных и Изменить порядок регистров. Настройки ПЛК представлены ниже, добавлено 5 8-битных регистров и 3 FLOAT регистра. Также ПЛК выступает мастером и опрашивает модуль МВ-110-8А и значение передает в панель через регистр AI1QD7.6.0 FLOAT. В панели адресация для него PSW400 из 4х4, тип данных DWord. Все данные опрашиваются и передаются из панели в ПЛК, но на последнем регистре с адресом QD7.8.0.FLOAT выдает 0, в панели соответствует регистр PFW404, для передачи в ПЛК скопировал в регистр 4х8, тип данных DWord. При этом же предыдущий регистр с адресом PFW402 и 4х6 передает значение корректно, если в конфигурации ПЛК добавлено всего 3 регистра FLOAT. Если добавить все необходимые регистры FLOAT в ПЛК конфигурации, то все они также показывают 0,кроме самого первого AI1. Причем регистр PFW402- 4х6 также обращается в 0 при опросе ПЛК . В чем может быть проблема?
Добрый день! Столкнулся с проблемой передачи числовых значений FLOAT из области памяти PFW по протоколу modbus rtu через интерфейс RS-232 между ПЛК110-60 и СП310. Имеются регистры PFW402-416.В функциональной области добавил копирование регистров из PFW402-416 в регистры 4х6-4х20 с типом данных DWord. В настройках проекта у порта стоят галочки: Передача данных и Изменить порядок регистров. Настройки ПЛК представлены ниже, добавлено 5 8-битных регистров и 3 FLOAT регистра. Также ПЛК выступает мастером и опрашивает модуль МВ-110-8А и значение передает в панель через регистр AI1QD7.6.0 FLOAT. В панели адресация для него PSW400 из 4х4, тип данных DWord. Все данные опрашиваются и передаются из панели в ПЛК, но на последнем регистре с адресом QD7.8.0.FLOAT выдает 0, в панели соответствует регистр PFW404, для передачи в ПЛК скопировал в регистр 4х8, тип данных DWord. При этом же предыдущий регистр с адресом PFW402 и 4х6 передает значение корректно, если в конфигурации ПЛК добавлено всего 3 регистра FLOAT. Если добавить все необходимые регистры FLOAT в ПЛК конфигурации, то все они также показывают 0,кроме самого первого AI1. Причем регистр PFW402- 4х6 также обращается в 0 при опросе ПЛК . В чем может быть проблема?
"...
Если в модуле используются переменные разных типов (например, одновременно восьмибитный, двухбайтный и четырехбайтный), то во время распределения адресов CODESYS «выравнивает» адресов переменных – упорядочивать адреса переменных в памяти модуля. Упорядочение адресов заключается в организации памяти таким образом, что переменные размером 8 бит, 2 байта и 4 байта располагаются только по определенным адресам: четырехбайтным переменным присваиваются адреса, кратные 2, двухбайтным – кратные 1. Вне зависимости от порядка задания переменных, выравнивание назначает переменным адреса, кратные их длине.
"
Посмотрите "Выравнивание адресации" в РЭ (https://docs.owen.ru/product/plk110_m02/758/62376#topic-62410)
Если я правильно понял, то в моей конфигурации регистр 4-5 соответствует первому значению FLOAT - AI1. Следующий регистр 6-7 соответствует переменной с адресацией QD7.7.0. который корректно передает значение, не могу понять почему следующий 8-9 показывает 0, если должен также как и предыдущий показывать корректное значение. Или там уже передавать именно в 9 регистр с панели чтобы он передал значение корректно?
Если я правильно понял, то в моей конфигурации регистр 4-5 соответствует первому значению FLOAT - AI1. Следующий регистр 6-7 соответствует переменной с адресацией QD7.7.0. который корректно передает значение, не могу понять почему следующий 8-9 показывает 0, если должен также как и предыдущий показывать корректное значение. Или там уже передавать именно в 9 регистр с панели чтобы он передал значение корректно?
Чтобы избежать сдвига при выравнивании, поставьте первыми в ПЛК все FLOAT значения, а потом - 8bit-ные
kondor3000
26.07.2024, 08:57
Просто 8bit надо добавлять по 2 шт. (заполнить регистр), я наоборот ставлю все 8bit, потом все 2 BYTE (с запасом), потом FLOAT, так чтобы FLOAT начинались с чётного адреса.
В функц. области надо ставить Копировать группу регистров, даже для 1 DWORD (это 2 регистра), но можно копировать и 10 регистров сразу, например с адреса 400, кол-во 10 регистров, это 5 Float.
Просто 8bit надо добавлять по 2 шт. (заполнить регистр), я наоборот ставлю все 8bit, потом все 2 BYTE (с запасом), потом FLOAT, так чтобы FLOAT начинались с чётного адреса.
В функц. области надо ставить Копировать группу регистров, даже для 1 DWORD (это 2 регистра), но можно копировать и 10 регистров сразу, например с адреса 400, кол-во 10 регистров, это 5 Float.
Поменял конфигурацию в соответствии с вашим советом и изменил функциональную область на копирование группы регистров, теперь все корректно работает, спасибо!
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot