슬레이브에 데이터 쓰기
사용되는 포트의 시스템 레지스터에 정의된 대로 MEWTOCOL-COM 또는 Modbus RTU 명령을 사용하여 통신 포트를 통해 마스터에서 슬레이브로 데이터를 쓰려고 할 때 이 명령을 사용합니다. 마스터와 슬레이브에 동일한 프로토콜을 설정해야 합니다.마스터와 슬레이브의 메모리 영역은 일치해야 합니다. 마스터의 유저 영역에서 슬레이브 데이터를 사용할 수 없으면 FP_WRITE_TO_SLAVE_AREA_OFFS 또는 FP_MODBUS_MASTER를 사용합니다.
Modbus 프로토콜을 사용한 데이터 전송을 위해서 컴파일러는 Modbus 참조 번호를 기준으로 Modbus 커맨드를 생성합니다.입력
PLC 기종에 따라 통신 포트를 지정합니다.
COM 포트(예: SYS_COM0_PORT)
이더넷 포트(예: SYS_ETHERNET_USER_CONNECTION_1)
MCU/SCU(예: COM01의 16#xx01 (xx = 슬롯 번호))
슬레이브의 스테이션 번호(MEWTOCOL: 1-99, MODBUS: 1-255)
SYS_ETHERNET_USER_CONNECTION_xx가 Port 입력에 적용된 경우, 1로 설정
슬레이브에 기록할 데이터에 대한 마스터 유닛의 워드 영역 또는 레지스터
출력
요청된 데이터가 기록되는 슬레이브의 대상 어드레스입니다.
0: 정상 완료
1: 통신 포트는 마스터 통신에 사용됨
2: 통신 포트는 슬레이브 통신에 사용됨
3: 동시에 사용할 수 있는 마스터 통신 명령의 수를 초과함
4: 전송 타임아웃
5: 응답 수신 타임아웃
6: 데이터 에러 발생
전송 중 마스터 통신 전송 플래그가 TRUE입니다.
전송 완료 마스터 통신 전송 플래그가 FALSE입니다.
정상 완료: FALSE
비정상적인 완료: TRUE
선택한 COM 포트에 설치되지 않은 통신 카세트가 필요합니다.
글로벌 변수 리스트에서 프로젝트의 모든 POU에서 액세스할 수 있는 변수를 정의합니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
wWriteToSlaveResult: WORD:=0;
(*result of write to slave instruction*)
iSlaveStationNumber: INT:=0;
(*slave station number*)
arrParameters: ARRAY [0..15] OF DINT;
(*Array of parameters to be send to slave station*)
bSetParameters: BOOL:=FALSE;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,FP_WRITE_TO_SLAVE!,,19,0,30,6,,?DEN?DnPort?DStationNumber?DSource?AENO?CSlaveAddress?CResult);
B(B_VARIN,,SYS_COM2_PORT,17,2,19,4,);
B(B_VARIN,,iSlaveStationNumber,17,3,19,5,);
B(B_VARIN,,arrParameters,17,4,19,6,);
B(B_VAROUT,,g_Peripherie_SlaveParameter_Address,30,2,32,4,);
B(B_VAROUT,,wWriteToSlaveResult,30,3,32,5,);
B(B_CONTACT,,bSetParameters,4,1,6,3,);
L(1,2,4,2);
L(6,2,19,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if bSetParameters then
FP_WRITE_TO_SLAVE(Port := SYS_COM2_PORT,
StationNumber := iSlaveStationNumber,
Source := arrParameters,
SlaveAddress => g_Peripherie_SlaveParameter_Address,
Result => wWriteToSlaveResult);
end_if;