타임아웃으로 "수신 완료" 조건 평가
이 펑션블록은 타임아웃 조건을 평가하여 종료 코드가 없는 데이터 스트림의 수신 종료를 감지합니다(예: 이진 데이터 전송 시).
입력
PLC 기종에 따라 통신 포트를 지정합니다.
COM 포트(예: SYS_COM0_PORT)
이더넷 포트(예: SYS_ETHERNET_USER_CONNECTION_1)
MCU/SCU(예: COM01의 16#xx01(xx = 슬롯 번호))
추가 데이터가 수신된 경우 IsDone이 TRUE로 설정된 이후의 시간입니다.
수신 버퍼의 시작 어드레스에 적용됩니다. 이 어드레스에는 수신된 바이트 수가 포함됩니다. (CPU만 해당)
출력
1바이트 이상이 수신되고 수신된 바이트 수가 TimeOutForCPU 또는 "MCU Setting" 다이얼로그에서 지정된 시간 내에서 변경되지 않으면 TRUE로 설정합니다.
CPU의 통신 포트의 경우 수신 버퍼의 첫 번째 워드는 NoOfBytesReceived(수신된 바이트 수)에서 적용되어야 합니다. 수신된 바이트 수가 TimeOutForCPU에서 지정된 시간 내에서 변경되지 않으면 IsDone은 TRUE로 전환됩니다.
다중 통신 유닛 및 FP7의 경우, "수신 완료" 플래그가 평가됩니다. 타임아웃은 [MCU 설정] 다이얼로그를 사용하여 PROG 모드에서 또는 F159_MWRT_PARA(FP2만 해당)를 사용하여 RUN 모드에서 설정해야 합니다.
"reception done" 플래그 평가
지정된 시간 동안 더 이상 바이트가 수신되지 않거나 명령 ClearReceiveBuffer를 수행하면 IsDone 출력이 TRUE로 바뀝니다. 추가 데이터 수신이 금지됩니다. F159_MTRN 도는 ClearReceiveBuffer는 "IsDone" 플래그를 FALSE로 전환합니다.
또한 수신 버퍼 콘텐츠를 확인하여 수신 종료를 결정할 수 있습니다(예: 수신된 바이트 수). 스캔이 실행되는 동안 수신된 바이트 수가 변경될 수 있습니다. 예를 들어, 수신된 바이트 수를 읽으면 스캔 1회에 다른 상태가 두 개 이상 있을 수 있습니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
IsReceptionDone1: IsReceptionDoneByTimeOut;
END_VAR
VAR_EXTERNAL
g_awReceiveBuffer: ARRAY [0..10] OF WORD;
END_VAR
VAR
bIsRecDone1: BOOL:=FALSE;
wPort: WORD:=0;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_FB,IsReceptionDoneByTimeOut!,IsReceptionDone1,11,1,24,6,,?BPort?BTimeOutForCPU?BNoOfBytesReceived?AIsDone);
B(B_VARIN,,wPort,9,2,11,4,);
B(B_VARIN,,T#20ms,9,3,11,5,);
B(B_VAROUT,,IsRecDone1,24,2,26,4,);
B(B_VARIN,,g_awReceiveBuffer[0],9,4,11,6,);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IsReceptionDone1(Port := wPort,
TimeOutForCPU := T#20ms,
NoOfBytesReceived := g_awReceiveBuffer[0],
IsDone => bIsRecDone1);