S7-200 2xRS232 Waagen anschließen

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss leider die 1. Methode nehmen. Wenn die Waage zyklisch sendet, (Mettler-Modus) sendet sie mir ihren Waagenwert mit 1 Stelle hinter dem Komma (Normierung Mettler) zu. Das hatte ich schon ausprobiert und funktionierte auch schon.

Wenn ich stattdessen aber die Waage anspreche, sendet sie mir direkt ihren kompletten Waagenwert mit 3 Stellen hinter den Komma zu. Die Messung muss sehr genau sein, daher benötige ich diese Variante!

Hast du ein Programm-Beispiel für die Wartezeit bis die S7 die Zeichenkette der Waage erhält?
S7 sendet --> Wartezeit --> S7 Empfang

Gruß
Syny
 
rs232

Hi,
hab jetzt kein Microwin hier...
warum Wartezeit, es wird doch ein Interrupt aufgerufen, wenn was
empfangen wurde, oder?

V.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hatte mir mal ein Y Kabel gebastelt


----------- 9-Polig SubD (SPS)
(Lausch Pc) 9-Polig SubD ------<
----------- 9-Polig SubD (Waage)
(Irgend wo waren auch noch Dioden drin... Wenn du willst schau ich mal
nach, ob ich den Aufbau noch habe)

Ich würde einmal das Protokoll mit Hyperterm senden und Empfangen
und beim 2. Mal mit der SPS. Dabei auch Hyberterminal (Lausch Pc)
mitlaufen lassen. Dann kannst du die beiden Dateien mit KDiff vergleichen
und solltest eigentlich schnell sehen können, wo der Fehler liegt.

Viel Erfolg bei deinen Versuchen, MeTh.
 
Hi,
warum Wartezeit, es wird doch ein Interrupt aufgerufen, wenn was
empfangen wurde, oder?

V.

Ahh... ok. Ich glaube jetzt hab ich es verstanden ! Ich probier mal etwas aus...

MeTh
Ich würde einmal das Protokoll mit Hyperterm senden und Empfangen
und beim 2. Mal mit der SPS.


Mit Hyperterminal habe ich es schon gesendet und empfangen. Funktioniert einwandfrei. Ich scheitere an meinen Programm-Aufbau, da ich noch nie so eine Zeichenkette über eine RS232 versendet habe.
Aber sonst ist deine Idee gut. Danke, aber du brauchst das Y-Kabel nicht herauszusuchen.
Ich benötige eher beim Programmaufbau Unterstützung.

Gruß
Syny
 
Rs232

Hallo Kollege,
nur mal so für zwischendurch:RS232 Übertragung.
Die zwei(oder mehr) Stationen sind mit einem RS232 Kabel verbunden, im einfachsten Fall mit 3 Adern: Sende, Empfang und Masse Leitung. Die Stationen haben je ein IC(Baustein), der das RS232 Protokoll kann, und sendet und empfängt selbsständig die Zeichen(Bytes), sobald die Baudrate richtig eingestellt ist(9600, 19200 usw.). Die RS232 Bausteine haben immer ein Sende und Empfangspuffer, wo die Informationen zwischengespeichert werden. So, jetzt sendet die eine Station etwas;
die zweite Station empfängt die Zeichen nacheinander, die stehen in dem Empfangspuffer...bis alle Zeichen da sind, dauert es eine Weile, je nach Baudrate. So, die zweite Station sagt normalerweise dem Anwender durch ein Event oder Interrupt: hallo, da empfange ich was..und er liest den Empfangspuffer aus(er wird geleert). Wenn noch was dazu kommt, muss man es aus dem Puffer wieder rausholen. Ob das alles ist, erkennt man an den spez.definierten Telegramm "Start" und "End" Zeichen.
Wenn ich was senden will, schiebe es in den Sendepuffer und das RS232
Modul versendet es weiter..
So funzt das..

Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe mal wieder mich mit meiner Waage beschäftigt.

Und zwar habe ich meinen zusendeten Befehl in einen DB abgelegt (siehe Datenbaustein.jpg). Die Anzahl zusendeten Zeichen müssen in Hex programmiert werden. Die Zeilenschaltung "<CR>" und "<LF>" müssen ebenfalls in Hex programmiert werden. Wenn ich diese als Dezimal programmiere, erkennt der andere Teilnehmer diese Zeichen nicht als Sonderzeichen an und nimmt diese als Nutzdaten.
Ich habe das in Hyperterminal mir angeschaut. Mit Dez. zeigt er mir CR und LF im Hyperterminal an und als Hex springt er 2 Zeilen nach dem zusendeten Befehl.

