Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: TwinCAT Problem

  1. #1
    Registriert seit
    18.08.2010
    Beiträge
    35
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Freunde,

    Ich bin neu in diesem Forum sowie auch für TwinCAT. Sorry ich kann nicht Deutsch sprechen. Little bitte ich kann aber nicht gut. (Hier ich habe gebenutzt google).

    Ich möchte die Daten aus dem Temperaturregler durch die Beckhoff PLC lesen. Ich bin mit EtherCAT EK1100, EL6001 und EL 9010-Module. Diese Temperatur-Controller über RS242 via EL6001 Kommunikation verbunden.

    Jetzt, als Programm Ich bin mit dem Sample_PC_COM_Port, Fast Track-Programm als Hintergrund-Kommunikation. Und die Bibliothek ist ComLib V2 Sample programme.Below herauszufinden, das Programm mit globalen und lokalen Variablen im Anhang.
    Das Programm ist in der SPS-Steuerung läuft ohne Fehler und auch keine in Twin CAT PLC Manager, plc ist im Betriebsmodus. Die Module sind auch die Daten austauschen. Zum Lesen der Daten aus, die Temperaturregelung I verknüpft globale Variablen COMin_COMport AT% IB0: PcComInData und COMout_COMport AT% AB0: PcComOutData; jeweils an Status und Kontrolle in der SPS-Manager. Ich sehe die Daten in der SPS-Manager den Austausch in diesem Parameter sowie SPS-Steuerung in globalen Variablen. Diese Daten ist etwas anderes, das ist nicht dasselbe wie Temperaturregler.

    So können Sie Menschen helfen mir, um herauszufinden, welche Variablen, dass ich die Verbindung mit der EL-Modul 6001 bis die Daten aus den Temperaturregler lesen? Es ist wirklich dringend Freunde. Es wird eine große Hilfe sein.

    Hier finden Sie das Programm in der Anlage im Word-Format.

    Vielen Dank im Voraus.
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren TwinCAT Problem  

  2. #2
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Hier ein paar evtl. Ungereimtheiten:
    - Eine EL6001 hat ein anderes Prozessabbild als eine KL6001 - man muss die richtigen Datentypen für IO-Variablen verwenden. Für eine EL6001 mit den 22 Datenbyte sollten die KL6inData22B und KL6outData22B verwendet werden.
    - Die Verknüpfung von Control und Status reicht nicht aus. Die Datenbytes müssen ebenfalls verknüpft werden und zwar alle 22 Byte bei der EL6001
    - Das SerialLineMode muss bei der Verwendung der EL6001 auf SERIALLINEMODE_EL6_22B eingestellt sein

    Gruß,
    witkatz

  3. Folgender Benutzer sagt Danke zu witkatz für den nützlichen Beitrag:

    tech007 (01.09.2010)

  4. #3
    Registriert seit
    18.08.2010
    Beiträge
    35
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hello witkatz,

    Danke für dein hilfe.

    Aber ich muss noch arbeiten von thise thema.

    Danke.

  5. #4
    Registriert seit
    18.08.2010
    Beiträge
    35
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe die Datentypen, die Sie mir gesagt.
    - Ich hatte 22 Datenbytes, KL6inData22B und KL6outData22B für EL6001 genommen.
    - Auch Serial Line Modus, um die SERIALLINEMODE_EL6_22B geändert.
    - Ich habe auch jeden Status und Kontrolle Bytes einzeln angeschlossen und korrekt.
    - Baudrate von temperatue measurment Gerät und EL6001-Modul ist auf 9600 eingestellt.
    - Parität ist auch als pro Gerät Konfiguration.
    - Ich kann senden und empfangen die Zeichenfolge Zeichenfolge aber ich kann nicht lesen
    die Temperatur.

    Probleme sind:

    1.Can Sie mir sagen, was kann probelme im Programm sein?
    2.Ich weiß nicht, wie zu beheben Präfix und Suffix, wie ich will, um die Temperatur vom Gerät gelesen (ich glaube, dies ist der wichtigste Teil fehlt mir).
    3.Device Information: ALMEMO 5690-2


    Hier finden Sie das Programm weiter unten.
    -------------------------------------------------------------------
    (*==================================================================
    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#10s);

    IF Timer.Q OR Send.Busy THEN
    (* SendString:= '$02Hello World - $03'*)

    Send( SendString:= '$02abhi$03',
    TXbuffer:= TxBuffer2, (* 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 STX ($02) character and
    ending with an ETX ($03) character.
    *)
    Receive(
    Prefix:= '$02',
    Suffix:= '$03',
    Timeout:= T#10s,
    ReceivedString:= ReceivedString,
    RXbuffer:= RxBuffer2,
    StringReceived=> StringReceived,
    Busy=> ReceiveBusy,
    Error=> ReceiveErrorID,
    RxTimeout=> ReceiveTimeout );

    IF StringReceived THEN

    ReceiveCounter := ReceiveCounter + 1;
    LastReceivedString := ReceivedString;

    END_IF



    b:= STRING_TO_BYTE('LastReceivedString');





    (*==================================================================
    Background communication with EL6001 terminal *)

    COMportControl(

    Mode:= SERIALLINEMODE_EL6_22B,
    pComIn:= ADR(COMin_EL6001), (* I/O data; see global variables *)
    pComOut:= ADR(COMout_EL6001), (* I/O data; see global variables *)
    SizeComIn:= SIZEOF(COMin_EL6001), (* I/O data; see global variables *)
    TxBuffer:= TxBuffer2, (* Transmit buffer; see global variables *)
    RxBuffer:= RxBuffer2, (* Receive buffer; see global variables *)
    Error=> COMportControlError,
    ErrorID=> COMportControlErrorID );

    --------------------------------------------------------------------------
    Variables :

    Timer: TON;
    Send: SendString;
    SendBusy: BOOL;
    SendErrorID: ComError_t;

    Receive: ReceiveString;
    ReceivedString: STRING;
    LastReceivedString: STRING;
    StringReceived: BOOL:= TRUE; (* check with update-check with another programme-make it with TRUE *)
    ReceiveBusy: BOOL;
    ReceiveError: BOOL;
    ReceiveErrorID: ComError_t;
    ReceiveTimeout: BOOL;
    ReceiveCounter: UDINT;
    Outputs : BYTE;

    COMportControl: SerialLineControl;
    COMportControlError: BOOL;
    COMportControlErrorID: ComError_t;
    SERIALLINEMODE_EL6_22B: ComSerialLineMode_t;
    -----------------------------------------------------------------
    Global Variables :

    RxBuffer2: ComBuffer; (* Receive data buffer; used with all receive function blocks *)
    TxBuffer2: ComBuffer; (* Transmit data buffer; used with all receive function blocks *)
    COMin_EL6001 AT %IW66 : KL6InData22B; (*Linked with EL6001TwinCAT System Manager *)
    COMout_EL6001 AT %QW66 : KL6OutData22B;(*Linked with EL6001TwinCAT System Manager *)
    -----------------------------------------------------------------

    Können Sie mir helfen, es zu lösen aus? Ich bin auf dieser ziemlich lang und kein erfolgreiches Ergebnis workign. Ihre Hilfe Angelegenheit viel.

    Ich danke Ihnen.

  6. #5
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Das Seriallinemode ist hier noch falsch eingestellt. Sie deklarieren eine Variable:
    [HTML]SERIALLINEMODE_EL6_22B: ComSerialLineMode_t;[/HTML]Der Typ ComSerialLineMode_t ist ein ENUM, dh. die Variable SERIALLINEMODE_EL6_22B hat nach der Deklaration den Wert 0, also SERIALLINEMODE_DEFAULT! So weit ich sehen konnte wird der richtige Wert im Programm nicht zugewiesen. Das ist verwirrend und falsch.

    Als schnelle Abhilfe:
    Löschen bitte die Deklaration der Variablen SERIALLINEMODE_EL6_22B. Sie ist unnötig. Im Aufruf des FB können Sie den ENUM-Wert direkt verwenden, das ist besser zu lesen:
    Code:
    COMportControl(
        Mode:= SERIALLINEMODE_EL6_22B,
    Nur so als Tip: Für die Hardware-Variablen würde ich für eine EL6001 die Datentypen EL6inData22B und EL6outData22B verwenden. Das ist zwar nicht falsch, weil die Typen identisch zu KL6inData22B und KL6outData22B sind, aber Sie müssen Ihre Software dokumentieren und nach ein paar Wochen oder Monaten immer noch lesen und verstehen können. Da stolpert man schon mal über falsche Bezeichnungen.


    Was Prefix, Suffix und TimeOut angeht, da müssen Sie sich an das Übertragungsprotokoll des ALMEMO 5690-2 halten. Steht in der Dokumentation nichts dazu?


    Gruß,
    witkatz
    Geändert von witkatz (09.11.2010 um 11:41 Uhr)

  7. #6
    Registriert seit
    18.08.2010
    Beiträge
    35
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe Fehler bei der Verwendung EL6InData22B und EL6OutData22B. Der Fehler war: Undefined Typen. Aber nach diesem, sprach ich mit Local Beckhoff SPS und erkennen, dass KL6InData22B und KL6OutData22B sind mit demselben Bild. Also, nicht identisch Angelegenheit.

    Bezüglich Präfix und Suffix, tatsächlich falsch sind. Ich wil ändern.

    Aber noch ist dies der Probe Programm zum Senden und Empfangen der Zeichenkette. Es funktioniert gut. Hauptaufgabe ich habe, ist die Temperatur über RS 232 Mitteilung Temperatur mesurment Gerät lesen.

    Also, ich für die ich nur mit String-Programm empfangen, aber es funktioniert nicht.

    Ich sprach mit lokaler Unterstützung Beckhoff und sie sagten, alles in Ordnung ist. Auch ist Modul (EL 6001) Einstellung der Schnittstelle
    Auch scheint korrekt zu sein. Aber ich bin nicht immer Daten. Baudrate und Zeit ist auch richtig.

    Ich weiß nicht, warum kann ich nicht erkennen, Daten von Temperatur mesurment (Almemo 5690-2)?!

    Ich meine auch nicht im Programm, sondern auch in Twin CAT-System-Manager Ich bin nicht immer die Daten. Das ist ganz Schock für mich.
    Weil Programm nur manuplate oder Kontrolle der Daten von zwei Cat-System-Manager nicht mehr.

    Auch Modul scheint auch alles in Ordnung sein.

    Und ich weiß nicht, wie zu definieren Präfix oder Suffix für das Gerät aber wenn ich dann nicht definieren technicall es ist alles in Ordnung und
    Daten kommen sollte.

    Können Sie mir Anregungen oder Tipps in Bezug auf dasselbe? Oder wenn Sie Beispielprojekt auf Temperatur gelesen haben, dann kann es auch
    große Hilfe.

    Danke.

    Programme :
    Listen
    Read phonetically

    Dictionary - View detailed dictionary


    ---------------------------------------------------
    Timer(IN:=TRUE, PT:=T#1s);

    IF Timer.Q OR Receive.Busy THEN

    Receive(
    Prefix:= '*',
    Suffix:= '$0D$0A',
    Timeout:= T#1s,
    ReceivedString:= ReceivedString,
    RXbuffer:= RxBuffer2,
    StringReceived=> StringReceived,
    Busy=> ReceiveBusy,
    Error=> ReceiveErrorID,
    RxTimeout=> ReceiveTimeout );


    IF StringReceived THEN

    ReceiveCounter := ReceiveCounter + 1;
    LastReceivedString := ReceivedString;

    END_IF
    Timer(IN:=FALSE); (* reset timer *)

    END_IF

    IF StringReceived THEN

    b:= STRING_TO_BYTE('LastReceivedString');

    END_IF

    (*==================================================================
    Background communication with EL6001 terminal *)

    COMportControl(

    Mode:= SERIALLINEMODE_EL6_22B,
    pComIn:= ADR(COMin_EL6001), (* I/O data; see global variables *)
    pComOut:= ADR(COMout_EL6001), (* I/O data; see global variables *)
    SizeComIn:= SIZEOF(COMin_EL6001), (* I/O data; see global variables *)
    TxBuffer:= TxBuffer2, (* Transmit buffer; see global variables *)
    RxBuffer:= RxBuffer2, (* Receive buffer; see global variables *)
    Error=> COMportControlError,
    ErrorID=> COMportControlErrorID );
    -----------------------------------------------------------------

  8. #7
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Vielleicht sind EL6inData22B und EL6OutData22B in Ihrer Version der Library nicht deklariert. Wenn Sie eine aktuelle Version downloaden und installieren, dann ist dieser Punkt erledigt. Das ist aber nur ein Schönheitsfehler.

    Wichtige Frage ist, ob die Verdrahtung in Ordnung ist

    TxD (EL6001) <-> RxD (ALMEMO)
    RxD (EL6001) <-> TxD (ALMEMO)
    GND (EL6001) <-> GND (ALMEMO)
    Wird RTS und CTS verwendet? Wenn ja, sind sie auch richtig verdrahtet?


    Wenn TwinCAT PLC-Projekt in Ordnung ist und ohne Fehler übersetzt wurde:
    1. PLC Control:
    Project -> rebuild all (0 Errors?!)
    2. System Manager:
    PLC - Configuration -> ReScan (Path korrekt -> Rescan? sonst -> Change) (pic001.gif)
    3. System Manager:
    rechtsklick auf COMin_EL6001 -> Change Link (pic002.gif)
    4. System Manager:
    die komplette (!) Struktur verknüpfen (pic003.gif)
    das gleiche für COMout_EL6001
    5. System Manager:
    Activate Configuration and restart
    6. PLC Control:
    -> Online -> Login (das richtige Runtime System?)
    -> Online -> Run
    7. System Manager:
    ist die EL6001 im OP-State? (pic004.gif)
    kommen irgendwelche Daten (pic005.gif)? Evtl State-Word auswerten, sind Error-Flags gesetzt? http://infosys.beckhoff.com/content/...sw.htm?id=5676

    Was die Kommunikation zu dem Temperatur-Modul angeht, da müssen Sie sich an die Beschreibung des Gerätes halten. Das kann die Klemme EL6001 nicht wissen. Das Übertragungsprotokoll des Temperatur-Scanners geht über die reine Spezifikation von RS232 hinaus. Er spricht sozusagen seine eigene Sprache, die man implementieren muss.
    - Muss man die Temperatur anfragen? Mit welchem Kommando-String? Oder wird die Temperatur immer zyklisch gesendet?
    - in welchem Format wird die Temperatur gesendet? Binär oder ASCII?
    - Sendet das Gerät Präfix und Suffix? Wenn ja, dann muss man dem Receive-String Baustein die richtigen Werte übergeben. Wenn nicht, dann muss man diese Parameter leer lassen und timeout richtig setzen.

    Gruß,
    witkatz
    Angehängte Grafiken Angehängte Grafiken
    Geändert von witkatz (11.11.2010 um 13:30 Uhr)

  9. #8
    Registriert seit
    18.08.2010
    Beiträge
    35
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich bekam wieder dieselbe Frage.

    Nun ist endlich das Programm mit kleinen Änderungen runrining.

    Ich habe Strings aus der Vorrichtung, die ich erwarte. Aber ich habe Problem, dass

    Ich möchte nicht, dass ganze Reihe, aber ich will einfach nur, um die Temperatur von ihm gelesen.

    Ich habe einige Funktion der Zeichenfolge, aber es ist nicht geklappt hat.

    Programm finden Sie unten:

    ----------------------------------------------------------------------------
    Timer(IN:=TRUE, PT:=T#10s);

    IF Timer.Q THEN
    Receive(
    Prefix:= '< >',
    Suffix:= '< >',
    Timeout:= T#10s,
    ReceivedString:= ReceivedString,
    RXbuffer:= RxBuffer2,
    StringReceived=> StringReceived,
    Busy=> ReceiveBusy,
    Error=> ReceiveErrorID,
    RxTimeout=> ReceiveTimeout );

    IF StringReceived =TRUE THEN

    ReceiveCounter := ReceiveCounter + 1;
    LastReceivedString := ReceivedString;


    diff_string := FIND ('ReceivedString','LastReceivedString');
    concen := CONCAT ('ReceivedString','LastReceivedString');
    change := MID ('LastReceivedString',6,31);

    END_IF
    END_IF


    ------------------------------------------------------------------------------
    Variables :
    Receive: ReceiveString;
    ReceivedString: STRING;
    LastReceivedString: STRING;
    StringReceived: BOOL;
    ReceiveBusy: BOOL;
    ReceiveError: BOOL;
    ReceiveErrorID: ComError_t;
    ReceiveTimeout: BOOL;
    ReceiveCounter: UDINT;
    -------------------------------------------------------------------------


    Dies ist die varibale die Zeichenfolge aus dem Gerät ie''LastReceivedString''bekommen.
    Aber wie Sie sehen können, sind MID-Funktion oder CONCAT Funktion nur actining auf dieser varible Lable nicht aktuelle Daten
    aus dem Gerät.

    Zum Beispiel, diff_string Variable Ergebnis sollte im Idealfall Daten diffrence von den beiden varible insted der Suche nach
    dass es so diffrence der Name für beide varible nicht die eigentlichen Daten.

    Ich mag die temperatue Lesung aus dem ganzen Zeichenfolgen, die Länge 81 ist zu trennen. Insten dieser,
    dieser String-Funktion, wird nicht auf dieser Saite eher handeln als nur Etikett LastReceviedString.

    Kannst du Ahnung, wie man herausnehmen oder Auslesen nur ausgewählte Daten aus dem gesamten String? Einige Beispiel wird eine große Hilfe sein.

    Ich bin mit dem gleichen Modul wie ich vor dh EK1100, EL 6010 und EL9010 erwähnt.

    Danke.

  10. #9
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Du musst wissen an welcher Stelle des Strings die Daten stehen.

    Beispiel: LastReceivedString = 'xyz45.23abc'

    45.23 ist die Temperatur, 'xyz' und 'abc' sollen aus dem String entfernt werden.

    Du musst wissen wie viele nicht benötigten Zeichen der String enthält. Im Beispiel beginnen die Daten ab dem 4. Zeichen. Die Länges des Datensatzes ist auch wichtig. Im Beispiel 5 Zeichen (45.23).

    Dann mit MID() die Daten herausnehmen:

    Code:
    VAR
    sTemp : STRING;
    END_VAR
    ------------------------
    ...
    sTemp := MID(LastReceivedString, 5, 4);
    ...
    Ergebnis: sTemp = '45.23';

  11. #10
    Registriert seit
    18.08.2010
    Beiträge
    35
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Genau. Aber das Problem ist, dass es nicht tun diese Funktion mit den aktuellen Daten aus dem Gerät.
    Beispiel: LastReceivedString = 'xyz45.23abc "
    Hier ist LastReceivedString variabel und es Daten "xyz45.23abc '.

    Code:
    ----------------------
    VAR
    sTemp: STRING;
    END_VAR
    ------------------------
    ...
    sTemp: = MID (LastReceivedString, 5, 4);
    ...

    Wenn ich benutze diese Funktion nach obigen Beispiel ist das Problem es ist nicht die auf den Daten aus dem Gerät, das hier ist 'xyz45.23abc "trotz ist es auf Variablenname' LastReceivedString" handeln.

    Also, was bin ich immer mit diesem Ergebnis ist, = ''tRece'' nicht ''45,23''.
    Zitieren Zitieren String Problem  

Ähnliche Themen

  1. TwinCat Problem
    Von samtrigger im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 22.03.2011, 00:57
  2. TwinCAT Problem
    Von tech007 im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 18.08.2010, 23:09
  3. Antworten: 4
    Letzter Beitrag: 03.11.2009, 14:05
  4. Twincat Problem
    Von Twix_23 im Forum CODESYS und IEC61131
    Antworten: 10
    Letzter Beitrag: 12.10.2008, 13:31
  5. Problem mit TwinCat
    Von tigger im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 13.12.2006, 16:27

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •