S7 rs232 cp340

xymoro

Level-1
Beiträge
29
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi

Ich programmiere momentan Kommunikation mit einer Pumpe die auf einen String, jeweils eine Antwort schickt.
Das schicken des Strings stellt keine Probleme dar. Beim Empfangen allerdings habe ich Probleme. Simuliere ich mit dem hyperterminal eine gesendete Antwort, sprich ein Zeichen, so wird dieses soeben getippte Zeichen nicht im das MW903 kopiert (vgl. Anhang).
Kann mir jemand hier weiterhelfen?

1. Muss ich den DB950 irgendwie initialisieren?
2. Kann ich einen DB beobachten? Wenn ich versuche diesen zu beobachten, kommt bei mir die Fehlermeldung, dass dieser nicht zum Beobachten geeignet ist.

Ich hoffe sehr, dass mir geholfen werden kann!

CPU Typ:315-2DP
Software: STEP7 V5.4 + SP4


Gruß
Jan
 

Anhänge

  • receive.JPG
    receive.JPG
    57,5 KB · Aufrufe: 94
Naja,

zuerst würde ich mal die Ausgänge des FB beschalten.

Dann kann man zumindest mal den Status / Fehlercode auswerten.

Adresse 288 korrekt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eigentlich gibt NDR an, dass neue Daten empfangen wurden. Das muss i.Ü. auch nicht nur ein Zeichen sein, sondern hängt von der eingestellten "Ende"-Kennung ab.
 
Wenn es mit Hyperterminal getestet werden soll geht nur ASCII, dazu muß das in der Hardware eingestellt werden.
Die Daten werden dann mit dem FB2 P_RCV empfangen.
Der EN_R sollte auf true stehen, solange nicht gesendet wird.

Wenn man mehr als ein Zeichen testen will, erstellt man eine kleine Datei.
Z.B. im Command.com, oder mit Notepad
Code:
Copy con Test.TXT   // Kopiere in Datei
MS01                       // Befehl der zu senden ist am Ende Enter
Dann mit F6 speichern
Diese in Hyperterminal "Übertragung->Textdatei senden" diese zur CPU schicken.

Wie Ralle schon bemerkt hat , gibt der NDR an ob Zeichen Empfangen wurde, dieses Signal steht nur für einen Zyklus auf true. Damit dann das Zeichen umkopieren, was aber Blödsinn ist, da du ja direkt dem DB ansehen kannst. Es geht aber nicht direkt in den String. Dazu muß der Empfang ab dem Byte 2 im String gelegt werden (Ist so schon vorhanden) , und mit dem NDR kopiert man LEN in das Byte 1 (DB950.DBB1) vom String.
 
Zuletzt bearbeitet:
Auch die Hilfe zum Baustein (Fokus auf den Baustein, dann "F1") hilft weiter.

Code:
EN_R    INPUT    BOOL    Freigabe für Daten lesen    
R    INPUT    BOOL    Auftragsabbruch    Laufender Auftrag wird abgebrochen, 
Empfang gesperrt.
LADDR    INPUT    INT    Basisadresse des CP 340    Adresse wird aus STEP 7 entnommen.
DB_NO    INPUT    INT    Datenbausteinnummer    CPU-spezifisch (nicht 0), Empfangs-DB
DBB_NO    INPUT    INT    Datenbytenummer    0 <= DBB_NO <= 8190, Empfangsdaten ab Datenbyte
NDR    OUTPUT    BOOL    Auftrag fertig ohne Fehler, Daten übernommen    Parameter STATUS == 16#00
ERROR    OUTPUT    BOOL    Auftrag fertig mit Fehler    Parameter STATUS enthält die Fehlerinformation.
LEN    OUTPUT    INT    Länge des empfangenen Telegramms    1 <= LEN <= 1024, Angabe in Anzahl Byte
STATUS    OUTPUT    WORD    Spezifikation des Fehlers    Bei ERROR == 1 steht im Parameter STATUS die Fehlerinformation.
 
Zu Frage 2:

Versuche mal den DB ONLINE ( also in der CPU ) zu öffnen und dann in die Datensicht zu wechseln.

Aktualisieren geht dann über "F5".
 
Ein DB in dem nur ein String enthalten ist kann nicht online beobachtet werden. Sobald eine andere Variable im DB deklariert ist kann man online beobachten.
Allerding werden Strings im DB nicht angezeigt. Mach eine Variablentabelle auf und trage die Bytes einzelnd ein, die ersten beiden Bytes auf dezimal der rest auf zeichen.
 
Den DB Online öffnen, dann werden Strings angezeigt.
(Nicht nur mit "Brille" online gehen)
Mit F5 aktualisieren.
 
Zurück
Oben