Seite 1 von 1

IsSerialPort() - nicht logisches Ergebnis

Verfasst: 05.05.2020 13:20
von kartmanne
HI,

nachdem ich mit den Hinweisen aus

viewtopic.php?f=28&t=30148&hilit=serial+port

gut bisher klar kam, funktioniert dieser code-Schnipsel neuerdings nicht mehr (MBP mit OSX 10.13.) so, wie ich das kenne.
IsSerialPort() sollte 0 melden, wenn Port 0 nicht geöffnet ist. Tatsächlich wird eine große Zahl gemeldet; heißt: port offen.
Schließe ich den port vorher mit closeserialport(0), wird genau dieser Befehl als nicht durchführbar gemeldet, weil der port bereits geschlossen ist. Unlogisch...
openserialport(0) gibt Fehler, da der port wohl doch offen ist. (also müßte closeserialport(0) ja funktionieren - tut's aber nicht()

Die Windows-Version zu IsSerialPort(0) funktioniert wie bisher einwandfrei (auf einem Windows-PC).

Ich habe (nach meinem Verständnis) keine weitere app laufen, die auf den port zugreifen und ihn geöffnet haben könnte.

Könnt ihr mir einen Tip zur Lösung geben?

Re: IsSerialPort() - nicht logisches Ergebnis

Verfasst: 05.05.2020 18:19
von kartmanne
HI,
Nachtrag. Ich glaube inzwischen, dass closeserial(0) nicht funktioniert.
In einer Routine (siehe link vorheriger post) werden zu beginn des Programms alle verfügbaren serial ports gesucht und in einer Liste eingetragen.
Setze ich hier Isserialport(0) vor Openserialport(0), dann meldet Isserialport(0) -> Null. Korrekt.
Ich hab's jetzt so ausprobiert:

Code: Alles auswählen

Debug Str(IsSerialPort(0))
OpenSerialPort(0,"/dev/tty.usbserial-FTCEM405",57600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,1024,1024)
CloseSerialPort(0)
Debug Str(IsSerialPort(0))
Die Ausgabe im debug-Fenster ist:
0
4300253224

Hmmmmm....

// Edit: Code-Tags hinzugefügt (Kiffi)

Re: IsSerialPort() - nicht logisches Ergebnis

Verfasst: 06.05.2020 12:34
von kartmanne
HI,

noch'n Nachtrag:

CoolTerm kann mit dem FTDI-USB-Serial-Adapter einwandfrei arbeiten.

Je nachdem, ob ich mit coolterm den Port öffne oder schließe, zeigt anschließend IsSerialPort(0) den passenden Status korrekt an.

Re: IsSerialPort() - nicht logisches Ergebnis

Verfasst: 05.06.2020 22:47
von Wolfram
Das scheint ein Bug zusein,
Mit #PB_Any funktioniert es aber.

Code: Alles auswählen

Debug Str(IsSerialPort(myPort))
myPort = OpenSerialPort(#PB_Any,"/dev/tty.usbserial-FTCEM405",57600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,1024,1024)
CloseSerialPort(myPort)
Debug Str(IsSerialPort(myPort))

Re: IsSerialPort() - nicht logisches Ergebnis

Verfasst: 13.06.2020 20:08
von kartmanne
HI,

hab ich probiert.

Dein code läuft fehlerfrei. Aber:

Code: Alles auswählen

Debug Str(IsSerialPort(myPort))
myPort = OpenSerialPort(#PB_Any,"/dev/tty.usbserial-FTCEM405",57600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,1024,1024)
CloseSerialPort(myPort)
Debug Str(IsSerialPort(myPort))
Debug myPort
Delay(5000)
OpenSerialPort(myPort,"/dev/tty.usbserial-FTCEM405",57600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,1024,1024)
Delay(5000)
End
...müßte ja den port öffnen können - IDE bricht (EDIT: beim 2. OpenSerialPort) ab mit: "#SerialPort Objektnummer ist sehr hoch (über1000), sind Sie dazu sicher?"

myPort wird davor ausgegeben mit "4299336776"

Re: IsSerialPort() - nicht logisches Ergebnis

Verfasst: 13.06.2020 20:49
von mk-soft
Wieder mit #PB_Any öffnen.
Bei einer festen ID werden die ID's von 0 bis den Wert myPort als Array und der Speicher reserviert.
Daher die Warnung.
PB verwendet statische Arrays (Feste ID) oder dynamischen Speicher (#PB_Any) für die Objekt-ID's

Re: IsSerialPort() - nicht logisches Ergebnis

Verfasst: 14.06.2020 09:23
von kartmanne
HI,

ja, wenn ich von fester auf dynamischer ID umstricke, dann funktioniert die com-Handhabung.

Danke für den Tip.