# S7-200 2xRS232 Waagen anschließen



## Syntaxfehler (16 Mai 2008)

Hallo zusammen,

ich möchte mit einer S7-200 (6ES7 216-2AD23-0XB0) zwei Waagen über RS232 Steuern/Auslesen. 
An dieser CPU ist auf der 1.Schnittstelle das Touch Panel TP177 angeschlossen.

Wie kann ich nun von der 2.Schnittstelle die zwei Waagen steuern?

Gruß
Syny


----------



## gravieren (17 Mai 2008)

> Wie kann ich nun von der 2.Schnittstelle die zwei Waagen steuern?


Waagen identisch ?  --> Ja, manueller Umschalter.

Umschalter gibt es auch mit "Relaise", die die SPS umschalten kann.




Ist das ein "kleineres" Projekt ?

So mit 2 Waagen, die man mal schnell "unterm Arm" woanders hintragen kann.

ODER etwas anspruchvolleres ?
Dann empfehle ich S7-300 mit Siwarex.


----------



## Syntaxfehler (18 Mai 2008)

Hallo gravieren,

ist es so, das ich immer nur 1 Waage auslesen/steuern möchte, da es sich um 2 verschiedene Endprodukte handelt.

Beide Waagen sind identisch und werden fest an einen Ort installiert.

Ich habe einwenig gegoogelt, aber noch kein Relais gefunden mit der ich per SPS die Waagen umschalten kann.

_Alle Befehle und die Antworten werden mit <SP><CP><SP><LF> (ASCII-Wertigkeiten 32,13,32,10) abgeschlossen._

Hast du ein ein Beispiel wie ich im ASCII Code die Waage steuern/auslesen kann?

Gruß
Syny


----------



## gravieren (18 Mai 2008)

Vorweg, ich verwende hautsächlich die S7-300/400


Erste Anlaufstelle:
Klicke auf Kommunikation  ! ! ! 
Dann erhälts du ausreichen Informationen.

http://www.automation.siemens.com/microset/html_00/support/tipps/index.htm?HTTPS=REDIR








Grundsätzliches:

https://support.automation.siemens....tion=cssearch&searchinprim=&nodeid99=&x=0&y=0





Example mit GPS.

https://support.automation.siemens....tion=cssearch&searchinprim=&nodeid99=&x=0&y=0


----------



## gravieren (18 Mai 2008)

Achso Umschaltung auf 2 Schnittstellen.

Ich habe auf die schnelle nichts gefunden.

Ein Relaise 24Volt  mit 4 Goldkontakten denke ich macht das gleiche und noch billiger.


Teste erst mal 1 Gerät, bei Funktion rühre dich hier nochmals.


----------



## Syntaxfehler (18 Mai 2008)

gravieren schrieb:


> Vorweg, ich verwende hautsächlich die S7-300/400


 
Ich verwende auch hauptsächlich die S7-300/400. Die Kommunikation über ASCII Code hatte ich bis jetzt auch noch nicht programmiert, daher bin ich sehr dankbar für jede Hilfe. 
Funktioniert der SFC216 und 217 auch auf meiner S7-CPU226? Kann mir jemand den Baustein schicken?

http://www.sps-forum.de/showthread.php?t=16658&highlight=ASCII+Code

Gruß
Syny


----------



## mr__mines (18 Mai 2008)

Das geht bei der S7-200 mit dem RCV (empfangen) und dem XMT (senden) Befehl.
Umschalten mit Relaise mußt du probieren. Wenn geht, dann sicherlich am günstigsten. Kommt mir aber komisch vor. 

PPI/RS 232 Kabel brauchst du auch noch.

BESSER: Du könntest mit dem MPI BUS, auf welchem das HMI draufhängt, auch noch zu einer CPU 224XP weiterfahren. Diese macht dann über die 2te Schnittstelle die Komunikation mit der 2ten Waage. Werte dann über MPI zurück an die CPU 1.


----------



## Syntaxfehler (18 Mai 2008)

mr__mines schrieb:


