PDA

Просмотр полной версии : Расположение (адреса) Modbus регистров в памяти контроллера.



nudgad
21.10.2018, 13:53
ПЛК100-РМ.
Modbus TCP|IP Slave.

Адрес переменной %QW.10.1.0.
В Модбасе это нулевой регистр. Прекрасно читается-пишется.
Пытаюсь обратиться к нему через %MW0, но это другая ячейка памяти.
Классическая картинка, когда нулевой регистр модбаса находится в нулевой области памяти не срабатывает.


Вопрос:Какой у него адрес в контроллере?
Т.е. как к нему обратиться по %MW....



Другими словами, Если я правильно понимаю..
В TargetSettings - MemoryLayout есть значения Base. Но их не видно, стоят галочки Auto.
Где бы посмотреть эти значения..

melky
21.10.2018, 14:00
какая необходимость обращаться к переменным по %XXXXX ?

просто назначить имена переменным не судьба ?

nudgad
21.10.2018, 15:45
просто назначить имена переменным не судьба ?

ОК. Имеем.

MyWord AT %QW10.1.0 ;

Как описать переменные к каждому биту?

SA104
21.10.2018, 16:04
Например переменная temp типа word - ее биты temp.0 , temp.1 ... temp.15
для вашего случая MyWord.0 MyWord.15

melky
21.10.2018, 16:10
все будет еще хуже, когда доберетесь до взаимодействия Scada и ПЛК. Так что сразу разделите переменные Modbus и программы. В начале цикла копируйте и делайте что хотите, в конце цикла копируйте обратно.

А то будете удивляться, почему из Scada переменные записываются через раз...

nudgad
21.10.2018, 16:10
Эта адресация ни какого отношения к конфигурации не имеет
Не понял, к какой конфигурации.
HoldingRegisters по-любому располагаются в памяти. У разных производителей контроллеров начинаются с разных областей физической памяти.
Распространённый вариант начала HoldingRegisters c 0х4000. Тут не получилось.

nudgad
21.10.2018, 16:13
Например переменная temp типа word - ее биты temp.0 , temp.1 ... temp.15
для вашего случая MyWord.0 MyWord.15

Вот спасибо. Переменные для того и именуют, чтобы глядя на неё было понятно, что это.. А не держать всегда под рукой табличку, чего означает 13 бит MyWodr27..

melky
21.10.2018, 16:26
а у вас в конфигураторе битовые переменные ?

Мимоход
21.10.2018, 16:29
Вот спасибо. Переменные для того и именуют, чтобы глядя на неё было понятно, что это.. А не держать всегда под рукой табличку, чего означает 13 бит MyWodr27..
Изучайте "Битовая адресация через глобальные константы"
Справка-->Указатель-->Bit addressing
и будет Вам счастье
Объявите глобальные константы с именами бит:

VAR_GLOBAL CONSTANT
enable:int:=2;
Start:int:=8;
Stop:int:=10;
END_VAR
И в теле программы вместо
MyWord.2, MyWord.8 и MyWord.10
будете обращаться к битам по именам
MyWord.enable, MyWord.Start и MyWord.Stop

nudgad
21.10.2018, 17:10
будете обращаться к битам по именам
MyWord.enable, MyWord.Start и MyWord.Stop
Извращение, имхо... Ну за идею спасибо. В крайнем случае так сделаю.
Слов-то не одно..

Переношу проект с другого типа контроллеров и там было так.. Коротко, наглядно...
MEM_Service1 AT %MW200:WORD; // Слово целиком
MEM_GetRady AT %MX400.0:BOOL;
MEM_Pusk_Route AT %MX400.1:BOOL;
MEM_Stop_Route AT %MX400.2:BOOL;
MEM_Reset_Route AT %MX400.3:BOOL;
MEM_Hand_Routing AT %MX400.4:BOOL;
MEM_Cross AT %MX400.5:BOOL :=0;

и т.д. ещё строк двести... Описывать всё это через константы нумерации бит ...

nudgad
21.10.2018, 17:26
поверхностно знаете про модбас, особенно его историю,
На знание истории не претендую, привёл как пример. Мне нужна ОДНА цифра. Адрес в памяти ПЛК100, с которого начинаются Holding (Output) Register.

nudgad
21.10.2018, 18:04
её нет
Ну как нет?!? Если есть переменная в памяти, то к ней должен быть и адрес. Это ж как с попой. Если она есть, то к ней должно быть и слово.. :)
Другое дело, что мне, как пользователю, может быть закрыт туда доступ..

И почему бы не попенять на другие контроллеры? Тем более под тем же Codesys программируемые..
http://wiki2.iridiummobile.ru/Примеры_взаимодействия_с_переменными_Modbus
тут например, чудесно описана карта памяти Beckhoff.
Привожу не для начала обсуждения хуже-лучше, а как пример, чего хотел.

Вопрос, впринципе, по рецепту Мимохода решён (СПАСИБО!), так что продолжать тему можно только для поболтать, либо у кого-то есть такая карта памяти для ПЛК.

melky
21.10.2018, 18:57
Как производитель придумал, так и будет. В данном случае конфигуратор придуман производителем. Полагаю, что можно сделать собственную карту, используя работу через библиотеки.