Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249505 (10941)

| Suchen
| Zurück zur Übersicht

Autor | Thema: ich kämpfe immer noch mit den Nullen
Georg Ziegelbauer
| Datum:29.06.01 16:59 |
Hallo beisammen! An und für sich ist sowas in der Regel ein leichter Kampf :-) Nicht aber wenn man die Nullen über die COM-Schnittstellen quetschen will. Mir gelingt es nicht eine serielle binäre Null bzw. einen CHR$(0) über die seriellen Schnittstellen zu empfangen. Senden geht! Alle anderen Ziffern gehen auch zu empfangen. Hab schon alles versucht! Weiß jemand Rat? Würde mich über jeden Rat sehr freuen. (Vielleicht bin ich zu schnell durch die Hilfe gesurvt und hab die Erlebnisinsel übersehen?) Grüße und Dank im voraus: Georg Ziegelbauer
Georg Ziegelbauer nochmal
| Datum:29.06.01 17:01 |
EOM
Georg Ziegelbauer
| Datum:29.06.01 17:08 |
Nachtrag! Mir ist aufgefallen das es einen setzbaren Parameter "eine Null entfernen" bei der Konfiguration der COM-Schnittstelle gibt. Nur zeigt das Setzen oder Rücksetzen keine Wirkung. Ich habs mal auf dem Laptop probiert- das gleiche.
Roland G. Hülsmann
| Datum:29.06.01 23:17 (rgh-soft@t-online.de) |
Leider weiß ich auch keine Lösung ... zumal ich derzeit keine technische Möglchkeit habe, derartiges zu testen. (Den Test seinerzeit beim Entwickeln der Funktionen hatte dankenswerterweise ein Kunde übernommen, der Steuerungsaufgaben mit PROFAN erledigte.) Ich weiß aber, daß das Thema in Mailingliste und/oder Forum schon mal diskutiert wurde. Vielleicht ist es hilfreich, auf meiner Downloadseite die entsprechenden Archive zu holen und zu durchforsten. Windows bietet für Hilfedateien eine recht brauchbare Volltextsuche, sodaß die Beiträge zu finden sein sollten. SORRY, daß ich im Moment nicht mehr dazu sagen kann. Roland
Roland G. Hülsmann
| Datum:29.06.01 23:45 (rgh-soft@t-online.e) |
Bei der Durchsicht des Quellcodes hatte ich dann doch noch eine Idee. Ich habe die Empfangsfunktion ein wenig modifiziert und Dir das dann per persönlicher Mail (ca. 600 kB) zum Testen geschickt. Wenn es funktioniert, wird es in 7.5 eingebaut!
Frank O.
| Datum:13.08.01 10:22 (Ontyd@t-online.de) |
So die serielle Schnittstelle chr$(0) empfangen hat wird dies als Leerstring weitergegeben. Das heißt es muß in Profan rückgewandelt werden von Leestring in Chr$(0) [siehe unten]. Dies führt allerdings eventuell zu Komplikationen für das Erkennen des Empfangsbeginns oder -endes auf der seriellen Schnittstelle da genau die Bedingung Leerstring nicht dafür rangezogen werden kann. Also schön mit STX und ETX arbeiten. let x$=@readcom$(id%,1) ' ein Byte lesen @comerror(id%) if @EQU$(x$,"" ) let x$=@chr$(0) 'fallweise wandeln endif
Frank O.
| Datum:13.08.01 10:30 (ONtyd@t-online.de) |
Wenn die Schnittstelle CHR$(0) empfangen hat, so wird dies an Profan als Leerstring "" weitergeben --> also sollte deine Profanan- wendung empfangene Leerstrings in CHR$(0) wandeln. [s.unten] let x$=@readcom$(id%,1) @comerror(id%) if @EQU$(x$,"" ) let x$=@chr$(0) endif der Empfang oder nicht Empfang von Leerstrings ist damit nicht mehr für die Inaktivität oder Aktivität der COM auswertbar aber dafür gibt es ETX STX und Timeout.
Frank O.
| Datum:13.08.01 10:41 (Ontyd@t-online.de) |
noch ein Versuch ich kann immer meinen eigenen Hinweis als Antwort auf der Webseite dann nicht lesen. Irgendwas ging daneben. Also beim Emfang von CHR$(0) wird an Profan oder durch Profan Leerstring "" gemeldet. Also folgender Trick let x$=@readcom$(id%,1) @comerror(id%) if @EQU$(x$,"" ) let x$=@chr$(0) endif Leerstring "" kann natürlich nicht mehr als Indikator für inaktive Schnittstelle verwendet werden.
Josef Recktenwald
| Datum: 20.08.01 20:20 (JosefRecktenwald@web.de) |
Hallo, versuche mal diesen Null-Fänger: declare h%,err% ' Handle und Error für die com declare comm#,lperror& ' Bereich und DWORD - benötigt ' zum chr(0) über com lesen dim comm#,12 ' RückmeldeSpeicher für API def ClearCommError(3)!"KERNEL32","ClearCommError" REM **************** Ein Byte lesen ******************* REM HEX 00 wird indirekt erkannt REM wenn nix kommt, bleibt die proc hängen - deshalb REM u.u. zeitüberwachung einbauen proc ComReadmitNull ende% = 0 while ende% = 0 ClearCommError(h%,addr(lperror&),comm#) if @long(comm#,4) > 0 ' dann wurde was empfangen a$=@readcom$(H%,1) if a$ = "" ' wenn nix ist, ists HEX 00 a$ = chr$(0) endif ende% = 1 endif endif ' hier evtl noch Timeout einbauen wend endproc REM ja und hier noch im Programm die com öffnen REM - bitte selbst anpassen H% = @openCom("com1",4096,4096) err% = @setcom("com1:9600,N,8,1") err% = @setcomext(H%,-1,-1,-1,$0083,4096,4096) Gruß JR

| Zurück zur Übersicht