Synaser Verbindungsaufbau

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Synaser Verbindungsaufbau

Beitrag von l0lhaxx »

Hallo zusammen,

ich möchte meine Digitalwaage ansteuern. Ich bekomme aber leider keinen Verbindungsaufbau zustande.
Der COM-Port und die Initialisierung sollten richtig sein.

Code: Alles auswählen

 
 ser:=TBlockSerial.Create;
 ser.Purge;
 ser.Connect('COM1');
 Sleep (1000);
 ser.config(19200, 8, 'N', SB1, True, False);
 
Als Handshake ist Xon / Xoff konfiguriert.
Anschließend versuche ich mit dem Command "Z" (Steht in der Bedienungsanleitung) die Digitalwaage zu Nullen. Leider macht dies die Digitalwaage aber nicht...

Code: Alles auswählen

 
ser.sendstring('Z'+chr(13));    
 
Das Format wird im folgenden Abschnitt im Benutzerhandbuch wie folgt beschrieben:

2.1 Command formats
Commands sent to the balance comprise one or more characters of the ASCII character set.
Here, the following must be noted:
• Enter commands only in uppercase.
• The possible parameters of the command must be separated from one another and from
the command name by a space (ASCII 32 dec., in this description represented as /).
• The possible input for "text" is a sequence of characters of the 8-bit ASCII character set from
32 dec to 255 dec.
• Each command must be closed by CR
LF
(ASCII 13 dec., 10 dec.).
The characters CRLF, which can be inputted using the Enter or Return key of most entry
keypads, are not listed in this description, but it is essential they be included for communication
with the balance.

Hat jemand eine Ahnung was ich falsch mache?
Es handelt sich bei der Digitalwaage um eine Mettler Toledo PB 602.

Vielen Dank vorab!

Gruß l0lhaxx

Linkat
Lazarusforum e. V.
Beiträge: 560
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: Synaser Verbindungsaufbau

Beitrag von Linkat »

Hallo lolhaxx,
ich habe die Erfahrung gemacht, dass abhängig von den angeschlossenen Geräten die Zeit (sleep) kritisch ist. Ich musste häufig vor oder nach dem Befehl ein

Code: Alles auswählen

sleep(100);
bis

Code: Alles auswählen

sleep(500);
einführen.

Viel Erfolg
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Bitschubser
Beiträge: 61
Registriert: Mo 27. Aug 2012, 15:43

Re: Synaser Verbindungsaufbau

Beitrag von Bitschubser »

l0lhaxx hat geschrieben:

Code: Alles auswählen

 
ser.sendstring('Z'+chr(13));    
 
[...]

• Each command must be closed by CRLF (ASCII 13 dec., 10 dec.).
Hast du's denn auch mal mit CRLF probiert?

l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Synaser Verbindungsaufbau

Beitrag von l0lhaxx »

Linkat hat geschrieben:Hast du's denn auch mal mit CRLF probiert?
Ja. Wie folgt, funktioniert aber auch nicht

Code: Alles auswählen

 
ser.sendstring('Z'+chr(13)+chr(10));
 
Linkat hat geschrieben:Hallo lolhaxx,
ich habe die Erfahrung gemacht, dass abhängig von den angeschlossenen Geräten die Zeit (sleep) kritisch ist. Ich musste häufig vor oder nach dem Befehl ein

Code: Alles auswählen

sleep(100);
bis

Code: Alles auswählen

sleep(500);
einführen.

Viel Erfolg
Danke für den Tipp. Ich befürchte das es allerdings nicht die Lösung des Problems ist. Versuchen kann man es aber mal :)

l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Synaser Verbindungsaufbau

Beitrag von l0lhaxx »

Hatte einen Schreibfehler drin :evil:
Funktioniert doch mit CR / LF

Allerdings kann ich den Respons nicht auswerten. Bekomme die Daten nicht eingelesen....
Die Abfrage läuft in einer Timerschleife. Mit anderen Digitalwaagen hat das schon super funktioniert....

