F159_MTRN

CPU 또는 MCU 포트를 통해 데이터 전송

이 명령은 지정된 통신 포트에 연결된 외부 장치(컴퓨터, 측정 기기, 바코드 판독기 등)로 전송 버퍼를 사용하여 데이터를 전송합니다. CPU의 COM 포트에 적용되는 경우 이 명령은 수신 버퍼를 지우고 "수신 완료" 플래그를 초기화하며 추가 데이터 수신을 허용합니다.

입력

s_Start (WORD, INT, UINT)

전송 버퍼

n_Number (WORD, INT, UINT)

전송할 바이트 수:

  • 음수 값: 시스템 레지스터에서 선택한 종료 코드는 전송 문자열에 추가되지 않습니다.

  • 0(0바이트): 데이터를 추가로 수신할 시스템 준비

  • 16#8000: 2022-04-04"프로그램 제어"와 MEWTOCOL 마스터/슬레이브 사이에서 통신 모드를 전환합니다.

d_Port (WORD, INT, UINT)

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

  • COM 포트(예: SYS_COM0_PORT)

  • 이더넷 포트(예: SYS_ETHERNET_USER_CONNECTION_1)

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

주석

  • 지정된 바이트 수가 전송되면 "transmission done" 플래그는 TRUE로 전환됩니다. 새 데이터를 전송 또는 수신할 수 있습니다. 모든 전송 명령은 "transmission done" 플래그를 FALSE로 전환하고 데이터를 수신할 수 없습니다. "transmission done" 플래그 평가는 응답을 기대할 수 없는 경우(예: 브로드캐스트 메시지)에 유용할 수 있습니다.

  • F159_MTRN 는 다음 명령에 캡슐화됩니다.

    • SendCharacters

    • SendCharactersAndClearString

    • ClearReceiveBuffer

    • SetCommunicationMode

에러 플래그

sys_bIsOperationErrorHold(TRUE로 전환되어 TRUE로 유지됨)

  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • n_Number에서 전송할 바이트 수가 지정된 영역을 벗어납니다.

  • MCU 전용 플래그:

    • MCU 유닛이 지정된 슬롯에 없거나 0바이트를 전송해야 하는 경우.

    • MEWTOCOL-COM 마스터/슬레이브 모드에서 16#8000이 지정된 경우

sys_bIsOperationErrorNonHold(스캔 1회에 대해 TRUE로 전환)

  • 인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.

  • n_Number에서 전송할 바이트 수가 지정된 영역을 벗어납니다.

  • MCU 전용 플래그:

    • MCU 유닛이 지정된 슬롯에 없거나 0바이트를 전송해야 하는 경우.

    • MEWTOCOL-COM 마스터/슬레이브 모드에서 16#8000이 지정된 경우

이 예제에서는 문자열 sSendData의 문자를 전송합니다. 30바이트(ARRAY [0...15] OF WORD)에 대한 전송 버퍼를 정의하고 8자의 문자열("ABCDEFGH")을 버퍼에 복사합니다.

전송 버퍼 레이아웃:

전송 버퍼의 첫 번째 워드(오프셋 0)는 전송할 바이트 수로 예약됩니다. 따라서 오프셋 1(SendBuffer[1])에 데이터를 복사합니다.

전송이 시작되면(전송 명령의 실행 조건이 TRUE로 바뀜) 오프셋 0의 값이 8로 설정됩니다. 전송이 끝나면 오프셋 0의 값이 자동으로 0으로 초기화됩니다. 오프셋 1에서 오프셋 4까지의 데이터가 하위 바이트부터 순서대로 전송됩니다.

COM 포트에 연결된 외부 장치로 "ABCDEFGH" 문자를 전송합니다. 시작 코드와 종료 코드의 경우 기본 설정 "No-STX" 및 "CR"이 선택됩니다.

  • 1: "전송 완료" 플래그
  • 2: 실행 조건
  • 3: 전송 명령 실행
  • 4: 전송

