Serielle Schnittstelle [Erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Serielle Schnittstelle [Erledigt]

Beitrag von Jan »

Hallo,

das ist jetzt so garnicht meine Welt. Aber ich muß da halt ran ...

Es geht darum, das ich die Gewichte von einer Waage abholen muß. Analog zu einem bestehenden Codeteil und dem Sample von Alaska habe ich das mal so gemacht:

Code: Alles auswählen

LOCAL lErfolgreich        := .F.
LOCAL nComPort            := 3
LOCAL lOldhandshakeHard   := .F.
LOCAL lOldHandshakeSoft   := .F.
LOCAL cSignal             := "WEI.GRO" + Chr(13) + Chr(10)
LOCAL lInitialisiert      := .F.
LOCAL lComGeoeffnet       := .F.
LOCAL nBytesNichtGesendet := 0
LOCAL cZeichen            := ""

lComGeoeffnet := Com_Open(nComPort)
IF lComGeoeffnet
   lInitialisiert      := Com_Init(nComPort, 9600, "N", 8, 1)
   lOldhandshakehard   := COM_HARD(nComPort, .T.)                                                                           
   lOldHandshakeSoft   := COM_SOFT(nComPort, .F.)
   lErfolgreich        := COM_READMODE(nComPort, READ_TIMEOUT, 100)
   lErfolgreich        := COM_SENDMODE(nComPort, WRITE_TIMEOUT, 2000)
   lErfolgreich        := COM_FLUSH(nComPort)                                                                           
   lErfolgreich        := COM_SFLUSH(nComPort)
   nBytesNichtGesendet := Com_Send(nComPort, cSignal)                                           
   cZeichen            := Com_Read(nComPort)
ENDIF
Die Verbindung bekomme ich per DockLight hin. Die Abfrage kann ich da auch absetzen, und ich bekomme das korrekte Ergebnis zurück. Die Kommunikation zwischen meinem Entwicklungsrechner und der Waage klappt also. Nur in dem Xbase++-Code oben klappt das nicht. Alles sieht gut aus, bis zum Com_Send(). Da gibt der mir alle Bytes als nicht gesendet zurück. Und damit natürlich auch in Com_Read() einen Leerstring.

Hat jemand eine Idee, was ich da falsch mache, oder mal testen könnte?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Serielle Schnittstelle

Beitrag von Wolfgang Ciriack »

Ich denke, du must zwischen ComSend und ComRead der Waage etwas Zeit geben.
Wenn du weisst, wie lang der Rückgabestring ist, kannst du eine Schleife mit ComCount() einbauen, z.B. so:

Code: Alles auswählen

   COM_CLOSE(::nCom)
   If !COM_OPEN(::nCom)
      return "ERCom Open"+alltrim(str(::nCom))
   elseif !COM_INIT(::nCom,::nBaudrate,::cParitaet,::nDatenBits,::nStoppBits)
      return "ERCom Init"+alltrim(str(::nCom))
   endif

   COM_FLUSH(::nCom)
   COM_SEND(::nCom,wa_abfrage1)
   i:=1
   do while COM_COUNT(::nCom)<::nStreamLen .and. i<20
      sleep(25)
      i++
   enddo
   stream:=COM_READ(::nCom)
   COM_CLOSE(::nCom)
Viele Grüße
Wolfgang
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Serielle Schnittstelle

Beitrag von Jan »

Wolfgang,

das kann es nicht sein. Ich geh das ja im Debugger durch. Und da bleibe ich dann relativ lange auf der Com_Send()-Zeile stehen. Und sehe sofort, das der alle Bytes als nicht gesendet zurück gibt (deswegen habe ich ja bei allen Com-Funktionen die Rückgabewerte abgefragt). Da bin ich noch garnicht in der Com_Read() drin.

Der Com_Send() dauert mir auch zu lange. Wenn ich das mit dem DockLight mache, dann ist die Antwort sofort da. Da merke ich keine Verzögerung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Serielle Schnittstelle

Beitrag von ramses »

Jan, ist bei dir Hardware Handshake ON richtig? Also vollverkabelte Verbindung. Bei Open verwende ich immer: COM_OPEN(nComPort,,,,COM_OPEN_FASTUART)
Woher hast du: NG_Com_Open(nComPort)?? Müsste doch Com_Open() sein.
Zuletzt geändert von ramses am Mi, 19. Apr 2017 16:59, insgesamt 1-mal geändert.
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Serielle Schnittstelle

Beitrag von brandelh »

Was ist DockLight ... ;-)

Hängt das Teil an einer alten seriellen Schnittstelle oder USB ?

