Так будет понятнее?
Вложение 80245
Объявляете переменные с типом данных ANALOG_SENSOR_VALUE, привязываете эти переменные в шаблоне устройства, в коде используете имя_переменной.rValue
Так будет понятнее?
Вложение 80245
Объявляете переменные с типом данных ANALOG_SENSOR_VALUE, привязываете эти переменные в шаблоне устройства, в коде используете имя_переменной.rValue
Без пункта 2 ПЛК не знает что у MV210_101 есть какая-либо связь с ANALOG_SENSOR_VALUE
То есть без объявления переменной невозможно считать будет вход? Никаким способом?
Можете выбросить шаблон, создать чтение массива из 24 регистров,Вложение 80252 начиная с адреса 4000. Вложение 80248 регистрыВложение 80250 модуль МВ210-101
Создать свою структуру Ai из переменной Float и циклического времени.
Создать массив Ai_Oll AT%IW22 : ARRAY [1..8] OF Ai;
И обращайтесь к любому каналу как Ai_Oll[1].rValue; Ai_Oll[8].rValue;
При чём, в соотнесении ничего нет вообще.
Дальше сами адаптируете по свою непонятную задачу.Код:CASE iState OF
0: //Открытие соединения
fbTCPClient(
xEnable:=TRUE ,
tTimeout:=T#5S ,
sIpAddr:='192.168.0.1',
uiPort:=502);
IF fbTCPClient.xActive THEN
iState := 1;
END_IF
IF fbTCPClient.xError THEN
fbTCPClient(xEnable:=FALSE);
END_IF
1:
fbModbus(
xExecute:=TRUE ,
tTimeout:=T#50MS ,
usiRetry:=3 ,
hConnection:=fbTCPClient.hConnection ,
xIsRtuOverTcpMode:=FALSE ,
usiUnitId:=1 ,
eFuncCode:=OCL.MB_FC.READ_HOLDING_REGISTERS,
uiDataAddr:=4000 ,
uiDataCount:=2 ,
pData:=ADR(arWORD) ,
szSize:=SIZEOF(arWORD) ,
xDone=> ,
xBusy=> ,
xError=> ,
eError=> );
IF fbModbus.xDone OR fbModbus.xError THEN
fbModbus(xExecute:=FALSE);
iState := 0;
ReadValue1 := OCL.WORD2_TO_REAL(wInput1:=arWORD[1] , wInput2:=arWORD[0] , xSwapBytes:=FALSE );
END_IF
END_CASE