FP_MC_PROTOCOL_READ

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

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

파라미터

입력

Port (WORD, INT, UINT)

이더넷 포트(예: SYS_ETHERNET_USER_CONNECTION_1)

SourceMemoryArea (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

SourceMemoryOffset (DWORD, DINT, UDINT)

데이터를 요청할 슬레이브의 메모리 영역에 대한 오프셋.

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

Words_Bits (WORD, INT, UINT)

전송 방법은 Destination의 데이터 유형에 따라 다릅니다.

Destination에 지정된 메모리 영역

전송 방법

전송된 데이터 수

주석

16비트 메모리 영역

WX, WY, WR, WL, DT, LD

워드 전송

1–960워드

1비트 메모리 영역

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

비트 전송

1–7168비트

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

출력

Destination (ANY)

요청한 데이터가 기록되는 마스터 유닛의 워드 영역 또는 레지스터

Result (WORD, INT, UINT)

FP7에만 해당:

  • 0: 정상 완료

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

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

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

  • 4: 전송 타임아웃

  • 5: 응답을 기다리는 동안 타임아웃

  • 6: 수신된 데이터의 에러

    이 에러는 비정상적인 텔레그램이 수신될 때 발생합니다(예: 헤더에 형식 에러가 있을 때). 이 경우, 수신된 데이터는 삭제됩니다.

  • 7: I/O 맵에 예약된 영역 부족

    이 에러는 이더넷 연결 수가 16개를 초과할 때 발생합니다(고급 이더넷 통신). 통신 제어 플래그를 위해 예약된 워드 영역이 이더넷 연결 수에 비해 충분히 큰지 확인하십시오.

  • 8: 현재 사용 중인 전송 버퍼

    이 에러는 펌웨어 버전 4.57 이상이 설치된 FP7 PLC에서 발생할 수 있습니다.

통신 에러의 경우, MC 프로토콜과 관련된 다른 에러 코드가 설정될 수 있습니다. 자세한 내용은 사용 중인 PLC의 설명서를 참조하십시오.

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

  • 슬레이브 또는 마스터 데이터가 사용 가능한 어드레스 범위를 초과합니다.
  • 이더넷 포트가 올바르지 않거나 이더넷 연결이 닫혀 있는 경우.

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

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

  • 슬레이브 또는 마스터 데이터가 사용 가능한 어드레스 범위를 초과합니다.
  • 이더넷 포트가 올바르지 않거나 이더넷 연결이 닫혀 있는 경우.

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

POU 헤더

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

	VAR
		diMemoryOffset: DINT:=0;
		awValues: ARRAY [0..2] OF WORD:=[3(0)];
		iResult: INT:=0;
		bEnable: BOOL:=FALSE;
		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 := 7 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VAROUT,,abValues,41,2,43,4,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,3,28,5,);
B(B_VARIN,,diMemoryOffset,26,4,28,6,);
B(B_VAROUT,,iResult,41,3,43,5,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_READ!,,28,0,41,7,,?DEN?DPort?HSourceMemoryArea?DSourceMemoryOffset?DWords_Bits?AENO?CDestination?CResult);
B(B_F,Size_Of_Var!,,21,5,28,7,,?D?C);
B(B_VARIN,,abValues,19,5,21,7,);
L(7,2,28,2);
L(1,2,5,2);
L(1,0,1,7);
        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 := 7 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VAROUT,,awValues,41,2,43,4,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,3,28,5,);
B(B_VARIN,,diMemoryOffset,26,4,28,6,);
B(B_VAROUT,,iResult,41,3,43,5,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_READ!,,28,0,41,7,,?DEN?DPort?HSourceMemoryArea?DSourceMemoryOffset?DWords_Bits?AENO?CDestination?CResult);
B(B_F,Size_Of_Var!,,21,5,28,7,,?D?C);
B(B_VARIN,,awValues,19,5,21,7,);
L(1,2,5,2);
L(7,2,28,2);
L(1,0,1,7);
        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_READ(Port := iPort,
                        SourceMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
                        SourceMemoryOffset := diMemoryOffset, 
                        Words_Bits := Size_Of_Var(abValues),
                        Destination => abValues, Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_READ(Port := iPort,
                        SourceMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
                        SourceMemoryOffset := diMemoryOffset, 
                        Words_Bits := Size_Of_Var(awValues),
                        Destination => awValues, Result => iResult);
End_if;

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