Autor | Thema: ich kämpfe immer noch mit den Nullen | | 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
|
| | 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.
|
| | 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
|
| | 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!
|
| | 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
|
| | 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.
|
| | 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.
|
| | 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
|
|
|