PDA

Просмотр полной версии : RS485 Modbus int32 переменные в ПР200 (Slave)



Falanor
22.04.2019, 16:29
Здравствуйте!

Есть устройство ПР200 работающее в режиме slave по RS485. В среде Owen Logic переменные в этом режиме объявляются без указания количества регистров.
42398
Вместе с тем в режиме симуляции им можно присваивать значения больше 65535, а значит фактически переменные являются 32-битными.

В режиме Master можно выбрать 2 регистра для переменной, тем самым объявив её 32 битной:
42397

Вопросы:
1. Как задавать 32-битные целочисленные переменные в режиме slave?
2. Как их считывать master-устройством? (В каких регистрах они хранятся?)
3. Где задаётся порядок байт и регистров для них?

Ревака Юрий
22.04.2019, 17:30
Здравствуйте!

Есть устройство ПР200 работающее в режиме slave по RS485. В среде Owen Logic переменные в этом режиме объявляются без указания количества регистров.
42398
Вместе с тем в режиме симуляции им можно присваивать значения больше 65535, а значит фактически переменные являются 32-битными.

В режиме Master можно выбрать 2 регистра для переменной, тем самым объявив её 32 битной:
42397

Вопросы:
1. Как задавать 32-битные целочисленные переменные в режиме slave?
2. Как их считывать master-устройством? (В каких регистрах они хранятся?)
3. Где задаётся порядок байт и регистров для них?

1. Использовать 2 регистра, в мастере соответственно учитывать этот момент, т.е регистры должны быть расположены рядом. 512-513, 513-514 и т.д
2. Мастером читать 2 регистра если это ПР200 (указываем что INT 2 регистра), либо что это INT32 для других вариантов, либо по обстоятельствам, но обязательно должно читаться 2 регистра.
3. В мастере в любом случае, в зависимости от того кто мастер, у каждого свои настройки, в ПР200 они в настройках сетевого устройства.

Falanor
22.04.2019, 18:27
Спасибо, в целом понятно, но небольшое уточнение.

По третьему вопросу: Вы имеете ввиду вот эти настройки? Меня смутило, что они отмечены, как настройки float. Значит они работают и для int переменных?
42400

То есть если в ПР200 slave переменная int регистра 512 превысит величину 65534, то будет автоматически задействован следующий регистр 513 согласно настройкам порядка очерёдности байт, но в интерфейсе это не будет отображаться.
И, если, например, верхний регистр согласно этим настройкам идёт первым, то после значения 65534 они поменяются местами (ведь переменная перестанет быть 16 битной. Правильно ли я понял?

Ревака Юрий
22.04.2019, 18:47
Спасибо, в целом понятно, но небольшое уточнение.

По третьему вопросу: Вы имеете ввиду вот эти настройки? Меня смутило, что они отмечены, как настройки float. Значит они работают и для int переменных?
42400

То есть если в ПР200 slave переменная int регистра 512 превысит величину 65534, то будет автоматически задействован следующий регистр 513 согласно настройкам порядка очерёдности байт, но в интерфейсе это не будет отображаться.
И, если, например, верхний регистр согласно этим настройкам идёт первым, то после значения 65534 они поменяются местами (ведь переменная перестанет быть 16 битной. Правильно ли я понял?

Для слейва в ПР эти настройки не работают, поэтому все перекладывается на мастер, и организовывать INT32 нужно самостоятельно, при превышении 65535, ничего самостоятельно не добавится, необходимо из INT32 в логике которое по умолчанию, сдвигом формировать 2 сетевых регистра.

Falanor
22.04.2019, 18:55
Огромное спасибо за ответы! Теперь всё понятно.