Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Kinco Hmi и Modbus
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
ddark
Добрый день!

Суть проблемы в следующем: есть панель Kinco HMI MT4210 и есть 200 одинаковых контроллеров, подключенных по Modbus. Необходимо с этих контроллеров считывать определенный набор переменных...

Обычно для этих целей я создаю одно окошко визуализации, куда "подставляю" переменные для выбранного контроллера (т.е. грубо говоря влево-вправо перещелкиваю эти 200 контроллеров, окно одно и то же, а данные меняются, типа мультиплексор)

в среде разработки Kinco HMI я ладу не могу дать, как это сделать.. =(( получается только сделать 200 окошек с разными переменными... ну или же как то перегонять данные с устройств в некий массив огромный и из него заполнять... но это надо его вручную обновлять - не круто совсем

вообщем может кто подскажет как с помощью макросов опрашивать Modbus устройства чтобы можно было изменять адрес в сети как параметр

Спасибо заранее!
todatul
Цитата(ddark @ 12.7.2014, 10:37) *
Добрый день!

Суть проблемы в следующем: есть панель Kinco HMI MT4210 и есть 200 одинаковых контроллеров, подключенных по Modbus. Необходимо с этих контроллеров считывать определенный набор переменных...

Обычно для этих целей я создаю одно окошко визуализации, куда "подставляю" переменные для выбранного контроллера (т.е. грубо говоря влево-вправо перещелкиваю эти 200 контроллеров, окно одно и то же, а данные меняются, типа мультиплексор)

в среде разработки Kinco HMI я ладу не могу дать, как это сделать.. =(( получается только сделать 200 окошек с разными переменными... ну или же как то перегонять данные с устройств в некий массив огромный и из него заполнять... но это надо его вручную обновлять - не круто совсем

вообщем может кто подскажет как с помощью макросов опрашивать Modbus устройства чтобы можно было изменять адрес в сети как параметр

Спасибо заранее!

У многих панелей есть индексные регистры (смещение косвенной адресации), они позволяют индексировать адреса в пределах одного диапазона (одного адреса станции)
разместите несколько modbus-slave устройств (есть ограничение по колич устройств) с одинаковым адресом станции modbus-slave но с разными адресами регистров , например

3000-3020
4000-4020
5000-5020
6000-6020
7000-7020
8000-8020

изменяйте значение индексного регистра как
0
1000
2000
3000
4000

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



spectrum48k
Цитата(todatul @ 12.7.2014, 11:49) *
У многих панелей есть индексные регистры (смещение косвенной адресации), они позволяют индексировать адреса в пределах одного диапазона (одного адреса станции)
разместите несколько modbus-slave устройств (есть ограничение по колич устройств) с одинаковым адресом станции modbus-slave но с разными адресами регистров , например

3000-3020
4000-4020
5000-5020
6000-6020
7000-7020
8000-8020

изменяйте значение индексного регистра как
0
1000
2000
3000
4000

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

простите, а как индексный регистр в данном случае может быть связан с динамическим адресом rtu ?
goldenlife
Гляди личку. Может быть помогу. Там нет ничего сложного.
todatul
Цитата(spectrum48k @ 14.7.2014, 12:09) *
простите, а как индексный регистр в данном случае может быть связан с динамическим адресом rtu ?



про динамический речь не шла, а индексный регистр для смещения в косвенной адресации

например
base=3000 базовый адрес регистра slave modbus
index=2000 текущее значение индексного регистра
qty=20 колич слов для считывания

тогда начиная с адреса [3000 + index] будет считано 20 слов
меняя index меняем положение окна считывания (записи)
ddark
todatul, спасибо за верное направление!!!

вообщем с экранами моя проблема решается так:


т.е. на поле проекта вытаскивается один Modbus Slave RTU, а номер станции (контроллера) прописан в регистре, который соответственно можно менять... по событию макросом подставляю нужный адрес - все ок

однако это еще не все мои проблемы: мне бы разобраться как с помощью макросов считывать значение Modbus переменной... не могу дать ладу как корректно прописать ее адрес.. в мануале такая схемка:

а сама стандартная функция чтения записи идет вот так:

Read,Write Local address function:
int ReadLocal( const char *type, int addr, int nRegs, void *buf, int flag );
int WriteLocal( const char *type, int addr, int nRegs, void *buf , int flag );

Parameter: type is the string of "LW","LB" etc;
address is the Operation address ;
nRegs is the length of read or write ;
buf is the buffer which store the reading or writing data;
flag is 0,then codetype is BIN,is 1 then codetype is BCD;
return value : 1 ,Operation success
0, Operation fail.

как мне считать переменную, например из контроллера с адресом 10, адрес переменной 10h? подскажите пожалуйста
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.