RS232 Datenübertragung

Isegrim
2007-02-14
2010-02-01
1 2 > >> (Page 1 of 2)
  • Isegrim - 2007-02-14

    Hallo,

    über ein Wago RS232-Modul möchte ich einen Sensor steuern.

    In Codesys gibt es hier die sercomm-Bibliothek. Allerdings bekomme ich es nicht hin, eine Buchstabenfolge von 3 Buchstaben zu senden und anschließend Meßdaten zu empfangen.

    Kann mir jemand sagen, wie das geht bzw. gibt es irgendwo ein Beispielprogramm?

    Danke im voraus.

    Klaus

     
  • Uwe - 2007-02-15

    Hallo Isegrim,

    unter folgendem Link

    http://www.wago.com/wagoweb/documentati ... 9mpl_d.htm

    findest du die Bibliothek "Serial_Interface_01.lib" mit Dokumentation.

    Mit dieser Bibliothek ist es relativ einfach die serielle Schnittstelle anzusprechen.

    Diese Bibliothek nimmt dir das komplizierte Handling der sercom.lib ab.

    Diese Bibliothek ist WAGO-spezifisch.
    Auf Systemen anderer Hersteller kann das Schnittstellenhandling anders funktionieren

    Uwe

     
  • RolandWagner

    RolandWagner - 2007-02-16

    Hallo,

    anbei auch mal zum Testen ein einfaches Projekt basierend auf der Syslibcom.lib.

    SysLibComTest.pro [31.11 KiB]

     
  • Isegrim - 2007-03-06

    Hallo Herr Wagner,

    das Beispielprogramm war sehr hilfreich für das Verständnis.

    Allerdings schaffe ich es noch nicht, einen Port zu öffnen. Bezieht sich COM1 auf die serielle Schnittstelle des Kontrolers (z.B. Wago 750-841) oder auf das erste RS232-Steckmodul?

    Gruß

    Klaus

     
  • Oberchefe - 2007-03-06

    Com 1 ist die intergierte Schnittstelle (Systemschnittstelle). Die erste Schnittstellenklemme bekommt den Namen Com2.

     
  • Uwe - 2007-03-07

    Hallo zusammen,

    die Syslibcom wird von WAGO nur auf dem IPC (870) und dort auch nur

    für die Onboard-Schnittstelle unterstützt.

    Generell kann auf dem IPC für alle Schnittstellen die Bibliothek

    IPC_Serial_Interface_01.lib verwendet werden.

    Alle anderen Geräte arbeiten nicht mit der der Syslibcom sondern nur

    mit der sercom.lib oder direckt über das Prozeßabbild.

    Versuche mit der Syslibcom auf dem 841 zu arbeiten werden also scheitern.

    Die Serial_Interface_01.lib kapselt die Funktionalität der sercom.lib und ermöglicht

    so eine relativ einfache serielle Kommunikation.

    Hierbei ist COM 1 die Service-Schnittstelle auf dem Controller.

    Die erste gesteckte serielle Klemme hat die Bezeichnung COM 2

    die 2. gesteckte COM 3 u.s.w.

    Uwe

     
  • ggfstone - 2007-03-15

    Hallo,

    ich habe mir gerade mal das Projekt SysLibComTest.pro angesehen. Da wird ein Aufruf gemacht:

    dwWritten := SysComWrite(dwHandle, ADR(bySend), 5, 0);

    Also mit Timeout = 0.

    Wie soll der SysComWrite bei Timeout 0 reagieren? Wenn ich mir die Dokumentation dazu ansehe müsste er sofort wieder aus der Funktion zurückkehren. Weil in 0 Zeit auch nur 0 Zeichen ausgegeben werden können müsste die Funktion den Wert 0 zurückliefern.

    Das ist aber wohl doch nicht so?

     
  • mwatermann - 2007-03-15

    kenne die funktion zwar nicht, aber kann es nicht sein, dass ein wert von 0 den timeout deaktiviert? also: 0 => kein timeout

     
  • Isegrim - 2007-03-16

    Hallo,

    gerade versuche ich mich wieder, ein kleines Testprogramm zu schreiben, um de COM-Port anzusprechen. Dies mal mit der Serial_Interface_01.lib. Jetzt bekomme ich die Warnung:

    SERCOMM.hex: Bibliothek ist für den aktuellen Maschinentyp nicht geeignet oder fehlerhaft!

    Ich habe die aktuelle SERCOMM.lib schon mehrfach heruntergeladen, funktioniert aber nicht.

    Weiß jemand, woher das kommt?

    Möglicherweise ein Folgefehler davon ist, die Fehlermeldung:

    Kein Zugriff auf VAR_IN_OUT Parameter XSTART_SEND von SERIAL_INTERFACE von außen.

    Danke im voraus.

    Klaus

     
  • Isegrim - 2007-04-24

    Hallo,

    meine Probleme habe ich anhand der Beispieldatei von Wago und einem Sofwareupdate gelöst.

    Kann mir noch jemand sagen, was der Parameter "xInit" aus der Bibliothek serial_interface_01 macht?

    Danke.

    Gruß

    Klaus

     
  • Uwe - 2007-04-24

    Hallo Klaus,

    xINIT ist ein Durchgangsparameter der vom Anwendungsprogramm

    einmalig gesetzt werden kann.

    Der Baustein schliesst dann intern die serielle Schnittstelle um die

    internen Buffer in dem seriellen Modul zu löschen und setzt dann die

    vom Anwender angelegte boolsche Variable zurück.

    Wenn xOPEN_COM_PORT anliegt, dann wird die Schnittstelle sofort wieder geöffnet.

    Eigentlich ist dieser Parameter überflüssig und muss vom Anwender nicht behandelt werden.

    Das Modul wird nach dem Einschalten autom. Initialisiert und man könnte ein Löschen der internen

    Buffer auch durch xOPEN_COM_PORT erreichen

    (falls man dies wirklich braucht z.B. beim Ändern der Baudrate).

    Also einfach ne boolsche Variable dranschalten

    (da Durchgangsparameter beschaltet werden müssen)

    und nichts mit machen

    Uwe

     
  • Isegrim - 2007-05-11

    Hallo,

    nach dem ich mit Eurer Hilfe ein gutes Stück weiter gekommen bin, muß ich jetzt nur noch wissen, was ich machen muß, um einen Sendestring mehrfach wegzuschicken, solange, bis das gewünschte Ergebnis zurück kommt.

    Ich programmiere in Ablaufsprache, und wenn mein Sensor "OK" zurück meldet, soll der nächste Schritt aktiviert werden.

    Bisher schaffe ich es nur, den Sensor einmal anzusprechen. Ich suche eine Schleife oder so etwas ähnliches, mit der ich den String solange wegschicke, bis das "OK" kommt.

    Kann mir bei diesem Problem jemand weiter helfen?

    Viele Grüße

    Klaus

     
  • Isegrim - 2007-05-11

    Ok, ich hatte das Problem bereits gelöst, ohne es gewußt zu haben und weis auch jetzt nicht, wieso es plötzlich funktioniert. Offensichtlich reicht es, wenn man xStart_Send erneut auf true setzt.

    Gruß

    Klaus

     
  • MatthiasMiko - 2007-06-08

    Hallo!

    Hardware:WAGO 750-841, Klemme 750-650/003-000 (parametrierbar)

    Ich habe einen Abgasmesskoffer und möchte den laufend per RS232 auslesen. Ich weiss jedoch nicht so recht, wie ich den FB SERIAL_INTERFACE da handhaben muss.

    Ich habe dem FB die Verbindungsdaten Baudrate, Parity, Stopbits, Bytesize und Flowcontrol (einfach die Angaben aus dem transmission protocoll des Messkoffers) sowie den Comport 2 gegeben, da com1 ja schon vergeben ist.

    An xSTART_SEND und xINIT habe ich einfach boolsche Variablen drangebaut, ohne weitere Spezifizierung.

    An utRECEIVE_BUFFER liegt ein typRING_BUFFER.

    Soweit alles OK (hoffe ich).

    Mein Problem liegt jetzt darin, dass ich nicht genau weiss, was ich an iBYTES_TO_SEND sowie ptSEND_BUFFER legen soll und ob ich diese beiden überhaupt belegen muss, da ich ja nur auslesen will und selber keine Signale an die Schnittstelle senden will.

    Weiterhin weiss ich nicht, ob, und wenn ja, welche Ein-/Ausgänge der Klemme ich schalten muss, damit die Verbindung läuft.

    Vielen Dank für jede Hilfe

    Matthias

     
  • hwesbe - 2009-01-21

    Hallo,

    jetzt habe ich nach langem suchen mal ein Eintrag gefunden, der in etwa dasselbe Problem hat wie ich.....und dann ist das Thema beendet. Keine Antwort.

    Schade.

    Oder weis es jemand?

    Gruß

     
  • Isegrim - 2009-01-21

    Welches dieser Probleme hast Du denn? Hast Du Dir schonmal das Beispielprogramm von Wago angeschaut, oder ist Dein Problem zu speziell?

     
  • hwesbe - 2009-01-22

    Hallo,

    Zitat:
    Mein Problem liegt jetzt darin, dass ich nicht genau weiss, was ich an iBYTES_TO_SEND sowie ptSEND_BUFFER legen soll und ob ich diese beiden überhaupt belegen muss, da ich ja nur auslesen will und selber keine Signale an die Schnittstelle senden will.
    Weiterhin weiss ich nicht, ob, und wenn ja, welche Ein-/Ausgänge der Klemme ich schalten muss, damit die Verbindung läuft.

    Genau das ist mein Problem. Ich habe eine WAGO 758-870 und möchte damit später eine spezielle Lampe steuern. Dafür möchte ich aber erst einmal den internen COM1 auf dem IPC lesen und schreiben können. Ich suche auch schon die ganze Zeit nach einem Programm, damit ich mir da evtl. die benötigten Infos entnehmen kann. Bisher ohne Erfolg.

    Gruß Hendrik

     
  • hwesbe - 2009-01-23

    Hallo,

    @Uwe: Danke für das Programm. Hat mich etwas weitergebracht. Ich hatte meinen Aufbau fast genauso. Außer ptSEND_BUFFER und iBYTES_TO_SEND.

    Da hatte ich falsche Werte eingesetzt.

    Hab aber noch eine Frage: Wie kann ich den Buffer (Text : String := 'ReadT') immer wieder mit anderen bzw. neuen Werten beschreiben die ich z.B. aus der Visu (Tasten) senden möchte?

    Gruß Hendrik

     
  • Uwe - 2009-01-23

    In unserem Beispiel ist dein Sendebuffer eine Stringvariable.

    Es könnte übrigens auch z.B. ein ARRAY[0..100] OF BYTE sein

    oder sonst irgendein Datentyp.

    In unserem Beispiel aber halt ein String.

    Daher können wir auch nur solche Zeichen (ASCII) versenden

    die in einem String zulässig sind.

    Diese Stringvariable kann man im Programm natürlich beliebig

    neu beschreiben, wenn sie nicht gerade versendet wird.

    Also zu deinen Tastern in der Visu :

    Ich würde in meinem Prog eine boolsche Variable z.B. "btnTaster"

    deklarieren und bei dem Taster in der Visu unter "Eingabe" einen Haken

    bei Variable toogeln setzen und im Textfeld dahinter mit

    der Taste "F2" auf meine Variable "btnTaster" browsen.

    Anschl. könnte man im Prog soetwas schreiben wie z.B.

    IF btnTaster and NOT StartSend THEN ( StartSend ist die Variable die am Interface-FB am Eingang xSTART_SEND anliegt )

    btnTaster := FALSE;

    Text := 'Neuer Text'; ( Text ist die Variable die auch an den Interfacebaustein übergeben wird )

    END_IF

    Es gibt sicherlich auch noch andere Lösungen aber ich würde es halt so machen.

    Gruß

    Uwe

     
  • hwesbe - 2009-01-23

    Hallo Uwe,

    habe folgendes zusätzlich eingebunden:

    0006 btnTaster:BOOL;

    0007 IF btnTaster AND NOT StartSend THEN

    0008 btnTaster := FALSE;

    0009 ELSE Text:= 'Neuer Text';

    0010 END_IF;

    Jetzt bekomme ich die Meldung:

    Fehler 3781: PLC_PRG (7):'END_VAR' oder Bezeichner erwartet.

    Fehler 3781: PLC_PRG (9):'END_VAR' oder Bezeichner erwartet.

    Fehler 3781: PLC_PRG (10):'END_VAR' oder Bezeichner erwartet.

     
  • Uwe - 2009-01-23

    Wo hast du das eingefügt ?

    Ich vermute im PLC_PRG im oberen Fenster !

    Das obere Fenster ist der Deklarationsteil.

    Dort werden nur Variable deklariert.

    Die Implementierung steht im unteren Fenster.

    Also deine Zeilen 7 bis 10 müssen dort oben wieder weg !

    In Zeile 9 ist das ELSE eh falsch.

    Ich vermute weiterhin das es dir schwer fällt den ST in dein

    Prog einzubauen da du vermutlich eher auf FUP stehst.

    Ich hab mal eine Variante mit einer "Aktion" in das Beispiel eingebaut

    und angehängt.

    Schönes Wochenende

    Uwe

    Beispiel_IPC_Serial_Interface_Onboard.pro [34.49 KiB]

     
  • chris07011985 - 2010-01-27

    Hallo,

    ich möchte den Thread gerne nochmal nach oben holen, weil meine Frage dazu ganz gut passt.

    Ich möchte mit dem IPC in Verbindung mit einem gesteckten Modul für serielle Kommunikaton (750-650) arbeiten.

    Für die Kommunikation nutze ich die LIB IPC_SERIAL_INTERFACE_01. In deren Dokumentation steht, dass die Nummer des Com-Ports des gesteckten Moduls über die Funktion SET_SERIAL_MODUL zugewiesen werdne muss.

    Die Funktion SET_SERIAL_MODUL erwartet nun allerdings als Eingangsparameter 2 Pointer, ein Pointer auf den Anfang des Moduls im PAE und ein Zeiger auf den Anfang des Moduls im PAA.

    Weiß jemand was PAA und PAE bedeutet ?

    Was muss für diese beiden Pointer angegeben werden ?

    Vielen Dank,

    christian

     
  • Nitrozin - 2010-01-27

    Hi,

    PAA = Prozessabbild Ausgänge

    PAE = Prozessabbild Eingänge

    Ich denke der Adresszeiger soll auf die entsprechenden

    Anfangsadressen des Moduls verweisen.

    Gruß Volker

     
  • chris07011985 - 2010-01-27

    Das habe ich bereits probiert. Habe dafür die Eingabeadresse und Ausgabeadresse des Moduls in der Steuerkonfiguration eingegeben. Leider ohne erfolg.

    christian

     
1 2 > >> (Page 1 of 2)

Log in to post a comment.