PDA

Просмотр полной версии : modbus и массив структур



lttn
13.06.2019, 18:21
День добрый.
Есть следующая задача: установка, состоящая из нескольких сотен идентичных узлов.
Есть контроллер ПЛК110 [ms02] и какая-то modbus периферия к нему.
Каждый узел имеет десяток настроек и десяток результатов измерений.
Все данные (и настройки и измерения) должны отображаться в modbus.
Настройки должно быть можно менять как через modbus так и с веб-интерфейса.
______
Суть вопроса/проблемы: каким образом соотнести внешние каналы (привязанные к modbus) с компонентами массива структур (куда складываются все данные)?
Проблема в том, что сделать внешний канал связанный с компонентом одной структуры можно. А с массивом структур - нельзя, поскольку он не разворачивается до компонентов структуры и можно сослаться только на элемент массива, т.е. структуру целиком, что вовсе не то, что требуется.
______
Существует ли правильный способ организации взаимодействия массивов структур с modbus и экранными формами, или все присвоения придется делать путем написания отдельной программы?

lara197a
13.06.2019, 18:37
3 — чтение группы регистров;
6 — запись регистра;
16 — запись группы регистров.

Читайте и записывайте.
Раскладывать по битам и регистрам в структуре нужно программно.

lttn
13.06.2019, 20:24
функции модбас я знаю, спасибо. Речь совсем о другом. Есть массив структур MS[200], структуры, допустим, вида {a,b,c,d,e}
каким образом создать внешний кaнaл связанный, к примеру, с MS[126].b? При том, что создать его можно исключительно методом перетаскивания в папку "внешние каналы" нужного компонента, а компонент этот в дереве не отображается?
{получил немало удовольствия от здешнего бота полиции нравов, похоже у него паранойя}

SCADAMaster
13.06.2019, 22:23
Речь ведь идет про MasterSCADA?
Тогда про какой массив структур вы говорите?
Опишите вашу задачу детальнее, если есть проект - приложите (Проект - ЭКспортировать), также приложите несколько скриншотов.

lttn
19.06.2019, 19:59
Речь ведь идет про MasterSCADA?
-- ну я полагал, что речь идет о MasterSCADA 4D,
Тогда про какой массив структур вы говорите?
хм... про массив структур. Создаем пользовательский тип данных - структуру (см. пример). Создаем в объекте параметр с типом массив этих самых пользовательских структур.
Переходим в "систему", добавляем PLC110_30, в него добавляем протокол modbus RTU и в папку "внешние каналы" канал с неким modbus адресом. Теперь требуется, чтобы этот канал был отображал значение, скажем из 88 элемента созданного нами массива тех самых структур, из второго компонента этого элемента. В приведенном примере требуется, чтобы "Параметр 1[88].Поле_2" читалось и записывалось в контроллер по протоколу modbus RTU по адресу 22.
Это в качестве примера.
В реальном проекте массив структур должен полностью соответствовать modbus карте контроллера и быть размером примерно 50 элементов массива и в структуре 20 компонентов. Т.е. тысяча регистров.
собственно весь проект умещается на одном скриншоте: 43223

KrAssor
20.06.2019, 10:35
Мне кажется, вам придется все таки программно перекладывать значения из массива структур в параметры объекта, а потом уже эти параметры портировать во внешние каналы узла. Но может быть SCADAMaster4D подскажет, как обращаться из программы напрямую к переменным внешних каналов узла.

lttn
20.06.2019, 12:39
особенность заключается еще и в том, что обмен массива структур с modbus - двунаправленный. И изменены компоненты массива могут быть несколькими источниками - из GUI, из программ и с использованием modbus. Появление прокладки (в виде параметров объекта) между внешними каналами и массивом порождает проблему отслеживания изменений данных, которую вообще непонятно как решать - потребуется еще одна копия массива структур для сравнения что именно изменилось и где изменилось - переменная modbus или значение в массиве структур и потребуется дурацкая программа - диспетчер, которая будет отслеживать и копировать изменения в нужном направлении. При большом количестве переменных, полагаю, такая конструкция сожрет все ресурсы контроллера.
Если я правильно понимаю внешний канал - указатель, а не самостоятельная переменная и его использование таких проблем порождать не должно, поскольку переменная остается ровно одна - компонент элемента массива структур.