Ist schon ewig her, es ist wichtig die richtigen Parameter einzustellen baud, stopp bits, etc.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Serielle Schnittstelle

Beitrag von ramses »

DockLight ist ein Simuatons- /Test Programm für RS232
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Serielle Schnittstelle

Beitrag von Jan »

Hallo Carlo,

OK, das wars. Hardware-Handshake aus. Irre. Bei den anderen Waagen, die hier beim Kunden stehen, ist das an.

Danke für den Tipp, der war Gold wert.

Damit bin ich zwar immer noch nicht ganz durch, die Waage gibt mir eine Fehlermeldung zurück. Aber immerhin kann ich da was hinschicken, und die antwortet mir auch.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Serielle Schnittstelle

Beitrag von ramses »

Hallo Jan
Bitte, gern geschehen.
Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Serielle Schnittstelle

Beitrag von brandelh »

ramses hat geschrieben:DockLight ist ein Simuatons- /Test Programm für RS232
https://www.heise.de/download/product/docklight-11280

Klasse, so ein Teil hätte ich früher mal brauchen können ... ;-)
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Serielle Schnittstelle [Erledigt]

Beitrag von ramses »

Hallo Hubert

wenn du in der Abteilung "Steuerung/Messwerterfassung" arbeiten würdest könntest du das noch heute verwenden. Da läuft noch sehr viel über Serielle Schnittstellen ..... schon wegen der möglichen Leitungslängen

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Serielle Schnittstelle [Erledigt]

Beitrag von brandelh »

kann ich mir gut vorstellen, aber da arbeite ich nicht ;-)

Meine letzten Kontakte mit RS232 hatte ich wegen einem Bekannten, der mit Clipper seine Solargeräte angesteuert hat (was genau weiß ich nicht mehr),
anfangs konnte ich ihm noch helfen, aber meine Erfahrungen mit seriellen Druckern waren damals schon sehr alt und ich hatte mit Basic damit gearbeitet.
Er hat schnell mehr über die Dinger gewußt als ich und dann sogar über serielle (Modem) Schnittstellen, Daten verschiedener Lokationen abgefragt ... gut 10 Jahre ist das nun her.

Zu der Zeit hatten wir schon ein WAN das auf normale LAN Befehle hörte, sodass ich nur mit langsamen Leitungen rechnen musste aber sonst normale Dateisperren etc nutzen konnte.
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Serielle Schnittstelle [Erledigt]

Beitrag von ramses »

Hubert,
vielleicht kommt es ja auch für dich wieder, z.b. Energie, Wasser, Gas Zähler kannst du mit RS485 bezw. Modbus-Protokoll abfragen und auch so mit Solaranlagen, Steuerungen und Schaltschränken kommunizieren. Der RS485 ist ein 2-Draht Bus der mehrere Geräte am selben Bus zulässt und dies erst noch über ca. 1200m. An der RS232 des PC kommt ein Wandler RS232 <-> RS485 und dann zu den Geräten. Im momentanen "Energie-Wahnsinn" der Politik wird der Bedarf an Energie-Steuerungen immer grösser. ....

Gruss Carlo
Valar Morghulis

Gruss Carlo
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Serielle Schnittstelle

Beitrag von UliTs »

brandelh hat geschrieben:
ramses hat geschrieben:DockLight ist ein Simuatons- /Test Programm für RS232
https://www.heise.de/download/product/docklight-11280

Klasse, so ein Teil hätte ich früher mal brauchen können ... ;-)
Das erinnert mich an meine hardware-nahe Programmierzeit aus den 80ern: mit 8 seriellen Schnittstellen asyncron (!) und schnell genug bedienen und auswerten. Und das mit PCs aus der Zeit! 8)

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Serielle Schnittstelle [Erledigt]

Beitrag von Manfred »

wir staunen immer weider, was früher alles (unter welchen Bedingungen auch immer) so klappte. :lol:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Serielle Schnittstelle [Erledigt]

Beitrag von Jan »

Oh ja! Bei dem Kunden, wegen dem ich diesen Thread gestartet hatte, wird die komplette Parkbewässerung über virtuelle Drucker gesteuert. Da werden also Druckjobs in Form von ESC-Sequenzen hingeschickt, und der Druckertreiber öffnet oder schließt dann Relais an den Ventilen. Der hat da so irgendwas um die 10 oder 12 Ports auf dem Server installiert, um all die Ventile anzusteuern.

Einen Teil davon habe ich aber inzwischen schon auf KNX umgeschrieben ... Viel einfacher anzusteuern, zu protokollieren, zu verwalten.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten