Из РЭ на ПЛК 110 и 160:
Вид для печати
Здравствуйте! Возникла такая проблема.
Создал одномерный массив из 4 элементов. в PLC_PRG.
Каждый его элемент нужно привязать к элементам в визуализации.Цитата:
PROGRAM PLC_PRG
VAR
current: INT;
aa: ARRAY [1..4] OF INT:=2,5,6,7;
END_VAR
Но в ассистенте ввода отображается только первый элемент массива.
Т.е. какая-то проблема с адресацией.
После привязки конкретного элемента программа просто выдает ошибку c доступом к несуществующему адресу
Хотя она не жалуется на обычные переменные.
Вложение 25702
Такая ситуация.
С передачей на визуализацию разобрался. Спасибо с этим, товарищи Гарчев Евгений и Amn.
Только вот оказалась еще одна проблема:
Я не могу передать элемент массива в свою функцию:
Вроде оно передается так.Цитата:
onoff(switch:=PLC_PRG.a[0]);
Вот сама функция:
При передаче возникает ошибка доступа к несуществующему адресу..Цитата:
FUNCTION Onoff : BOOL
VAR_IN_OUT
switch: BOOL;
END_VAR
VAR
can_change: BOOL;
END_VAR
can_change := TRUE;
IF (switch) THEN switch := FALSE;
can_change := FALSE;
END_IF;
IF ((NOT switch) AND (can_change)) THEN switch := TRUE;
END_IF;
RETURN;
массив 'A' является булевым
Подскажите пожалуйста возникнут ли у меня проблемы с обменом данными, если:
Проект: 5 контроллеров,ОРС-сервер,Скада. На скаду выводится всё необходимое из этих ПЛК,но мне необходимо чтобы все эти ПЛК между собой обменивались некоторым кол-вом переменных.
Вопрос: как отразиться на моей системе если для каждого плк создать обмен с другими плк по протоколу Modbus TCP, если помимо всего у каждого плк есть ещё обмен с другими устройствами по Modbus RTU и со скадой через ОРС-сервер.
Вложение 25714
Похожий вопрос с функцией уже был на форуме в этой теме
Посмотрите в этой теме
Доброго времени суток.
Как заставать считать "ch" не c 0, а с 10 например. И получить в итоге
ch=10, ch=11, ch=12...
Извиняюсь за довольно глупый вопрос.
IF Pusk1=TRUE THEN
IF P1>Pust THEN
IF (TIMER + T#1S)<TIME() THEN
TIMER:=TIME();
Ch:=ch+1;
END_IF
ELSE IF P1<=Pust THEN
IF (TIMER + T#1S)<TIME() THEN
TIMER:=TIME();
Ch:=ch-1;
END_IF
END_IF
END_IF
END_IF
IF Pusk1=FALSE THEN IF ch>0 THEN
IF (TIMER + T#1S)<TIME() THEN
TIMER:=TIME();
Ch:=ch-1;
END_IF
ELSE IF ch<0 THEN
IF (TIMER + T#1S)<TIME() THEN
TIMER:=TIME();
Ch:=ch+1;
END_IF
END_IF
END_IF
END_IF
IF ch=0 THEN alarm:=TRUE;
ELSE alarm:=FALSE;
END_IF
IF sbros=TRUE THEN ch:=0;
END_IF