PDA

Просмотр полной версии : Адреса переменных для опроса OPC-сервером



Juan Esteban
23.12.2020, 11:59
Здравствуйте все! Я новичок в этом деле, поэтому прошу снисхождения за, возможно, глупый вопрос.

Есть контроллер ПЛК110...[M02], у него куча переменных. Надо организовать опрос некоторых из них через OPC-сервер (в данном случае MasterOPC Universal Modbus Server), для этого в кодесисе в конфигурации ПЛК я настроил ModBus(slave) на протокол Modbus/TCP, добавил переменные, как-то передал им значения из других переменных. Вопрос - как можно узнать их адреса, по которым будет проводиться опрос?

В одном документе я прочитал, что, мол, надо их нумеровать по порядку, начиная с 0, с учетом выравнивания памяти (типа адреса двухбайтовых переменных должны начинаться с адресов, кратных двум, четырехбайтновых - четырем). Я так и сделал, но опрос у меня не ладится, и я подозреваю, что проблема с адресами. Неужели нигде нельзя посмотреть точный адрес переменной, надо вручную считать? И если надо считать, то надо ли учитывать другие переменные (например, переменные модулей ввода и вывода)?

petera
23.12.2020, 12:14
Здравствуйте все! Я новичок в этом деле, поэтому прошу снисхождения за, возможно, глупый вопрос.

Есть контроллер ПЛК110...[M02], у него куча переменных. Надо организовать опрос некоторых из них через OPC-сервер (в данном случае MasterOPC Universal Modbus Server), для этого в кодесисе в конфигурации ПЛК я настроил ModBus(slave) на протокол Modbus/TCP, добавил переменные, как-то передал им значения из других переменных. Вопрос - как можно узнать их адреса, по которым будет проводиться опрос?

В одном документе я прочитал, что, мол, надо их нумеровать по порядку, начиная с 0, с учетом выравнивания памяти (типа адреса двухбайтовых переменных должны начинаться с адресов, кратных двум, четырехбайтновых - четырем). Я так и сделал, но опрос у меня не ладится, и я подозреваю, что проблема с адресами. Неужели нигде нельзя посмотреть точный адрес переменной, надо вручную считать? И если надо считать, то надо ли учитывать другие переменные (например, переменные модулей ввода и вывода)?

По порядку, начиная с 0 с учетом выравнивания памяти (типа адреса четырех байтовых переменных должны начинаться с адресов, кратных двум)
https://owen.ru/forum/attachment.php?attachmentid=12345&d=1395648726

Juan Esteban
23.12.2020, 12:50
Ага, то есть Float-переменные занимают два регистра Modbus - наверное, в этом моя ошибка, я их считал по порядку.

Juan Esteban
23.12.2020, 13:02
А еще вопрос. Вот я задал эти переменные. Как правильно сделать так, чтобы значения внутренних переменных передавались OPC-переменным, а при их изменении со стороны OPC-сервера соответственно значения передавались внутренним переменным? Я сделал две POU, которые передают значения - каждая в свою сторону, и запускаю их циклически через конфигуратор задач с разным приоритетом. Но при этом способе почему-то происходит мигание. Например, внутренняя переменная изначально равна 1, а при запуске начинается мигание 0 - 1 - 0 - 1. Почему так происходит? Ведь по идее, значение 1 должно в первом проходе записаться в OPC-переменную и обратно так же должно передваться 1? Или это как-то связано с тем, что эти переменные являются энергонезависимыми?

Juan Esteban
23.12.2020, 18:56
Разобрался, дело оказалось в неверном порядке действий в функциональных блоках, отвечающих за соединение двух байтов в одно слово и наоборот. Короче, мой программный косяк.

жекон
23.12.2020, 20:10
petera а разве не будет работать 2 ворда с адресами 0 и 1

petera
23.12.2020, 21:30
petera а разве не будет работать 2 ворда с адресами 0 и 1

Естественно будут

жекон
24.12.2020, 04:34
Тогда причем кратность 2?

petera
24.12.2020, 10:38
Тогда причем кратность 2?

ХА!
Нашел свою оплошность, копи/пасте подвело :rolleyes: