SendData

Daten über Kommunikationsport oder Ethernet-Benutzerverbindung senden

Dieser Befehl sendet die Daten über einen Sendepuffer an externe Geräte (Computer, Messgeräte, Strichcodeleser usw.), die an der Kommunikationsschnittstelle angeschlossen sind oder über eine Ethernet-Benutzerverbindung. Wenn Sie diesen Befehl auf die COM-Schnittstellen der CPUs anwenden, wird außerdem der Empfangspuffer gelöscht und der Merker "Empfangen beendet" zurückgesetzt, sodass weiterer Datenempfang möglich ist.

Parameter

Eingang

Port (WORD, INT, UINT)

Legt die Kommunikationsschnittstellen fest (je nach SPS-Typ):

  • COM-Schnittstelle z.B. SYS_COM0_PORT

  • Ethernet-Schnittstelle z.B. SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU z.B. 16#xx01 (xx = Steckplatznummer) in COM01

Start (WORD, INT, UINT)

Sendepuffer

NumberOfBytes (WORD, INT, UINT)

Anzahl der zu sendenden Bytes:

  • Negativer Wert: Das in den Systemregistern ausgewählte Endezeichen wird nicht an die zu übertragende Zeichenfolge angehängt.

  • 0 (Null Byte): System für weiteren Datenempfang vorbereiten

  • 16#8000: Kommunikationsart wechseln

Anmerkungen

  • Wenn die angegebene Anzahl von Bytes gesendet wurde, wird der Merker "Senden beendet" auf TRUE gesetzt. Weitere Daten können gesendet oder empfangen werden. Jeder Sendebefehl setzt den Merker "Senden beendet" auf FALSE; es ist dann kein Datenempfang mehr möglich. Eine Auswertung des Merkers "Senden beendet" empfiehlt sich dann, wenn keine Antwort erwartet wird, z.B. bei Broadcast-Meldungen.

  • SendData ist in den folgenden Befehlen gekapselt:

    • SendCharacters

    • SendCharactersAndClearString

    • ClearReceiveBuffer

    • SetCommunicationMode

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • wenn die mit NumberOfBytes festgelegte Zahl der zu sendenden Bytes außerhalb des festgelegten Datenbereichs liegt.

  • Nur für MCU-Modul:

    • wenn das MCU-Modul sich nicht im angegebenen Steckplatz befindet oder null Byte gesendet werden sollen.

    • wenn 16#8000 im MEWTOCOL-COM Master/Slave-Modus festlegt wird.

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • wenn die mit NumberOfBytes festgelegte Zahl der zu sendenden Bytes außerhalb des festgelegten Datenbereichs liegt.

  • Nur für MCU-Modul:

    • wenn das MCU-Modul sich nicht im angegebenen Steckplatz befindet oder null Byte gesendet werden sollen.

    • wenn 16#8000 im MEWTOCOL-COM Master/Slave-Modus festlegt wird.

Beispiel

In diesem Beispiel wird die Datenfolge sSendData übertragen. Definieren Sie einen Sendepuffer für 30 Bytes (ARRAY [0...15] OF WORD) und kopieren Sie 8 Zeichen einer Zeichenfolge (""ABCDEFGH"") in den Puffer.

Aufbau des Sendepuffers:

Das erste Wort des Sendepuffers (Offset 0) ist für die Anzahl der zu sendenden Bytes reserviert. Kopieren Sie also die Daten in Offset 1 (SendBuffer[1]).

Sobald das Senden beginnt (die Ausführungsbedingung für den Sendebefehl wird auf TRUE gesetzt), wird der Wert in Offset 0 auf 8 gesetzt. Am Ende der Übertragung wird der Wert in Offset 0 automatisch auf 0 gesetzt. Die Daten in Offset 1 bis Offset 4 werden der Reihe nach, beginnend mit dem niederwertigen Byte, übertragen.

Übertragen Sie die Zeichen "ABCDEFGH" an das externe Gerät, das mit der Schnittstelle COM1 verbunden ist. Start- und Endezeichen haben die Standardwerte "Kein STX" und "CR".

  1.  (1)  Merker "Senden beendet"
  2.  (2) Ausführungsbedingung
  3.  (3) Ausführung des Sendebefehls
  4.  (4) Senden

POE-Kopf

Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.

	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

POE-Rumpf

Wenn bSend TRUE ist, kopiert F10_BKMV die Zeichen der Zeichenfolge aus sSendData in den Puffer awSendBuffer, beginnend bei awSendBuffer[1]. Die ersten beiden Worte einer Zeichenfolge enthalten die Kopfinformationen (maximale Zeichenanzahl und aktuelle Zeichenanzahl). Die Kopfinformationen dürfen nicht in den Puffer kopiert werden. Geben Sie deshalb einen Offset von 2 in Bezug auf die Anfangsadresse der Zeichenfolge ein, ehe Sie die Daten kopieren. Der Sendepuffer muss ausreichend groß bemessen sein. Jedes Element des Arrays an SendBuffer kann zwei Zeichen der Zeichenfolge an SendString enthalten. SendBuffer[0] ist für die Anzahl der zu sendenden Bytes reserviert.

Der Befehl SendData sendet die Daten aus dem ersten Element des Sendepuffers awSendBuffer[0]), das mit Start angegeben ist. Die Länge der zu übermittelnden Zeichenfolge (8 Bytes) wird durch NumberOfBytes angegeben. Mit Hilfe der Funktion LEN lässt sich die Anzahl der Bytes berechnen. Die Daten werden an der Schnittstelle COM1 ausgegeben, die mit Port festgelegt wird.

KOP-Rumpf

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_VARIN,,awSendBuffer[0],14,4,16,6,);
B(B_F,LEN!,,9,4,14,7,,?DIN?C);
B(B_VARIN,,sSendData,7,5,9,7,);
B(B_F,E_SendData!,,16,1,26,7,,?DEN?DPort?DStart?DNumberOfBytes?AENO);
B(B_VARIN,,1,14,3,16,5,);
L(1,3,3,3);
L(5,3,16,3);
L(14,6,16,6);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

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 *)         
    SendData(Port :=1, start := awSendBuffer[0], NumberOfBytes := LEN(sSendData));
end_if;

IsTransmissionDone

Letzte Änderung am: 2022-12-06Feedback zu dieser SeitePanasonic Hotline