> BESSER: Du könntest mit dem MPI BUS, auf welchem das HMI draufhängt, auch noch zu einer CPU 224XP weiterfahren. Diese macht dann über die 2te Schnittstelle die Komunikation mit der 2ten Waage. Werte dann über MPI zurück an die CPU 1.


 
Da geb ich dir Recht. Schöner wäre es Siemens hätte einen Schnittstellenerweiterungs-Modul, den ich an meine CPU anbinden kann.

Gruß
Syny


----------



## Syntaxfehler (21 September 2008)

So, ich habe nun die Waagen erhalten und diese an eine S7-200 CPU226 (6ES7 216-2AD23-0XB0) angeschlossen.

Ich erhalte an der S7-200 Werte (irgendwelche Zeichenketten) von der Waage. Nur kann ich diese nicht richtig wandeln. Ich habe mir auf der Siemens Seite den Tip52 gedownloaded. 
Die Bausteine XMT und RCV benötige ich, nur was fehlt noch alles?

Wie wandel ich eine Real-Zahl z.B. "150,06g" in eine Zeichenkette um? Das wären doch pro Ziffer bzw. Komma ein Zeichen?
Und wie sende ich das zur Waage? Hintereinander? Oder in einer Zeichenkette?

Anbei die Doku von der Waage.

Gruß
Syny


----------



## vladi (22 September 2008)

*Strings..*

Hallo,

die empf. Zeichenkette kann direkt umgewandelt werden:
MicroWin Hilfe:
"...Die Operation *STR* wandelt Zeichenketten mit dem folgenden Format um:
[Leerzeichen] [+ oder -] [Ziffern 0 - 9] [. oder ,] [Ziffern 0 - 9] ".

Die Befehle für die Waage werden genauso als String gesendet, und zwar den entspr. Befehl + Telegrammabschluss. In den Beispielen ist die Hantierung gut beschrieben.

V.


----------



## Syntaxfehler (24 September 2008)

Vladi,
ich habe es nochmal probiert. Mit dem Baustein STR hatte ich es auch schonmal vergeblich probiert. Wie kann ich denn "erstmal" den aktuellen Waagenwert auslesen?
Ich hatte (siehe 2 Beiträge drüber) eine Bedienungsanleitung hochgeladen. 
Dort steht der Befehl, den ich der Waage zusenden muss, um dann z.b. meinen Waagenwert zu erhalten.

Wie geht denn das erstmal? Und wie füge ich aus einer Zeichenkette, diese einzelnen Werte wieder zusammen (spich meinen aktuellen Waagenwert)?

Mit einer Zeichenkette hatte ich noch nie zu tun und ich bräuchte mal hier von einen Programmier-Genie ein Beispiel wie so ein komplettes Programmbeispiel aussehen würde!

Im voraus Danke !

Gruß
Syny


----------



## vladi (25 September 2008)

*Waage*

Hallo Kollege, :
1) Aktl. Waagenwert auslesen:
in der o.g. Bed.Anleitung steht nichts von aktl. Waagenwert, es gibt ein Wert "schon dosierte Menge"; das kann man abfragen mit dem Telegramm:
"IN_PV_AM <SP><CR><SP><LF>"  (das ist ein STRING, oder deutsch: Zeichenkette)
Die Zeichen "<SP><CR><SP><LF>" sind immer der Abschluss des Telegramms.

Der o.g. String muss an die Waage gesendet werden, die antwortet dann mit:
"001234<SP><CR><SP><LF>", wobei 001234 ist das Gewicht in mg.
Diese Antwort: "001234<SP><CR><SP><LF>" (STRING) kann mit der schon erw. Funktion *STR* in eine Realzahl umgewandelt werden, da müsste rauskommen *1234.0*.
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

D.h., das kannst jetzt senden:
XMT    VB200, 0                    // String senden. Sendepuffer ist ab VB200
Empfangen geht mit(wird normal im Interrupt aufgerufen):
RCV    VB300, 0                    // String empfangen, Daten stehen ab VB300
Jetzt würde dein Gewicht ab VB301 drin stehen, dann:
STR    VB301, 0, VD10  // in VD steht jetzt der Wert als REAL

