Twincat 2 cx8090 el6001

Cullyn

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community,

ein schon oft angesprochenes Problem, aber ich greife es nochmal auf. Ich habe eine CX8090, mit diversen Digital In und Out Klemmen. Und eine EL6001. Mein Ziel ist es mit der EL6001 Messdaten zu empfangen. Dazu habe ich mir das Beispiel für die COMlibV2 genommen und los gelegt.

Derzeit ist mein Stand der, das ich Datenstrings auf der Klemme empfangen kann. Jedoch nur 16 Zeichen Daten und 2 Zeichen Ende -> Summe 18 Zeichen.
Wenn ich die Datenmenge erhöhe, bleibt das Beispiel immer "hängen", was ich auch nur beheben kann, wenn ich die EL6001 neu initialisiere.

Kann man mit der EL6001 auch mehr empfangen?
in der Art:
Code:
 22.6630,  6.3753,  24.5896, 1449.1885CRLF
-> die Leerzeichen sind gewollt, als Platzhalter.

Datenstrings senden, von der Klemme habe ich noch nicht lösen können, da habe ich auf dem PC immer nur ein Viereck bekommen.
Leider bin ich auch auf dem Gebiet der SPS Programmierung recht neu.

Hier mal mein Code was das Empfangen angeht.
Code:
(*==================================================================
    Call the send block every second to repeat the transmission.
    Also call the block as long as it is busy to finish a transmission.
*)
Timer(IN:=TRUE, PT:=T#3600s);
(*IF (*Timer.Q OR Send.Busy*)TrigReset.Q=TRUE
THEN    Send(
    SendString:= 'Reset$0D$0A',
    TXbuffer:= TxBuffer1,    (* see global variables *)
    Busy=> SendBusy,
    Error=> SendErrorID);
    Timer(IN:=FALSE); (* reset timer *)
END_IF*)

(*==================================================================
    Receive string data 
    The block receives any data strings beginning with a Prefix:= '$02 ', character and 
    ending with an Sufix:= '$03' character.    
*)
Receive(
    Suffix:= '$0D$0A',
    Timeout:= T#1s,
    ReceivedString:= ReceivedString,
    RXbuffer:= RxBuffer1,
    StringReceived=> StringReceived,
    Busy=> ReceiveBusy,
    Error=> ReceiveErrorID,
    RxTimeout=> ReceiveTimeout );
IF StringReceived= TRUE
 THEN
    ReceiveCounter := ReceiveCounter + 1;
    LastReceivedString := ReceivedString;
ClearCOMB(
Buffer:=RxBuffer1);
ClearCOMB(
Buffer:=TxBuffer1);
END_IF;

(*==================================================================
    Background communication with the COM port device.
    The SerialLineControl function block is supposed to be called in every PLC cycle.
    It communicates with the serial line hardware device and transmits or receives data.
    The SerialLineControl can be called in the standard task or in a separate fast task as well.
    A fast separate task will be necessary at high baud rates.
*)
COMportControl(
    Mode:= SERIALLINEMODE_PC_COM_PORT,
    pComIn:= ADR(COMin_COMport),            (* I/O data; see global variables *)
    pComOut:= ADR(COMout_COMport),        (* I/O data; see global variables *)
    SizeComIn:= SIZEOF(COMin_COMport),        (* I/O data; see global variables *)
    TxBuffer:= TxBuffer1,                (* transmit buffer; see global variables *)
    RxBuffer:= RxBuffer1,                (* receive buffer; see global variables *)
    Error=> COMportControlError,
    ErrorID=> COMportControlErrorID );
 
Zurück
Oben