Wenn ich vom Hyperterminal den Befehl ohne CR oder LF sende, erhalte ich trotzdem den Waagenwert, da das Hyperterminal automatisch bei jeden zu sendeten Befehl ein "CR" dahinterschreibt. Also habe beides ausprobiert CR und inkombination CR und LF.
Bei CR erhalte ich ein Telegramm. Aber was sind denn das für Nutzdaten (siehe Waage_steuern_nur_Befehl)? Den Abschluss 0D = 13 (<CR>) erkenne ich. Im Hyperterminal funktioniert das ja einwandfrei und nach jeden Befehl "IN_PV_17" erhalte ich meinen Waagenwert.

Wo liegt mein Fehler? Achja die Waage reagiert nicht auf jedes Telegram was ich ihr zu sende (über SPS). Habe da schon mit der Baud. rumgespielt. Wenn ich über Hyperterminal ein Befehl sende, sendet die Waage immer ihren Wert.

Wenn ich ein Telegram sende, empfange ich es gleich (RX/TX LED blinken). Die Wartezeiten habe ich schon rumexperimentiert. Wo und an welcher Schraube muss ich denn noch drehen?

Gruß Syny
 

Anhänge

  • Datenbaustein.JPG
    Datenbaustein.JPG
    114,6 KB · Aufrufe: 14
  • Zeichenkette gesendet und empfangen3.JPG
    Zeichenkette gesendet und empfangen3.JPG
    195,1 KB · Aufrufe: 16
  • Waage_steuern1.JPG
    Waage_steuern1.JPG
    172,4 KB · Aufrufe: 17
  • Waage_steuern2.JPG
    Waage_steuern2.JPG
    154,5 KB · Aufrufe: 13
  • Waage_steuern3.JPG
    Waage_steuern3.JPG
    170,9 KB · Aufrufe: 12
noch die 2 weiteren Interrupts + ein Bild wie das Telegram aussieht, wenn ich dieses an das Hyperterminal sende (Zeilensprung wurde auch durchgeführt)
 

Anhänge

  • Waage 006.JPG
    Waage 006.JPG
    160,4 KB · Aufrufe: 8
  • Waage 007.JPG
    Waage 007.JPG
    156,6 KB · Aufrufe: 6
  • Befehl nach Hyperterminal gesendet.JPG
    Befehl nach Hyperterminal gesendet.JPG
    35,5 KB · Aufrufe: 10
Wie macht man ein STRING?:
Z.B. ab Adresse VB200:
MOVB 12, VB200 // Anzahl zu versend. Bytes
MOVD 'IN_P', VD201
MOVD 'V_AM', VD205
MOVB 32, VB209
MOVB 13, VB210
MOVB 32, VB211
MOVB 10, VB212

Hallo,

bei der 200er reicht glaube ich um eine Zeichenkette zu erstellen ein "Längenbyte". Ein richtiger String hat aber glaube ich 2 Vorzeichen, oder?

Sorry, hab mir das noch mal kurz durchgelesen, damit ich das Projekt wieder im Kopf hab, da ist mir das halt aufgefallen.

Noch mal mit dem Mitloggen:
du kannst doch mal ein Screenshot vom Hyperterminal machen von:

--> Hyperterminal sendet an Waage
--> SPS sendet an Hyperterminal

Dann sollte man das doch sehen können, was da noch fehlt.

Hoffe es hilft.

Solchen Problemen, wo man einfach nicht weiterkommt sind echt demotivierend aber du bekommst das schon noch hin...

LG und viel Erfolg, MeTh.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
--> Hyperterminal sendet an Waage
--> SPS sendet an Hyperterminal

Hallo MeTh,

beides hatte ich schon ausprobiert. Daher habe ich meinen Stand mal hier gepostet, da

--> Hyperterminal sendet an Waage
IN_PV_17

--> SPS sendet an Hyperterminal
IN_PV_17 (siehe Screenshot 3 letzter Beitrag von mir)

Das heißt, beides mal sind es Identische Befehle + das ich die "Return-Taste" ASSCI-Code Dez. 13 aka <CR> erfüllt habe.
D.h. mein Befehl IN_PV_17 springt er danach im Hyperterminal in die 2.Zeile (Endezeichen)

