Сообщение от
DIABLik
В Codesys создается modbus slave с необходимыми переменными(например 8bits для 8-ми bool переменных-входов или выходов типа реле).
В iridium создается драйвер modbus tcp:
- в драйвере прописываете ip контроллера(порт оставляй 502)
- в графе Commands создаешь команды для посылки на контроллер(device id - номер slavr переменной -1, adress номер бита от 0 до 7).
- в графе Feedback прописывается аналогично commands, но для тех переменных значения которых должны возвращаться в iridium из ПЛК.
Насчет увязки переменных с входами я решал эту проблему присвоением значений промежуточных slave переменных входам/выходам по маске.
Если интересно кинь свой проект в codesys я под него помогу прописать переменные в iridium.
p.s. 1.входа опрашивай обязательно по маске ибо при обращении к стандартным входам очень тормозит их опрос.
2. обязательно проверь настройки роутера(приоритет на 502 порт. я например долго мучился с запаздыванием или потерей команд от iridium к плк.
Подскажите, что значит опрашивать по маске?
У меня сейчас как раз возникла проблема, что при нажатии на кнопку в иридиуме пауза между срабатыванием ПЛК около 5 секунд.
Может кто еще подскажет в чем косяк, есть следующий код, но он работает только когда запросы идут по Modbus, а если обращаешься напрямую к дискретным входам нет реакции:
Код:
PROGRAM PLC_PRG
VAR_OUTPUT
off_all:BOOL;
off_kitchen_dining_room:BOOL;
END_VAR
VAR
HALLWAY_STEP: BYTE;
BEDROOM_STEP: BYTE;
KITCHEN_STEP: BYTE;
DINING_ROOM_STEP: BYTE;
NURSERY_STEP: BYTE;
SWITCH_HALLWAY: R_TRIG;
SWITCH_BEDROOM: R_TRIG;
SWITCH_KITCHEN: R_TRIG;
SWITCH_DINING_ROOM: R_TRIG;
SWITCH_NURSERY: R_TRIG;
TON_ALL: TON;
TON_KITCHEN_DINING_ROOM: TON;
pt: TIME := t#3s;
END_VAR
___________________________________________________
TON_ALL(IN:=input_1 , PT:=pt , Q=> , ET=> );
TON_KITCHEN_DINING_ROOM(IN:=input_4 , PT:=pt , Q=> , ET=> );
SWITCH_HALLWAY(CLK:=input_1 , Q=> );
SWITCH_BEDROOM(CLK:=input_2 , Q=> );
SWITCH_KITCHEN(CLK:=input_3 , Q=> );
SWITCH_DINING_ROOM(CLK:=input_4 , Q=> );
SWITCH_NURSERY(CLK:=input_5 , Q=> );
CASE HALLWAY_STEP OF
0:
IF SWITCH_HALLWAY.Q THEN
output_1:=TRUE;
HALLWAY_STEP:=1;
END_IF
1:
IF SWITCH_HALLWAY.Q THEN
output_1:=FALSE;
HALLWAY_STEP:=0;
END_IF
END_CASE
CASE BEDROOM_STEP OF
0:
IF SWITCH_BEDROOM.Q THEN
output_2:=TRUE;
BEDROOM_STEP:=1;
END_IF
1:
IF SWITCH_BEDROOM.Q THEN
output_2:=FALSE;
BEDROOM_STEP:=0;
END_IF
END_CASE
CASE KITCHEN_STEP OF
0:
IF SWITCH_KITCHEN.Q THEN
output_3:=TRUE;
KITCHEN_STEP:=1;
END_IF
1:
IF SWITCH_KITCHEN.Q THEN
output_3:=FALSE;
KITCHEN_STEP:=0;
END_IF
END_CASE
CASE DINING_ROOM_STEP OF
0:
IF SWITCH_DINING_ROOM.Q THEN
output_4:=TRUE;
DINING_ROOM_STEP:=1;
END_IF
1:
IF SWITCH_DINING_ROOM.Q THEN
output_4:=FALSE;
DINING_ROOM_STEP:=0;
END_IF
END_CASE
CASE NURSERY_STEP OF
0:
IF SWITCH_NURSERY.Q THEN
output_5:=TRUE;
NURSERY_STEP:=1;
END_IF
1:
IF SWITCH_NURSERY.Q THEN
output_5:=FALSE;
NURSERY_STEP:=0;
END_IF
END_CASE
(*Âûêëþ÷åíèå ñâåòà âî âñåé êâàðòèðå*)
off_all:=TON_ALL.Q;
IF off_all THEN
output_1:=FALSE;
HALLWAY_STEP:=0;
output_2:=FALSE;
BEDROOM_STEP:=0;
output_3:=FALSE;
KITCHEN_STEP:=0;
output_4:=FALSE;
DINING_ROOM_STEP:=0;
output_5:=FALSE;
NURSERY_STEP:=0;
END_IF
(*Âûêëþ÷åíèå ñâåòà â êóõíå-ñòîëîâîé*)
off_kitchen_dining_room:=TON_KITCHEN_DINING_ROOM.Q;
IF off_kitchen_dining_room THEN
output_3:=FALSE;
KITCHEN_STEP:=0;
output_4:=FALSE;
DINING_ROOM_STEP:=0;
END_IF
output_1:=ir_input_1;
output_2:=ir_input_2;
output_3:=ir_input_3;
output_4:=ir_input_4;
output_5:=ir_input_5;
Настройки ПЛК
PLK100R-L.png