eigor_vl
21.07.2020, 14:45
Добрый день.
Ситуация такая:
Программа на ST.
Порт открывается OCL.COM_Control.
передача данных происходит OCL.UNM_SerialRequest, устройство отвечает!
А дальше OCL.UNM_SerialRequest данные в буфер не принимает выдает ошибку TIME_OUT!
То есть вообще. Ни при каких
tTimeout, szExpectedSize, wStopChar.
Пишет uiResponseSize = 0.
Хотя на другом порту OCL.MB_SerialRequest работает!
Вот код.
// VAR COM3 Master
abIGM_Req: ARRAY [0..9] OF BYTE;
abIGM_Res: ARRAY [0..13] OF BYTE;
iIGM_T: INT;
iIGM_CO2: INT;
iDeleyReq: INT:= 0;
fbComControl3: OCL.COM_Control; // ФБ упр-я COM3
fb_module_IGM_1: OCL.UNM_SerialRequest; // ФБ опроса уст-ва IGM_1
iStateCom3: INT; // шаг опроса по порту COM3
// END_VAR COM3 Master
////
CASE iStateCom3 OF
0: // открытие порта COM3
fbComControl3
(
xEnable:= TRUE,
udiComPort:= 3, // RS485-3
udiBaudrate:=9600,
udiByteSize:=8,
eParity:= OCL.COM_PARITY.NONE,
eStopBit:=OCL.COM_STOPBIT.ONE
);
// ИГМ-0171
// 0x23 0x30 0x31 0x44 0x41 0x54 0x41 0x3f 0x0d 0x0a
// #01DATA?
// 30 30 32 36 34 20 30 33 30 35 38 0d
// 00264 03058
abIGM_Req[0]:= 16#23;
abIGM_Req[1]:= 16#30;
abIGM_Req[2]:= 16#31;
abIGM_Req[3]:= 16#44;
abIGM_Req[4]:= 16#41;
abIGM_Req[5]:= 16#54;
abIGM_Req[6]:= 16#41;
abIGM_Req[7]:= 16#3F;
abIGM_Req[8]:= 16#0D;
abIGM_Req[9]:= 16#0A;
IF fbComControl3.xDone THEN
iStateCom3:=1;
END_IF
1: // опрос IGM_1
fb_module_IGM_1
(
xExecute:= TRUE,
tTimeout:= T#1000MS,
szExpectedSize:= 0, // разные врианты :=12 , 0
wStopChar:= 16#000D, // разные врианты :=16#0000, 0
usiRetry:= 1, // кол-во повторов
hCom:= fbComControl3.hCom,
pRequest:= ADR(abIGM_Req),
szRequest:= SIZEOF(abIGM_Req),
pResponse:= ADR(abIGM_Res),
szResponse:= SIZEOF(abIGM_Res)
);
iIGM_T:= fb_module_IGM_1.uiResponseSize;
IF fb_module_IGM_1.xDone OR fb_module_IGM_1.xError THEN
// после выполнения блока его нужно сбросить
fb_module_IGM_1(xExecute:= FALSE);
iIGM_T:= abIGM_Res[0];
iIGM_CO2:= abIGM_Res[1];
iStateCom3:= 2;
END_IF
2: // опрос EF170_2
iStateCom3:= 1;
END_CASE
////
Подскажите что не так.
Ситуация такая:
Программа на ST.
Порт открывается OCL.COM_Control.
передача данных происходит OCL.UNM_SerialRequest, устройство отвечает!
А дальше OCL.UNM_SerialRequest данные в буфер не принимает выдает ошибку TIME_OUT!
То есть вообще. Ни при каких
tTimeout, szExpectedSize, wStopChar.
Пишет uiResponseSize = 0.
Хотя на другом порту OCL.MB_SerialRequest работает!
Вот код.
// VAR COM3 Master
abIGM_Req: ARRAY [0..9] OF BYTE;
abIGM_Res: ARRAY [0..13] OF BYTE;
iIGM_T: INT;
iIGM_CO2: INT;
iDeleyReq: INT:= 0;
fbComControl3: OCL.COM_Control; // ФБ упр-я COM3
fb_module_IGM_1: OCL.UNM_SerialRequest; // ФБ опроса уст-ва IGM_1
iStateCom3: INT; // шаг опроса по порту COM3
// END_VAR COM3 Master
////
CASE iStateCom3 OF
0: // открытие порта COM3
fbComControl3
(
xEnable:= TRUE,
udiComPort:= 3, // RS485-3
udiBaudrate:=9600,
udiByteSize:=8,
eParity:= OCL.COM_PARITY.NONE,
eStopBit:=OCL.COM_STOPBIT.ONE
);
// ИГМ-0171
// 0x23 0x30 0x31 0x44 0x41 0x54 0x41 0x3f 0x0d 0x0a
// #01DATA?
// 30 30 32 36 34 20 30 33 30 35 38 0d
// 00264 03058
abIGM_Req[0]:= 16#23;
abIGM_Req[1]:= 16#30;
abIGM_Req[2]:= 16#31;
abIGM_Req[3]:= 16#44;
abIGM_Req[4]:= 16#41;
abIGM_Req[5]:= 16#54;
abIGM_Req[6]:= 16#41;
abIGM_Req[7]:= 16#3F;
abIGM_Req[8]:= 16#0D;
abIGM_Req[9]:= 16#0A;
IF fbComControl3.xDone THEN
iStateCom3:=1;
END_IF
1: // опрос IGM_1
fb_module_IGM_1
(
xExecute:= TRUE,
tTimeout:= T#1000MS,
szExpectedSize:= 0, // разные врианты :=12 , 0
wStopChar:= 16#000D, // разные врианты :=16#0000, 0
usiRetry:= 1, // кол-во повторов
hCom:= fbComControl3.hCom,
pRequest:= ADR(abIGM_Req),
szRequest:= SIZEOF(abIGM_Req),
pResponse:= ADR(abIGM_Res),
szResponse:= SIZEOF(abIGM_Res)
);
iIGM_T:= fb_module_IGM_1.uiResponseSize;
IF fb_module_IGM_1.xDone OR fb_module_IGM_1.xError THEN
// после выполнения блока его нужно сбросить
fb_module_IGM_1(xExecute:= FALSE);
iIGM_T:= abIGM_Res[0];
iIGM_CO2:= abIGM_Res[1];
iStateCom3:= 2;
END_IF
2: // опрос EF170_2
iStateCom3:= 1;
END_CASE
////
Подскажите что не так.