Сообщение от
capzap
А зачем увлекаться прямым заданием глобальных переменных, неужели нельзя проще в самом слейв-устройстве присвоить имя каждому каналу, вот и будет Вам группировка по секциям и точно так же в процессе работы они станут глобальными переменными
Это плохая идея. Слейв там один, через него идёт обмен с сенсорной панелью и скадой. А теперь представьте что вы поменяли тип CPU, у вас ес-но слетел PLC Configuration и вам надо заново при помощи мыши заполнить всю эту богодельню (повторяю, около 200 переменных только обмен с сенс. панелью). Переменные однозначно надо описывать в VAR_GLOBAL, много проще переправить адреса в текстовом файле если что.
Как образец реальный кусок обмена с паналью на конкурирующей системе (не CoDeSys, физ. адреса не нужны):
=========================
Код:
TYPE
PI : STRUCT
PB : REAL := 0.0;
TI : REAL := 0.0;
DBand : REAL := 0.0;
FMT : REAL := 0.0;(*Full movement time - s*)
MinBreakTime : REAL := 0.0; (*ms*)
MinPulseTime : REAL := 0.0; (*ms*)
END_STRUCT;
END_TYPE
netPID : PI; // PI regulator of the network circuit
b1PID : PI; // PI regulator of burner 1
b2PID : PI; // PI regulator of burner 2
=========================
CoDeSys:
Код:
iHWSPump1manSt AT %QX6.4.0.0: BOOL;(*B24*)
iHWSPump2manSt AT %QX6.4.0.1: BOOL;(*B25*)
alarmFlowIHWS AT %QX6.4.0.2: BOOL;(*B26*)
alarmMot1IHWS AT %QX6.4.0.3: BOOL;(*B27*)
alarmMot2IHWS AT %QX6.4.0.4: BOOL;(*B28*)
_здесь выкинут кусок переменных других устройств_
iHWSHiLimit AT %QW6.45.0: WORD;(*W38*)
iHWSLoLimit AT %QW6.46.0: WORD;(*W39*)
IHWSdelay AT %QW6.47.0: WORD;(*W40*)
_здесь выкинут ещё кусок ещё других устройств_
_и снова булевские_
IHWSMan3WayLess AT %QX6.140.0.2: BOOL;(*B2111*)
IHWSMan3WayMore AT %QX6.140.0.3: BOOL;(*B2111*)
_и т.д.
Как бы это примерно могло выглядеть в CoDeSys:
Код:
iHWS : STRUCT (*Насос ГВС*)
pump1manSt AT %QX6.4.0.0: BOOL;(*B24*)
pump2manSt AT %QX6.4.0.1: BOOL;(*B25*)
alarmFlow AT %QX6.4.0.2: BOOL;(*B26*)
alarmMot1 AT %QX6.4.0.3: BOOL;(*B27*)
alarmMot2 AT %QX6.4.0.4: BOOL;(*B28*)
man3WayLess AT %QX6.140.0.2: BOOL;(*B2111*)
man3WayMore AT %QX6.140.0.3: BOOL;(*B2111*)
hiLimit AT %QW6.45.0: WORD;(*W38*)
loLimit AT %QW6.46.0: WORD;(*W39*)
delay AT %QW6.47.0: WORD;(*W40*)
END_STRUCT;
iNet : STRUCT (*Насос сети*)
pump1manSt AT %QX6.3.0.1: BOOL;(*B17*)
pump2manSt AT %QX6.3.0.2: BOOL;(*B18*)
_И Так Далее._
END_STRUCT;
Нет, жить можно, но когда за месяц проходят через руки несколько проектов на одну тему но с разными вводными - рехтование каждый раз общей свалки малость удручает. И просто думаешь - а вдруг я пропустил что-то очевидное, что используют другие.
P.S. - Мда, чем больше я на свою-же статью смотрю, тем больше понимаю что основное зло не столько в запрете на структуры, сколько в самих физ адресах... Ладно, не важно.