Theroie:
MoveB 13, VB311
Wie ich schon oben meinte, wenn man so die Sonderbefehle in die SPS schreibt als Dezimalzahl, dann erkennt die SPS bzw. die Waage das nicht als Sonderzeichen <CR> und im Hyperterminal sieht man dann

--> SPS sendet an Hyperterminal
IN_PV_17_1310 (CR und LF) <--- nächster Zeilensprung wurde nicht ausgeführt!

Der Befehl ist denke ich richtig, aber fehlt noch ein anderes Telegram im kompletten Telegram, was das Hyperterminal automatisch erzeugt, da es ja über das Hyperterminal funktioniert?

Ein richtiger String hat aber glaube ich 2 Vorzeichen, oder?
Ähh 2 Vorzeichen? Also die Anzahl der zusendeten Byte's gibt man an. Online habe ich ja ein Screenshot gemacht, wie es aussieht im Puffer VB500, da steht 08 Nutzzeichen. Das wird automatisch erzeugt durch die Kennzeichnung des Strings "VB502 'IN_PV_17' <--- = 8 Nutzdaten

Meintest du das? Irgendwo muss denke ich noch etwas rein. Nur was?

Gruß
Syny
 
Zuletzt bearbeitet:
Hallo
las zwar jetzt auf die Schnelle nicht alle Beiträge und habe noch nie was mit Waagen gemacht aber die reine Ascii-Übertragung hat normalerweise in HT zumindest beim Zeichenende zwei Dreher drin.
Wie das genau war weiss ich nicht mehr weil ich mir aus eben diesem Grunde dann eigene Terminals in Delphi programmierte wo ich das einstellen und erkennen kann was gesucht ist. Und seit Jahren nur die benutze.
'CRLF' kann entweder als CHR(10)CHR(13) Hex==OAOD, oder 0D0A CHR(13_10) auftauchen. Ob Hex, Dec. oder Binär versendet ist dabei vollkommen egal weil die Bytes immer als Ascii Zeichen interpretiert werden.
Vielfach ist es aber so dass in der S7-200 Meldungseinstellung CR als Meldungsende interpretiert wird - LF käme in dem Fall gar nicht mehr an. Aus dem Grunde muss das entweder im SMB18xxx irgendwas passend konfiguriert sein oder LFCR gesendet werden. Hyperterm konnte meine ich mich zu erinnern beides - also CRLF oder LFCR. Deswegen ging da vieles was sonst nie funktioniert :rolleyes:Windows kann normal nur eins (bei mir zumeist dec: 10_13) und was die Waagen können weiss ich nicht. Die Möglichkeiten must du mal durchprobieren - sind sechs Stück von denen es eine sicher ist:
in dec:
10_13
13_10
13_13
10_10
10_nix
13_nix
 
Hallo
las zwar jetzt auf die Schnelle nicht alle Beiträge und habe noch nie was mit Waagen gemacht aber die reine Ascii-Übertragung hat normalerweise in HT zumindest beim Zeichenende zwei Dreher drin.

sind sechs Stück von denen es eine sicher ist:
in dec:
10_13
13_10
13_13
10_10
10_nix
13_nix

Hallo Tobias,

ich habe die Zahlendreher mal ausprobiert. Auf einmal zeigt mir die S7 auch Dezimal die Sonderzeichen an!? Aber schau dir mal an, wie die S7 aufeinmal von Hex auf Dez die Sonderzeichen dreht. Da wird der Platzhalter gedreht.

Hex
$00$0D$00$0A
Dez
$0D$00$0A$00

Die 00 ist ja irgendwie ein Platzhalter für ein kommendes Sonderzeichen?!Ich muss anfangs sagen es kommen 14 Zeichen. Bei 12 Zeichen schneidet die S7 das letzte Sonderzeichen ab.
IN_PV_17 = 8 Zeichen
LF und CR = _13_10 = 6 Zeichen
Ich denke der Platzhalter ist die 00.

Irgendwo anderst muss aber noch der Fehler sein, da es leider nicht funktioniert. Mich würde mal interessieren wie das telegram bei dem Hyperterminal aussieht, wenn es sendet.

Gruß
Syny
 

