FP_MC_PROTOCOL_WRITE

MC 프로토콜을 통해 외부 장치에 데이터 쓰기

PLC에는 마스터 통신 내에 전송이 있습니다. 통신은 MC 프로토콜을 지원하는 장치에 명령을 보내고 응답을 받는 방식으로 수행됩니다. PLC는 메모리 어드레스를 지정하고 사용자 프로그램에서 쓰기 명령을 실행하여 프로토콜에 따라 메시지를 자동으로 생성합니다.

파라미터

입력

Port (WORD, INT, UINT)

이더넷 포트(예: SYS_ETHERNET_USER_CONNECTION_1)

Source (ANY)

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

Words_Bits (WORD, INT, UINT)
  • 수신된 데이터 수를 지정합니다. 수신된 데이터의 수는 워드 전송의 경우 워드 단위로, 비트 전송의 경우 비트 단위(입력 Words_Bits에 적용된 데이터 유형에 따라 다름)로 표시됩니다.

  • Words_Bits에서 지정한 전송 방식과 전송 데이터 번호는 Source의 데이터 형식에 따라 다릅니다.

Source에 지정된 메모리 영역

전송 방법

전송 데이터 수 Words_Bits

주석

16비트 메모리 영역

WX, WY, WR, WL, DT, LD

워드 전송

1–960워드

1비트 메모리 영역

X,Y,R,L,DT,n,LD,n

비트 전송

1–7168비트

전송 데이터 수가 홀수인 경우 4비트 더미 코드 16#0이 추가됩니다.

DestMemoryArea (WORD, INT, UINT)

데이터가 기록되는 슬레이브의 메모리 영역.

유닛

메모리 영역 유형

시스템 변수

비트

입력

X

16진수

SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X

출력

Y

16진수

SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y

링크 릴레이

B

16진수

SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B

내부 릴레이

M

10진수

SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M

래치 릴레이

L

10진수

SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L

워드

데이터 레지스터

D

10진수

SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D

파일 레지스터

R

10진수

SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R
ZR

16진수

SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR

링크 레지스터

W

16진수

SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W
DestMemoryOffset (DWORD, DINT, UDINT)

데이터가 기록되는 슬레이브의 메모리 영역에 대한 오프셋.

범위: 16#016#F7FFFF(0–16252927)

출력

Result (WORD, INT, UINT)

실행 결과 코드(영역드 WX, WY, XR, WL, DT, LD 내 1워드)를 저장하는 마스터 유닛의 메모리 영역을 지정합니다.

  • 0: 정상 완료

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

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

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

  • 4: 전송 타임아웃

  • 5: 응답 수신 타임아웃

  • 6: 데이터 에러 발생

시간 차트

  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로 유지됨)
  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • 파라미터에 지정된 값이 허용 범위를 벗어난 경우.

  • 이더넷 포트가 올바르지 않거나 이더넷 포트가 닫혀 있는 경우.

  • Words_Bits에서 지정한 전송 데이터 번호가 잘못된 경우

  • Source에 지정된 마스터 유닛에 영역 또는 레지스터가 올바르지 않거나 허용 범위를 벗어난 경우.

  • 실행 결과 코드가 저장된 메모리 영역이 잘못된 경우.

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)
  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • 파라미터에 지정된 값이 허용 범위를 벗어난 경우.

  • 이더넷 포트가 올바르지 않거나 이더넷 포트가 닫혀 있는 경우.

  • Words_Bits에서 지정한 전송 데이터 번호가 잘못된 경우

  • Source에 지정된 마스터 유닛에 영역 또는 레지스터가 올바르지 않거나 허용 범위를 벗어난 경우.

  • 실행 결과 코드가 저장된 메모리 영역이 잘못된 경우.

POU 헤더

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

	VAR
		bEnable: BOOL:=FALSE;
		awValues: ARRAY [0..2] OF WORD:=[3(0)];
		diMemoryOffset: DINT:=0;
		iResult: INT:=0;
		abValues: ARRAY [0..2] OF BOOL:=[3(FALSE)];
		iPort: INT:=0;
	END_VAR

LD 본문

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_COMMENT,,Bit transfer,2,0,10,1,);
B(B_COMMENT,,Memory Areas:	SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X ^SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B ^SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M ^SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L,13,0,39,6,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,abValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_COMMENT,,Memory Areas:	 ^SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W,13,0,39,5,);
B(B_COMMENT,,Word Transfer,2,0,10,1,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,awValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_COMMENT,,only valid for ethernet ports! ^--> Valid Ports:	SYS_ETHERNET_USER_CONNECTION_1 - SYS_ETHERNET_USER_CONNECTION_216,3,1,52,4,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

(*Bit transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_WRITE(Port := iPort,
                         Source := abValues,
                         Words_Bits := Size_Of_Var(abValues), 
                         DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
                         DestMemoryOffset := diMemoryOffset,
                         Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_WRITE(Port := iPort,
                         Source := awValues,
                         Words_Bits := Size_Of_Var(awValues), 
                         DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
                         DestMemoryOffset := diMemoryOffset,
                         Result => iResult);
End_if;

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