POU 헤더

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

	VAR
		bSend: BOOL:=FALSE;
			(*activates function*)
		sSendData: STRING[30]:='ABCDEFGH';
			(*up to 30 chars*)
		awSendBuffer: ARRAY [0..15] OF WORD:=[16(0)];
			(*for 30 chars + 1 word*)
	END_VAR

POU 본문

bSendTRUE인 경우, F10_BKMVsSendData에 있는 문자열의 문자를 awSendBuffer[1]에서 시작하는 버퍼 awSendBuffer로 복사합니다. 문자열의 첫 번째 두 워드에는 문자열 헤더 정보가 포함됩니다(문자 최대 수 및 현재 문자 수). 문자열 헤더를 버퍼에 복사할 수 없습니다. 따라서 문자열의 시작 어드레스에 2의 오프셋을 입력한 후 데이터를 복사합니다. 전송 버퍼의 크기는 모든 데이터를 전송할 수 있도록 충분해야 합니다. SendBuffer의 배열 요소마다 SendString에 있는 문자열의 두 문자가 포함될 수 있습니다. SendBuffer[0]는 전송할 바이트 수를 위해 예약되어 있습니다.

F159_MTRN가 데이터를 s_Start에 지정된 대로 전송 버퍼(awSendBuffer[0])의 첫 번째 요소로부터의 데이터를 전송합니다. 보낼 문자열의 길이(8바이트)는 n_Number에서 설정됩니다. 펑션 LEN을 사용하여 바이트 수를 계산합니다. 데이터는 d_Port에 지정된 대로 COM 포트 1에서 출력됩니다.

LD 본문

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 10 ;
        NETWORK_BODY
B(B_COMMENT,,Creating the send buffer,1,0,14,1,);
B(B_CONTACT,,bSend,3,2,5,4,R);
B(B_VAROUT,,awSendBuffer[1],26,4,28,6,);
B(B_F,F10_BKMV,,18,2,26,7,,?DEN?D@'s1'?Ds2?AENO?Cd);
B(B_F,Adr_Of_VarOffs_I!,,9,3,18,7,,?D@'Var'?DOffs?CAdr);
B(B_VARIN,,sSendData,7,4,9,6,);
B(B_F,AdrLast_Of_Var_I!,,9,7,18,9,,?D?C);
B(B_VARIN,,sSendData,7,7,9,9,);
B(B_VARIN,,2,7,5,9,7,);
L(5,3,18,3);
L(1,3,3,3);
L(18,3,18,4);
L(1,0,1,10);
L(18,6,18,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_COMMENT,,bSend sign of the bSend buffer via the serial interface,1,0,25,1,);
B(B_CONTACT,,bSend,3,2,5,4,R);
B(B_F,F159_MTRN!,,17,1,25,7,,?DEN?Ds_Start?Dn_Number?Dd_Port?AENO);
B(B_VARIN,,awSendBuffer[0],15,3,17,5,);
B(B_VARIN,,1,15,5,17,7,);
B(B_F,LEN!,,9,3,14,6,,?DIN?C);
B(B_VARIN,,sSendData,7,4,9,6,);
L(5,3,17,3);
L(1,3,3,3);
L(14,5,17,5);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST 본문

if (DF(bSend)) then
    (* Copy all characters of the SendString to the SendBuffer from position 1 *)
    F10_BKMV(s1_Start := Adr_Of_VarOffs(Var := sSendData, Offs :=2), 
         s2_End := AdrLast_Of_Var(sSendData), 
         d_Start => awSendBuffer[1]);
    (* Send the data of the SendBuffer via the COM Port 2 of the MCU unit in slot 3 *)
    (* In SendBuffer[0] the number of bytes not yet transmitted is stored *)         
    F159_MTRN(s_Start := SendBuffer[0], n_Number := LEN(sSendData), d_Port :=16#0302);
end_if;

IsTransmissionDone "전송 완료" 플래그 평가

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