MCU 포트에서 데이터 읽기
이 명령을 사용하여 다중 통신 유닛이 외부 장치에서 수신한 데이터를 CPU의 수신 버퍼로 복사하십시오. MCU의 통신 포트는 s_Port에서 지정됩니다. 수신 버퍼는 d1_Start 및 d2_End에서 지정됩니다.
입력
데이터가 전송되는 MCU의 슬롯 번호(상위 바이트) 및 포트 번호(하위 바이트)를 지정합니다.
16#xx01: 16#xx 슬롯에서 MCU상의 COM1
16#xx02: 슬롯 16#xx에 있는 MCU의 COM2
수신 버퍼의 시작 어드레스
수신 버퍼의 종료 어드레스
"수신 완료" 플래그를 평가하여 수신 종료를 확인하지 않는 한, F161_MRCV를 실행하지 마십시오. F161_MRCV를 사용한 데이터 폴링은 올바르게 동작하지 않습니다! "수신 완료" 플래그는 IsReceptionDone 및 IsReceptionDoneByTimeOut 펑션을 사용하거나 입력(X) 플래그 X0 및 X2 평가를 통해 평가될 수 있습니다.
수신한 바이트 수는 수신 버퍼의 d1_Start에서 지정한 초기 어드레스에 저장됩니다. 수신한 데이터가 b2_End에 의해 지정된 종료 어드레스를 초과하는 경우 연산 에러가 감지됩니다. 최대 d2_End까지 수신된 데이터가 저장됩니다. F161_MRCV는 또한 수신 버퍼를 지우고, "수신 완료 플래그"를 초기화하고, 추가 데이터 수신을 허용합니다.
F161_MRCV는 모든 PLC에 의해 지원됩니다. 플래그 대신 적절한 펑션을 사용하는 경우, CPU 통신 포트와 MCU 포트의 통신을 처리하는 PLC 독립 프로그램을 작성할 수 있습니다. MCU 포트를 사용하지 않는 PLC는 F161_MRCV 명령을 번역하지 않습니다. 읽기 쉬운 프로그램에 대해 ReadData 또는 ReadCharacters 펑션을 사용하는 것이 좋습니다.
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
MCU 유닛이 지정된 슬롯에 없거나 0바이트를 전송해야 하는 경우.
지정한 통신 포트가 없는 경우
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
MCU 유닛이 지정된 슬롯에 없거나 0바이트를 전송해야 하는 경우.
지정한 통신 포트가 없는 경우
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
ReadReceivedData: BOOL:=FALSE;
ReceiveBuffer: ARRAY [0..10] OF INT:=[11(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_F,F161_MRCV!,,17,2,24,8,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,3,17,5,);
B(B_VARIN,,16#0201,15,4,17,6,);
B(B_VARIN,,ReceiveBuffer[0],15,5,17,7,);
B(B_VARIN,,ReceiveBuffer[10],15,6,17,8,);
B(B_COMMENT,,The received data of port 1 of the MCU in slot 2 are read:,2,1,32,2,);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,F161_MRCV!,,17,0,24,6,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,1,17,3,);
B(B_VARIN,,16#0301,15,2,17,4,);
B(B_VARIN,,ReceiveBuffer,6,4,8,6,);
B(B_F,Adr_Of_Var_I!,,10,3,17,5,,?D?C);
B(B_F,AdrLast_Of_Var_I!,,8,4,17,6,,?D?C);
L(1,0,1,6);
L(8,4,8,5);
L(8,4,10,4);
END_NETWORK_BODY
END_NET_WORK
END_BODY