Die Programmstruktur sieht so aus:
- einmalig beim Start die Schnittstelle parametrieren
- Empfangs-Interrupt freigeben und definieren
- Anfrage an Waage senden..
- Empfangsinterrupt kommt: Daten von der Waage auswerten
- wieder abfragen...

Ich habe keine Zeit, um das Ganze dir zu programmieren; die Beispiele von Siemens sind aber gut, da muss man durch .

V.


----------



## Helmut (25 September 2008)

Hallo,

wenn du das hast, dann ein Tip von mir:

Wenn du an beiden Onboard Schnittstellen deine Waagen mittels ASCII (Freeport) verbunden hast, dann kannst du für das Panel auch ein EM277 verwenden. An einem EM277 funktionieren auch die Panels und ein PC gleichzeitig.

Gruss

Helmut


----------



## Syntaxfehler (15 Oktober 2008)

@Vladi

Ich kann über den "Mettler-Modus" den aktuellen Wert der Waage erhalten. Dazu sendet die Waage mir ständig ihren Wert zu. 

Die Variante das ich die Waage ansteuer und nur den dosierten Wert erhalten kann, ist für die weiteren Programmablauf nicht so günstig. Ich bin daher von dem steuern der Waage abgekommen und will im "Mettler-Modus" diese betreiben.

Ich habe das Beispiel von Siemens benutzt (siehe *.pdf).

Jetzt versuche ich die Zeichenkette zu wandeln, erhalte aber keine plausiblien Werte. Ich habe mal Online ein Screenshot gemacht. Ich wundere mich über so viele Zeichen die dort ankommen?

Liegt das am Programm?

Danke
Gruß
Syny


----------



## Helmut (15 Oktober 2008)

Hallo,

häng dochmal anstelle der CPU dein PC mit Hyperterminal an und vergleiche ob das dann stimmt. Dann kannst du auch die Info die du brauchst finden.

Gruss

Helmut


----------



## Syntaxfehler (21 November 2008)

vladi schrieb:


> Z.B. ab Adresse VB200:
> MOVB   12, VB200   // Anzahl zu versend. Bytes
> MOVD   'IN_P', VD201
> MOVD   'V_AM', VD205
> ...



Hallo,

Ich habe mich mal wieder mit meiner Waage beschäftigt. Also Vladi nach deiner Lösung klappt das wohl nur bei S7 300/400er Serie. Bei der 200er Serie zeigt S7 mir fehler an, wenn ich als Doppelword MOVD "IN_P" schreibe.

Mit dem Hyperterminal klappt das einwandfrei, das ich ein Befehl sende und meinen Waagenwert empfange.

Also am 1.Pic stelle ich meine Schnittstelle ein, 9600baud. usw. wie im Siemens-Beispiel.
Ich habe folgende Variante mal ausprobiert. Nur glaube ich scheitere ich an der Request-Zeit?! Ich glaube so etwas muss doch da noch dazwischen?!  

Das komische an meiner Variante ist, das ich 2x die Zeichen ab VB201 lade. Deswegen hatte ich im NW2 nach dem Zeichen ins VB201, nur die ersten 14 Zeichen des VB201 weitergesendet.

Kann mir da jemand weiterhelfen, wie ich meinen String mal endlich senden und empfangen kann?

Gruß
Syny


----------



## thomass5 (21 November 2008)

da gibts doch von Siemens so ein Beispielprojekt in welchem über die schnellen digitalen eingänge werte der seriellen Schnittstelle eines Conrad Temperaturmoduls gelesen werden.
vielleicht hilft das ja etwas weiter.
Thomas


----------



## vladi (21 November 2008)

*Waage*

