F145_WRITE_DATA_TYPE_OFFS

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

사용되는 포트의 시스템 레지스터에 정의된 대로 MEWTOCOL-COM 또는 Modbus RTU 명령을 사용하여 통신 포트를 통해 마스터에서 슬레이브로 데이터를 쓰려고 할 때 이 명령을 사용합니다. Modbus 프로토콜을 사용한 데이터 전송을 위해서 컴파일러는 Modbus 참조 번호를 기준으로 Modbus 커맨드를 생성합니다.

파라미터

입력

Port (WORD, INT, UINT)

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

  • COM 포트(예: SYS_COM0_PORT)

  • 이더넷 포트(예: SYS_ETHERNET_USER_CONNECTION_1)

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

SlaveAddress (WORD, INT, UINT)

슬레이브의 스테이션 번호 (MEWTOCOL: 1-99, MODBUS 1-255, 브로드캐스팅 0)

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

MasterWordData (ANY)

슬레이브에 쓸 데이터에 대한 마스터의 소스 어드레스.

SlaveWordAddressType (WORD, INT, UINT)

슬레이브의 대상 어드레스 형식. 0의 오프셋을 지정합니다(예: DT0 또는 WL0).

SlaveWordAddressOffs (WORD, INT, UINT)

데이터가 기록되는 슬레이브의 시작 어드레스에 대한 오프셋입니다. 어드레스 형식이 SlaveWordAddressType에 의해 정의됩니다.

NumberOfWords_BitsInWords (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에 적용 불가).

주석

  • F 명령을 사용하는 대신 해당 FP7 명령을 사용하는 것이 좋습니다. FP_WRITE_TO_SLAVE_AREA_OFFS.

  • 어느 명령도 활성되지 않으면 F145 또는 F146 명령만 실행될 수 있습니다. 프로그램에서 "F145/F146 not active" 플래그를 평가하여 명령 상태를 확인합니다.

  • F145 명령은 슬레이브에 보낸 해당 데이터만 요청합니다. 실제 처리는 스캔 종료 시 실행됩니다.

  • "F145/F146 error" 플래그를 평가하여 전송이 정상적으로 완료되었는지 또는 오류가 발생했는지 확인합니다.

  • 브로드캐스팅 시(SlaveAddress가 0으로 설정) 최대 스캔 타임이 경과된 후에만 전송이 실행되는지 확인합니다.

  • 대상 어드레스가 특수 내부 플래그(R9000에서), 특수 데이터 등록(DT9000/DT90000에서) 또는 파일 레지스터 FL이면 F145 또는 F146 명령을 실행할 수 없습니다.

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)
  • 슬레이브 또는 마스터 데이터가 사용 가능한 어드레스 범위를 초과합니다.

  • SlaveWordAddressType인 경우: 오프셋 ¹ 0

  • 통신 모드가 MEWTOCOL-COM 마스터/슬레이브 또는 Modbus RTU 마스터/슬레이브로 설정되지 않았습니다.

  • 선택한 COM 포트에 설치되지 않은 통신 카세트가 필요합니다.

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • 슬레이브 또는 마스터 데이터가 사용 가능한 어드레스 범위를 초과합니다.

  • SlaveWordAddressType인 경우: 오프셋 ¹ 0

  • 통신 모드가 MEWTOCOL-COM 마스터/슬레이브 또는 Modbus RTU 마스터/슬레이브로 설정되지 않았습니다.

  • 선택한 COM 포트에 설치되지 않은 통신 카세트가 필요합니다.

POU 헤더

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

	VAR
		bBool1: BOOL:=FALSE;
		bRead1: BOOL:=FALSE;
		bWrite1: BOOL:=FALSE;
		Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
	END_VAR
	VAR_EXTERNAL
		Printer: WORD:=0;
	END_VAR
	VAR 
	END_VAR

POU 본문

시스템 변수 sys_bPulse1sbBool1Bool16_OverlappingDut_1.b0에 복사됩니다. bWrite1sys_bIsComPort1F145F146NotActiveTRUE로 설정되면 Bool16_OverlappingDut_1.b0을 통해 bBool1은 슬레이브 2의 출력 Y38에 작성됩니다.

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,3,1,5,3,);
B(B_COIL,,bBool1,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_CONTACT,,bBool1,3,1,5,3,);
B(B_COIL,,Bool16_OverlappingDut_1.b0,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 13 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_COIL,,bRead1,46,1,48,3,S);
B(B_VARIN,,2,23,3,25,5,);
B(B_VARIN,,Bool16_OverlappingDut_1.w0,23,4,25,6,);
B(B_VARIN,,WY0,23,5,25,7,);
B(B_VARIN,,3,23,6,25,8,);
B(B_VARIN,,16#8800,23,7,25,9,);
B(B_F,F145_WRITE_DATA_TYPE_OFFS!,Instance,25,0,40,9,,?DEN?DPort?DSlaveAddress?DMasterWordData?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO);
B(B_VARIN,,SYS_COM1_PORT,23,2,25,4,);
B(B_COIL,,bWrite1,42,1,44,3,E);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,25,2);
L(44,2,46,2);
L(40,2,42,2);
L(1,0,1,13);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

bBool1 := sys_bPulse1s;
Bool16_OverlappingDut_1.b0 := bBool1;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
    F145_WRITE_DATA_TYPE_OFFS(Port := SYS_COM1_PORT,
                              SlaveAddress := 2,
                              MasterWordData := Bool16_OverlappingDut_1.w0,
                              SlaveWordAddressType := WY0, 
                              SlaveWordAddressOffs := 3, 
                              NumberOfWords_BitsInWords := 16#8800);
                              bRead1 := true;
                              bWrite1 := false;
end_if;

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