FP_WRITE_TO_SLAVE_AREA_OFFS

오프셋을 사용하여 슬레이브에 데이터 쓰기

사용되는 포트의 시스템 레지스터에 정의된 대로 MEWTOCOL-COM 또는 Modbus RTU 명령을 사용하여 통신 포트를 통해 마스터에서 슬레이브로 데이터를 쓰려고 할 때 이 명령을 사용합니다. 마스터와 슬레이브에 동일한 프로토콜을 설정해야 합니다. 마스터와 슬레이브의 메모리 영역은 일치해야 합니다.

Modbus 프로토콜을 사용한 데이터 전송을 위해서 컴파일러는 Modbus 참조 번호를 기준으로 Modbus 커맨드를 생성합니다.

파라미터

입력

Port (INT)

PLC 기종에 따라 통신 포트를 지정합니다.

  • COM 포트(예: SYS_COM0_PORT)

  • 이더넷 포트(예: SYS_ETHERNET_USER_CONNECTION_1)

  • MCU/SCU(예: COM0116#xx01 (xx = 슬롯 번호))

StationNumber (WORD, INT, UINT)

슬레이브의 스테이션 번호 (MEWTOCOL: 1–99,MODBUS: 1-255)

SYS_ETHERNET_USER_CONNECTION_xxPort 입력에 적용된 경우, 1로 설정

Source (WORD, INT, UINT)

슬레이브에 기록할 데이터에 대한 마스터 유닛의 워드 영역 또는 레지스터

Words_Bits (WORD, INT, UINT)

전송할 워드(비트) 수.

또는:

  • 워드 수

    Modbus RTU의 경우: 16#001–16#07F

    MEWTOCOL-COM의 경우: 16#001–16#1FD 또는 16#001–16#1B(FP0, FP-e)

또는:

  • 비트 전송용 제어 워드: 마스터에서 "to bit"인 T가 있고 슬레이브에서 "from bit"인 F가 있는 16#8T0F입니다(FP7에 적용 불가).

SlaveMemoryArea (WORD, INT, UINT)

데이터를 저장할 슬레이브의 메모리 영역입니다(대상 = SlaveMemoryArea + SlaveMemoryOffset).

SlaveMemoryOffset (WORD, INT, UINT)

슬레이브에 데이터를 저장할 메모리 영역의 오프셋입니다(대상 = SlaveMemoryArea + SlaveMemoryOffset).

출력

Result (WORD, INT, UINT)
  • FP7에만 해당:
    • 0: 정상 완료

    • 1: 통신 포트는 마스터 통신에 사용됨

    • 2: 통신 포트는 슬레이브 통신에 사용됨

    • 3: 동시에 사용할 수 있는 마스터 통신 명령의 수를 초과함

    • 4: 전송 타임아웃

    • 5: 응답 수신 타임아웃

    • 6: 데이터 에러 발생

  • 그 외 PLC의 경우: 0으로 설정

시간 차트

  1.  (1) 마스터 통신 삭제-전송 플래그, 예: sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) 마스터 통신 삭제-전송 플래그가 TRUE인지 확인하고 마스터 통신 전송 플래그가 FALSE인지 확인합니다.
  3.  (3) 마스터 통신 전송 플래그, 예: sys_bIsEthernetUserConnection1MasterCommunicationActive

    전송 중 마스터 통신 전송 플래그TRUE입니다.

    전송 완료 마스터 통신 전송 플래그FALSE입니다.

  4.  (4) 이 명령을 실행합니다.
  5.  (5) 마스터 통신 전송 완료 플래그, 예: sys_bIsEthernetUserConnection1CommunicationError

    정상 완료: FALSE

    비정상적인 완료: TRUE

  6.  (6) 데이터를 전송합니다.
  7.  (7) 응답 수신 처리가 실행됩니다.

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • 슬레이브 또는 마스터 데이터가 사용 가능한 어드레스 범위를 초과합니다.
  • 통신 모드가 MEWTOCOL-COM 마스터/슬레이브 또는 Modbus RTU 마스터/슬레이브로 설정되지 않았습니다.
  • 선택한 COM 포트에 설치되지 않은 통신 카세트가 필요합니다.
sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • 슬레이브 또는 마스터 데이터가 사용 가능한 어드레스 범위를 초과합니다.
  • 통신 모드가 MEWTOCOL-COM 마스터/슬레이브 또는 Modbus RTU 마스터/슬레이브로 설정되지 않았습니다.
  • 선택한 COM 포트에 설치되지 않은 통신 카세트가 필요합니다.

POU 헤더

이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.

	VAR
		bSetParameters: BOOL:=FALSE;
		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*)
		iSlaveMemoryOffset: INT:=100;
		bBool: BOOL:=FALSE;
	END_VAR
	VAR CONSTANT 
		iSlaveMemoryArea_Bool: INT:=10000;
			(*memory Area in slave station*)
		iSlaveMemoryArea_Word: INT:=5;
			(*memory Area in slave station*)
	END_VAR
	VAR 
	END_VAR

POU 본문

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_VARIN,,SYS_COM1_PORT,18,2,20,4,);
B(B_VARIN,,iSlaveStationNumber,18,3,20,5,);
B(B_VARIN,,arrParameters,11,4,13,6,);
B(B_CONTACT,,bSetParameters,4,1,6,3,);
B(B_VAROUT,,wWriteToSlaveResult,36,2,38,4,);
B(B_F,Size_Of_Var!,,13,5,20,7,,?D?C);
B(B_F,FP_WRITE_TO_SLAVE_AREA_OFFS!,,20,0,36,9,,?DEN?DnPort?DStationNumber?DSource?DWords_Bits?HSlaveMemoryArea?DSlaveMemoryOffset?AENO?CResult);
B(B_VARIN,,SYS_MEMORY_AREA_DT,18,6,20,8,);
B(B_VARIN,,iSlaveMemoryOffset,18,7,20,9,);
L(13,5,13,6);
L(1,2,4,2);
L(13,5,20,5);
L(6,2,20,2);
L(1,0,1,9);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

if (bSetParameters) then
    FP_WRITE_TO_SLAVE_AREA_OFFS(Port := SYS_COM1_PORT, 
                                StationNumber := iSlaveStationNumber, 
                                Source := arrParameters[0], 
                                Words_Bits := Size_Of_Var(arrParameters[0]), 
                                SlaveMemoryArea := SYS_MEMORY_AREA_DT, 
                                SlaveMemoryOffset := iSlaveMemoryOffset, 
                                Result => wWriteToSlaveResult);
end_if;

최종 수정일: 2022-04-04이 페이지에 대한 피드백Panasonic 직통 전화