Hi Kollege,
war lange nicht online..
So, du sendest mit XMT ab Adresse VB2001...muss da nicht zuerst die
Anzahl der Bytes stehen, die versendet werden sollen? Also z.B. die Zahl der Bytes in VB2000
schreiben, dann mit XMT ab VB2000 bearbeiten(dein Telegramm steht drin nachwievor ab VB2001). 

V.


----------



## Syntaxfehler (22 November 2008)

Hi Vladi,

das dachte ich auch, nur wenn ich über Hyper Terminal die Waage anspreche, schreibt mir das Hyper Terminal automatisch die Anzahl der Zeichen davor, wenn ich diese darüber versende? Weil dort schreibe ich ja auch nur meinen Befehl (ohne Anzahl der Zeichen) zur Waage.

Weil das dort ja funktionierte, dachte ich das meine Waage keine Anzahl Zeichen benötigt. Ich probier das montag gleich mal aus... aber ich glaube das hatte ich schon ausprobiert.

Ich möchte ständig kontinuierliche Waagenwerte haben. Könnte es daher eher sein, das die SPS 1x Befehl schreibt --> dann z.b. 5ms warten ---> auf Waagenwert empfangen, danach wieder den Befehl senden. Wie bekomme ich denn diese schleife hin?


Gruß
Syny


----------



## vladi (22 November 2008)

*Rs232*

Hi,
HyperTerminal ist was anderes, aber die Sende/Empfang Funktionen der SPSen brauchen u.u. ihre eigene Einstellungen(steht auch in der Beschreibung der Befehle un in den Beispielen).
Kontinuierlich lesen: da gibt es zwei Methoden:
-Waage abfragen-Wert empfangen-Waage abfragen-empfangen..zyklisch
oder
-Waage konfigurieren auf "dauernd senden", und dann nur auf
Empfang warten(da wird ein Interrupt ausgelöst) und die Telegramme
auswerten. 

Normalerweise ist RS232 nicht so kompliziert, man muss aber einmal verstehen wie das ganze geht.   wird schon klappen..
Ab Montag bin ich weg, erst am WE dann wieder..

Vladi


----------



## Syntaxfehler (22 November 2008)

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


----------



## vladi (22 November 2008)

*rs232*

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

V.


----------



## MeTh (22 November 2008)

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.


----------



## Syntaxfehler (23 November 2008)

vladi schrieb:


> 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


----------



## vladi (23 November 2008)

*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


----------



## Syntaxfehler (18 Februar 2009)

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


----------



## Syntaxfehler (18 Februar 2009)

noch die 2 weiteren Interrupts + ein Bild wie das Telegram aussieht, wenn ich dieses an das Hyperterminal sende (Zeilensprung wurde auch durchgeführt)


----------



## MeTh (18 Februar 2009)

vladi schrieb:


> Wie macht man ein STRING?:
> Z.B. ab Adresse VB200:
> MOVB 12, VB200 // Anzahl zu versend. Bytes
> MOVD 'IN_P', VD201
> ...


 
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.


----------



## Syntaxfehler (18 Februar 2009)

MeTh schrieb:


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



Hallo MeTh, 

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



MeTh schrieb:


> --> Hyperterminal sendet an Waage


IN_PV_17



MeTh schrieb:


> --> 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



MeTh schrieb:


> --> 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?



MeTh schrieb:


> 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


----------



## tobias (18 Februar 2009)

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 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


----------



## Syntaxfehler (19 Februar 2009)

tobias schrieb:


> 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:
> ...


 
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


----------



## vladi (19 Februar 2009)

*-*

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 ), 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.


----------



## Syntaxfehler (21 Februar 2009)

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


----------



## maxi (21 Februar 2009)

Geht die Schnitstelle den nicht auf RS485?
Die meisten Waagen können auch RS485


----------



## tobias (21 Februar 2009)

> 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


----------



## dabreit (17 Dezember 2014)

Ich hab eine Frage, kann ich bei meiner Satoriuswaage ähnlich vorgehen?

http://www.sartorius.de/fileadmin/f...s/Lab-Weighing/OEM/Manuals/MAN-WZA...-L-d.pdf


----------

