PDA

Просмотр полной версии : опрос по owen communication



Dmitrijb
26.02.2021, 22:48
добрый вечер, подскажите пожалуйста, если при опросе адреса переменных должны динамически меняться с панели( в примере пока статично 512 и 514) , организация опроса возможна только таким способом как описана ниже. Для каждой переменной свой блок?

CASE istatecom1 OF
0:
fbCom1 (
xenable:=TRUE,
udiComPort:=1,
udibaudrate:=udibaudrate1,
udibytesize:=udibytesize1,
eparity:= parity1,
estopbit:=stopbit1
)
;
IF fbcom1.xDone THEN istatecom1:=1;
END_IF
1:
fbpr1(
xExecute:=fbcom1.xActive,
tTimeout:=T#200MS,
usiRetry:=10,
hCom:=fbcom1.hCom,
xisasciimode:=xisasciimode1,
usislaveid:=16,
efunccode:=ocl.MB_FC.READ_HOLDING_REGISTERS,
uidataaddr:=512,
uidatacount:=1,
pdata:=ADR(type_station1),
szsize:=SIZEOF(type_station1)
);
IF fbpr1.xDone OR fbpr1.xError THEN fbpr1(xExecute:=FALSE);
istatecom1:=2;
2:

fbpr1(
xExecute:=fbcom1.xActive,
tTimeout:=T#200MS,
usiRetry:=10,
hCom:=fbcom1.hCom,
xisasciimode:=xisasciimode1,
usislaveid:=16,
efunccode:=ocl.MB_FC.READ_HOLDING_REGISTERS,
uidataaddr:=514,
uidatacount:=2,
pdata:=ADR(arr_DDin1),
szsize:=SIZEOF(arr_DDin1)
);
IF fbpr1.xDone OR fbpr1.xError THEN fbpr1(xExecute:=FALSE);
ddin1_pump_w2r.awmodbusReal:=arr_ddin1;
ddin1_pump:=ddin1_pump_w2r.rv;
istatecom1:=3;
END_IF

Евгений Кислов
27.02.2021, 07:58
Добрый день.
У вас для опроса каждой переменной использует один и тот же экземпляр ФБ - это корректно.

Dmitrijb
12.03.2021, 20:36
Добрый вечер, подскажите каким способом можно обнулять значения переменных, если не удалось считать переменные(обрыв связи)

Евгений Кислов
12.03.2021, 21:00
Добрый вечер, подскажите каким способом можно обнулять значения переменных, если не удалось считать переменные(обрыв связи)

Ориентируйтесь на выход xError, если он TRUE - выполняйте очистку буфера (например, через Mem.MemFill).

Dmitrijb
16.03.2021, 16:28
Выдает исключение что необходима библиотека caa memory 3.5.12, не могу ее найти

Евгений Кислов
16.03.2021, 16:30
Выдает исключение что необходима библиотека caa memory 3.5.12, не могу ее найти

Она входит в дистрибутив CODESYS.
Если она выдает исключение - возможно, вы некорректно вызываете функцию.
Выложите ваш код.

Dmitrijb
16.03.2021, 19:56
IF stcom1=1 THEN istatecom1:=2;
ELSE istatecom1:=13;
mem.MemFill(array1[0],22,0);
END_IF

соответственно array1 - array[0..22] of word

Евгений Кислов
16.03.2021, 19:58
Надо так:

Mem.MemFill(ADR(array1), SIZEOF(array1), 0);

Dmitrijb
19.03.2021, 09:49
Спасибо все заработало. Еще маленький нюанс не подскажете, на спк, в рабочем режиме, всегда горит оранжевый предупреждающий сигнал, проекте при компиляции есть предупреждение по неиспользованию допклавиатуры keypad, хотя она используется для ввода логина. Не из-за этого ли предупреждения загорается этот сигнал? чтение-запись по com1-порту идет стабильно.

Евгений Кислов
19.03.2021, 09:55
всегда горит оранжевый предупреждающий сигнал

Это нормально - признак того, что проект запущен.