Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249505 (10941)
  Suchen
 Zurück zur Übersicht
 AutorThema: ich kämpfe immer noch mit den Nullen
Georg Ziegelbauer
Datum:29.06.01 16:59 Antwortenals Email verschicken  


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 Antwortenals Email verschicken  


EOM


Georg Ziegelbauer
Datum:29.06.01 17:08 Antwortenals Email verschicken  


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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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