Anhänge

  • CR und LF als Dez.JPG
    CR und LF als Dez.JPG
    179,1 KB · Aufrufe: 8
  • CR und LF als Dez2.JPG
    CR und LF als Dez2.JPG
    113,1 KB · Aufrufe: 6
  • CR und LF als Hex2.JPG
    CR und LF als Hex2.JPG
    113,7 KB · Aufrufe: 2
  • CR und LF als Hex.JPG
    CR und LF als Hex.JPG
    179,2 KB · Aufrufe: 4
Zuviel Werbung?
-> Hier kostenlos registrieren
-

Hallo Kollege,
lange Ausprobiererei...
Also:
Wenn Du über HyperTerm. die Waage abfragen kannst, indem du
IN_PV_17 schreibst und "Enter" drückst
so muss man das gleiche aus der SPS ja senden.
Ist bei HyperTerm. bei "ASCII Konfiguration" noch eingestellt, das er LF am Ende anhängt? Wenn ja, dann muss die SPS zum Schluss CRLF senden.
(wobei in der Doku stand, das die Befehle mit <SP CR SP LF> abgeschlossen werden müssen :confused:), SP ist "Leerzeichen".
Wenn du ab VB500 sendest, dann müsste das Ganze doch so aussehen:

VB500 10 // Anzahl Zeichen
VB501 'IN_PV_17' // Befehl
VW509 16#0D0A // Abschluss

Gruss: V.
 
Zuletzt bearbeitet:
Hallo Vladi,

das ist ja unglaublich. Es funktioniert!!! Ich habe so viel verschiedenes ausprobiert und mein Fehler lag an dem Hochzeichen. Ich hatte es immer mit " = Zeichenkette probiert und bei Null-Modem-Kabel oder anderes die Fehler gesucht. Das man aber ' = ASCCI Konstante dafür verwendet, da kam ich nicht drauf.

Super, danke.

Der Waagenwert erhalte ich nun, jetzt habe ich aber noch das Problem, dass meine SPS nicht mehr auf Leerlauf umschaltet, damit ich wieder ein Befehl senden kann. Ich habe ein paar Sachen ausprobiert, aber leider schaltet mein SMB86.5 (Endezeichen empfangen) nicht um.
Die Schnittstelle habe ich ja so definiert, das das Endezeichen (Empfangswert) mit dem Endezeichen (eingetragener Wert in SMB89) verglichen wird und somit die SPS wieder auf Leerlauf schalten sollte. (sieht man im 3.Bild)

Ich habe mal Online-Screenshots gemacht und etwas dazugeschrieben, da man dort deutlich sieht, das die SPS das Endezeichen schon erkennt, aber nicht umschaltet. Warum?

Gruß
Syny
 

Anhänge

  • Waagenwert erhalten_Störung2.JPG
    Waagenwert erhalten_Störung2.JPG
    177,6 KB · Aufrufe: 9
  • Waagenwert erhalten_Störung3.JPG
    Waagenwert erhalten_Störung3.JPG
    192,6 KB · Aufrufe: 8
  • Waagenwert erhalten_Störung4.JPG
    Waagenwert erhalten_Störung4.JPG
    165,9 KB · Aufrufe: 7
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe ein paar Sachen ausprobiert, aber leider schaltet mein SMB86.5 (Endezeichen empfangen) nicht um.
Hallo
habe kein Handbuch hier und bin nicht sicher ob SM86 die Statusbits sind. Wenns die aber sind, fiel ich da zuerst auch drauf rein, in Statusanzeige ändert sich nichts weil die nur in dem (einen) Zyklus gesetzt sind wo die Meldung endet (quasi Wischer). Je nachdem wie die Reihenfolge im Listing steht muss es dann über ein Zyklusende gesichert werden, dann geht das.

Ungefähr so:
Wenn Statusbit 'fertig' - setze M1.0
Wenn M1.0 Schnittstelle von Senden auf Empfang zurückstellen und Reset M1.0
// wichtig ist dabei die Umschaltung einen ganzen Zyklus 'durchdrehen' zu lassen, damits übernommen wird.

Dann kommts immer noch etwas auf die Adapter an wenns von RS485 auf RS232 geht. Die Siemens PPI-Adapter schlucken evtl. 2-Zeichen, bzw. benötigen 4-5ms Umschaltzeit. Wenn die Antwort vom sendenden Gerät zu schnell kommt geht evtl. je nach Adaptertyp was verloren. Normalerweise passt das aber :rolleyes:
 
Zurück
Oben