PDA

Просмотр полной версии : ПЛК100 R.L. ,MODBUS и iridium



webage
09.12.2013, 14:06
Может кто подскажет схему подключения ПЛК100 по mobdus slave к управляющей панели на iridium.
На данный момент написана программа в codesys для управления группами света (спасибо участникам форума) и теперь осталась последний этап, возможность управлять все этим с ipad в локальной сети. Но вот как происходит обмен данными понять не могу (опыт в этом деле думаю отсутствует). Мне бы получить схематичный порядок действий, что, откуда и в каком виде передается и как проверить корректность того, что я сделал.

webage
09.12.2013, 17:15
Поставлю вопрос по другому, готов оплатить услуги по доработке или написанию с 0-ля.

capzap
09.12.2013, 20:23
ну Вы же в иридиуме выбираете протокол, скорее всего Вам предлагают modbusTCP, вот в плк и устанавливайте такой слейв

Николаев Андрей
10.12.2013, 10:11
Не надо никакой денежки - прочтите РП по программированию.
Вам надо в конфигурации ПЛК настроить этот самый ПЛК как ModBus Slave.
В Iridium Mobile настраиваете ModBus Master. Как это сделать в Iridium - точно не знаю. Но есть примеры и мануалы. Так же тех. поддержка у них работает.

webage
10.12.2013, 11:12
Не надо никакой денежки - прочтите РП по программированию.
Вам надо в конфигурации ПЛК настроить этот самый ПЛК как ModBus Slave.
В Iridium Mobile настраиваете ModBus Master. Как это сделать в Iridium - точно не знаю. Но есть примеры и мануалы. Так же тех. поддержка у них работает.
Вот в этом и загвоздка, я не совсем понимаю, что за данные передает ПЛК. Когда я ездил в офис овен и приобретал оборудование, меня запугал человек из поддержки. Он рассказывал что необходим промежуточный сервер, там нужно, что то конвертировать и только после этого передавать в Iridium и в обратную сторону тоже самое. Тут пишут, что можно напрямую управлять с панели. Точного порядка действий нет, хотя эта тема в том или ином виде обсуждалась на форуме уже не раз.

Николаев Андрей
10.12.2013, 11:47
Порядок очень простой.
1.Создаете в ПЛК110 ModBus Slave (на Ethernet). Какие данные - Вы и определяете при конфигурировании, добавляя необходимые переменные (8 бит, 2 байта и т.д.). Когда Вы эти переменные добавляете и адреса определяются. Об этом четко и написано в Руководстве пользователя. Которое Вам надо прочитать.
2. В Иридиуме настраиваете ModBus Master. Как? Соответствующее руководство надо запросить у них.

Николаев Андрей
10.12.2013, 11:49
В принципе есть пример настройки по ModBus TCP между 2-мя ПЛК110. Принцип тот же.
ПЛК\Примеры программ и полезностей.

webage
10.12.2013, 11:55
Буду пробовать, о результатах сегодня сообщу.

webage
13.12.2013, 00:41
Что-то не выходит. На сайте иридиума написано:
При настройке контроллера, в параметр FIX необходимо добавить ТСР Port подключения к контроллеру. По умолчанию - 502.
Один порт держит одно подключение ТСР мастера (клиента iRidium)
Номера регистров Modbus можно смотреть по адресам типа %QB7.1.5.
Последняя цифра минус один - это адрес регистра, который будет указываться в iRidium:
Address = %QB7.1.5 - 1 = 5 - 1 = 4

При настройке ПЛК modbus slave tcp как привязать переменные к реальным выходам и входам?

Просто остался последний шаг до решения задачи, в иридиуме есть коннект с ПЛК, но как к нему обратиться из него я не могу понять. На форуме проскакивало несколько тем, может авторы смогут прояснить эту ситуацию.

capzap
13.12.2013, 07:03
Изучить стоит что такое модбас, адресация,размерность регистров и т.д.
В этом случае станет понятно, а так то на форме на каждом шагу лежат примеры слейвов модбас

Пантелеев Дмитрий
13.12.2013, 10:36
Здравствуйте. Вышлите Ваш проект на ПЛК, сделаю примерчик на иридиуме.

DIABLik
24.12.2013, 23:47
В 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 к плк.

webage
09.01.2014, 00:43
В 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;

Настройки ПЛК
11312

DIABLik
02.03.2014, 16:21
В твоем случае опрос по маске может и не нужен, это имеет смысл при подключенных модулях ввода/вывода(МДВВ, МВ11х...)
Его смысл не побитно считывать переменные(input_1, input_2...), а вместо этого считать один раз байт с 8-ю битами входов.
Как это сделать?!
Необходимо ветке с входами присвоить переменную "PLCinp" типа BYTE и обращаться ко входам следующим образом:
для твоего input_1 соответственно PLCinp.0,
input_8 соответственно PLCinp.7.

такая схема существенно ускоряет опрос. Но это при работе с модулями Ввода/Вывода.

DIABLik
02.03.2014, 16:32
На мой взгляд немного сложновато происходит обработка нажатий.
Например вместо:

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

Предлагаю такой вариант:

SWITCH_HALLWAY(CLK:=PLCInp.0 , Q=> );
ir_input_1:= ir_input_1 XOR SWITCH_HALLWAY.Q;

DIABLik
02.03.2014, 16:43
По поводу задержки срабатывания. Проверь устанавливается ли соединение Иридиум с ПЛК. это можно сделать индикацией токена Online в параметрах ModbusTCP->driver token. проблема может быть в роутере сети.
По поводу отсутствия реакции на замыкания входов.
Этот код
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;

Делает следующее. При любых присвоениях переменным output_ в течение цикла, в его конце ПЛК присвоит им значения ir_input_
Чтобы это избежать лучше в течении цикла менять промежуточные переменные ir_input_, а в конце так и оставить присвоение промеж. переменной на выход ПЛК.

p.s. НЕ ПРЕТЕНДУЮ НА АБСОЛЮТНУЮ ПРАВИЛЬНОСТЬ СВОИХ ПРЕДЛОЖЕНИЙ, НО У МЕНЯ ЭТО ВСЕ РАБОТАЕТ.