FP_READ_FROM_SLAVE

슬레이브에서 데이터 읽기

이 명령을 사용하여 사용한 포트의 시스템 레지스터에서 정의한 대로 MEWTOCOL-COM 또는 Modbus RTU 프로토콜을 사용하여 통신 포트를 통해 슬레이브에서 데이터를 요청합니다.마스터와 슬레이브에 동일한 프로토콜을 설정해야 합니다.마스터와 슬레이브의 메모리 영역은 일치해야 합니다. 마스터의 유저 영역에서 슬레이브 데이터를 사용할 수 없으면 FP_READ_FROM_SLAVE_AREA_OFFS 또는 FP_MODBUS_MASTER를 사용합니다.

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

파라미터

입력

Port (WORD, INT, UINT)

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로 설정

SlaveAddress (WORD, INT, UINT)

데이터가 요청된 슬레이브의 소스 어드레스입니다.

출력

Destination (ANY)

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

Result (ANY)
  • 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 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.

	VAR_EXTERNAL
		g_Peripherie_SlaveResult_Address: ARRAY[0..9] OF REAL:=[10(0)];
	END_VAR
	VAR
		bReadResult: BOOL:=FALSE;
		wReadFromSlaveResult: WORD:=0;
			(*result of write to slave instruction*)
		iSlaveStationNumber: INT:=0;
			(*slave station number*)
		arrResults: ARRAY [0..9] OF REAL:=[10(0.0)];
			(*Array of results to be read from slave station*)
		iSlaveMemoryArea: INT:=5;
			(*memory Area in slave station*)
		iSlaveMemoryOffset: INT:=100;
		iSlaveMemorySize: INT:=1;
	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 := 8 ;
        NETWORK_BODY
B(B_VARIN,,SYS_COM1_PORT,19,2,21,4,);
B(B_VARIN,,iSlaveStationNumber,19,3,21,5,);
B(B_CONTACT,,bReadResult,8,1,10,3,);
B(B_VAROUT,,wReadFromSlaveResult,38,3,40,5,);
B(B_VAROUT,,arrResults,38,2,40,4,);
B(B_F,FP_READ_FROM_SLAVE!,,21,0,33,6,,?DEN?DnPort?DStationNumber?DSlaveAddress?AENO?CDestination?CResult);
B(B_VARIN,,g_Peripherie_SlaveResult_Address,19,4,21,6,);
L(1,2,8,2);
L(10,2,21,2);
L(33,3,38,3);
L(33,4,38,4);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

if (bReadResult) then
    FP_READ_FROM_SLAVE(Port := SYS_COM1_PORT, StationNumber := iSlaveStationNumber,
                       SlaveAddress := g_Peripherie_SlaveResult_Address, Destination => arrResults[0], 
                       Result => wReadFromSlaveResult);
end_if;

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