Code: Alles auswählen

 
 if ser.WaitingData>=13 then begin
       Wert1:= ser.RecvTerminated(100, #13); 
 end; 
 
Was hat es eigentlich mit diesem EOR auf sich? Liegt da der Fehler?
Danke nochmal!

NoCee
Beiträge: 174
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Re: Synaser Verbindungsaufbau

Beitrag von NoCee »

Schickt dir die Waage auch CRLF, dann solltest du auch ein #13#10 bei RecvTerminated mitgeben.

Wenn du ein Terminal dranhängst, kommt dann was?
Eventuell will die Waage vorher auch noch ein XON vom Empfänger. Am einfachsten du schaltest den Handshake
an der Waage komplett ab. Bei den paar Byte braucht man den eh nicht.

Wo bringst du hier eigentlich das EOR her.
In meiner Glaskugel habe ich das in einem anderen Thread von dir gefunden.
In diesem war das einfach eine Variable, in dem das(die) Steuerzeichen drinstanden.
Also eine Variable erzeugen, in diese ein #13 reingeschrieben und damit das #13 in der Recv-Funktion ersetzen.

ob du
Wert1:= ser.RecvTerminated(100, #13);
oder
EOR := #13
Wert1:= ser.RecvTerminated(100, EOR);
schreibst, kommt ja auf das selbe raus. EOR könnte ja auch ganz anders heißen, z.B. Satzende.

Wenn du allerdings nach Funktion des EOR gefragt hast:
Bei dem empfangenem Datensatz zeigt das einfach das Datenende an.
Damit arbeitet z.B. das Empfangsprogramm RecvTerminated und liefert sofort die Daten nach Empfang
des Steuerzeichens ohne zu warten ob da noch was kommt.
Wenn da mehrere Telegramme empfangen wurden, trennt es auch die einzelnen Telegramme.

Gruß
NoCee

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6781
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Synaser Verbindungsaufbau

Beitrag von af0815 »

Wenn ich mit Serielle Geräten wie Waggen, Kleberdosiergeräten , etc. arbeiten muss, so sehe ich mir das ganze per ZOC (Zap O Comm) mal auf Byteebene an.

Von ZOC gibt es eine 30 Tage Version (ich habe eine Lizenz) mit der man das testen kann. Dazu verwende ich manchmal ein selbstgebautes Y- Kabel, wo ich den PC als reinen Receiver hineinhänge und immer einen Kommunikationspartner mitsniffen kann. Das mach ich mit beiden, bei identischen Befehlen und erhalte somit das ganze Kommunikationsprotokoll und sehe im Klartext was da läuft. Ist zwar am Anfang mehraufwand, damit bin ich aber im Endeffekt wesentlich schneller als beim blinden Testprogrammieren.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

l0lhaxx
Beiträge: 89
Registriert: Di 8. Dez 2015, 09:20

Re: Synaser Verbindungsaufbau

Beitrag von l0lhaxx »

Cr und Lf werden immer von der Waage gesendet. Also müsste ich doch mit der Zeile die ich oben gepostet habe etwas empfangen. Lf ist ja dann mein letztes Zeichen...

Code: Alles auswählen

 
 if ser.WaitingData>=13 then begin
       Wert1:= ser.RecvTerminated(100, #10); 
 end; 
 
Handshake entfernen kann ich leider nicht, da die Waage diese Möglichkeit nicht bietet.
Hab im Anhang mal den Datenblatt Auszug entsprechend.

Danke mal wieder!
Dateianhänge
Unbenannt.PNG

NoCee
Beiträge: 174
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.2.0 FPC 3.2.2 )
CPU-Target: Intel 32/64Bit, ARM9
Wohnort: Ulm

Re: Synaser Verbindungsaufbau

Beitrag von NoCee »

woher weißt du daß das Nullen funktioniert "ser.sendstring('Z'+chr(13)+chr(10));"?
Anhand des Waagendisplays oder weil was zurückkommt. Laut Beschreibung sollte da ja auch ein Response zurück kommen,
allerdings mit weniger Bytes!

NoCee

Antworten