| |
|
|
- Page 1 - |
|
Web Scanner | Nachtrag: Web Scanner, Beitrag=56582, Zeitpunkt=28.03.2010
Du kannst Dir dieses Thermometer bei Ebay bestellen: USB xp linux thermometer,RS232 protocol,TEMPer232 Ebay Artikelnummer:220564891464 Herstellerseite: [...] Das Ding kostet 18US$ + 6$ Fracht. Das Temper232 kommt aus China, dauert paar Tage. Grüße Web
Web Scanner, Beitrag=56571, Zeitpunkt=28.03.2010
Anbei der Quelltext. Kann man sicher noch viel besser machen, aber es funktioniert erstemal: KompilierenMarkierenSeparierenTemperaturmessung Temper232 für PROFAN
über RS232 COMPORT 3
(C) Webbisoft 3/2010
Declare a$, f%, ende%,e%
Declare x$, y$, z%, bz&, xtemp!,xdtemp!, ll&, hh&, testtemp%
Proc GetComInput
Parameters id%
x$ = @ReadCom$(id%,10)
y$ = @ComError(id%)
bz& = @addr(x$)
print "temp: ",bz&
WhileNot x$ = ""
testtemp% = 0
x$=@ReadCom$(id%, 10)
@ComError(id%)
bz& = ord(mid$(x$,1,1))
print "temp1: ",(bz&); " ";
if bz& = 36
testtemp% = 1
else
testtemp% = 0
endif
bz& = ord(mid$(x$,2,1))
print (bz&); " ";
if bz& = 254
testtemp% = 1
else
testtemp% = 0
endif
bz& = ord(mid$(x$,3,1))
print (bz&); " ";
if bz& = 2
testtemp% = 1
else
testtemp% = 0
endif
bz& = ord(mid$(x$,4,1))
print (bz&); " ";
bz& = ord(mid$(x$,5,1))
print (bz&); " ";
bz& = ord(mid$(x$,6,1))
print (bz&); " "
iF TESTTEMP% =1
hh& = ord(mid$(x$,4,1))
ll& = ord(mid$(x$,5,1))
Print "ll& =", (ll&)
Print "hh& =",(hh&)
Xtemp! =256*hh&+ll&
Print "xtemp!=", xtemp!
If Xtemp! > 16384
XDtemp! = -(16384-(Xtemp!)/4)*(0.03125) Korrekturwert 4000h ab 100°C
Else
XDtemp! = (Xtemp!/4)*(0.03125)
EndIf
XDtemp!= XDtemp!-3 Korrekturwert
@Set("Decimals",2)
print "Temperatur USB232= ",xdtemp!,"°C"
endif
sleep 800
EndWhile
print
EndProc
Window 0, 0 - 400, 400
f% = @OpenCom("COM3", 1024, 1024)
@SetCom("COM3:4800,N,8,1")
@WriteCom(f%, chr$($24)+ chr$($10)+chr$($05)+chr$($01)+chr$($01)+chr$($00)+chr$($32)+chr$($01)+chr$($55))
Thermometer initialisieren
y$ = @ComError(f%)
GetComInput f% Antwort abwarten und anzeigen
ende% = 0
WhileNot ende%
a$ = @Inkey$() Tastatur abfragen
If a$ = "§" Ende mit SHIFT-3
ende%=1
Else
GetComInput f% empfangene Zeichen lesen
Endif
EndWhile
@Clos a> (f% )
End
Hallo Programmierfreunde,
nach längerer Zeit habe ich wieder ein kleines Softwareprojekt. Es geht um eine Temperatursteuerung. Dazu muß ich einen USB Temperaturstick auswerten. Sowas hier: Ebay Artikelnummer: 380167386533
Nun meine Frage, hat so etwas schon jemand gemacht? Gibt es da spezielle Treiber, dlls, oder sonstige Hilfen? Ich muß dazu sagen, das der Stick noch nicht bei mir weilt und daher ist es noch etwas dürftig mit der Datenlage
Grüße
Web |
|
|
| |
|
|
|
| |
|
- Page 7 - |
|
Web Scanner | Hi Georg,
das kann man doch unter der Systemverwaltung zuweisen? Jedenfalls geht das bei den virtuellen Comports wie bei dem Thermometer. Ich kann sogar auswählen, auf welchen Comport ich route.
Grüß
Web |
|
|
| |
|
|
|
GDL | Hi,
es geht um die automatische Erkennung durch das Programm beim Anwender. |
|
|
| |
|
|
|
Web Scanner | Okay, stimmt, das ist ne andere Baustelle - aber wichtig, wenn man das Programm weitergeben möchte. Bin jetzt nur von meinem PC ausgegangen.
Grüße
Web |
|
|
| |
|
|
|
Web Scanner | Heyyyy es ist der Hammer, es kommen jetzt Daten! Muß ich noch checken aber der Stick meldet sich, die LED blinkt!!! Unglaublich - ich bin platt
So sieht es aus was von dem Stick kommt:
[...]
Jetzt muß es nur in ein lesbares Format umgewandelt werden...coool Ziemlich kryptisch??
Grüße
Web |
|
|
| |
|
|
|
| Als ANSI-Zeichen sicherlich kryptisch ^^, das Protokoll ist wo beschrieben?
Bestimmt sowas wie die ersten Bytes: HiHo hier ich bin Thermo! und dann "5 Bits mal Dreissig Halbe" ergeben Grad Fahrenheit - irgend so ein horror halt. ^^ |
|
|
| |
|
|
|
Web Scanner | Ja genau,
Sending command: 24, 10, 05, 01, 01, 00, 32, 01, 55. Then you will see :24, FE, 02, HH, LL, 88
Nur wie wandle Io l' kryptischen kram um? Mit chr$ gehts nicht...
Eigentlich müsste ich eben das bekommen: 24, FE, 02, HH, LL, 88
Wobei HH LL die Temperatur beinhaltet. |
|
|
| |
|
|
|
| Du kannst jedes Byte mit Ord beziehen z.B. ord(mid$(s$,byteNummer,1)) und senden per chr$($24) oder "x24". Wenn Du 24 FE 02 HH LL 88 empfängst, dann halt Byte 4 und 5 per die Werte wobei Temp vlt. HH*256+LL ist.
Du kannst aber auch einfach auf das Byte zugreifen indem Du die Adresse vom String nutzt: KompilierenMarkierenSeparieren In nativen Funktionen kannst Du bei Strings einfach auch per Arrayschreibweise (z.B. s$[4]) den Bytewert beziehen was speziell per schnelles Abfragen konzipiert ist, hierbei aber wohl unnötig ist, wenn Du nicht unbedingt z.B. einen separaten Thread an das hWnd regelmässig die Temperatur als Message senden willst. ^^ |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Web Scanner | Sauber iF -- es geht. Danke Dir! Ich sehe die Temperatur genau wie im richtigen Progamm vom Hersteller.
Jetz muß ich nur noch die Synchronisation hinbekommen. Der Stick sendet automatisch ca. alle halbe Sekunde automatisch die Temperatur. Mit Sleep wir das nix, da verheddert er sich immer mal. Ich muß wahrscheinlich auf die 24 FE 02 triggern und danach die Werte abholen...
So ist auch schon drin. Werde das Programm noch etwas aufhübschen, dann stelle ich es zum angucken rein. Vielleicht muß ja jemand die Temperatur per PC messen
Die Cerca nach dem Comport hab ich noch nicht implementiert. Wird aber sicher sinnvoll sein. Muß ich wieder nach 24 FE 02 suchen, wenn das auf eine Comport zurückkommt, ist der halt richtige.
Anbei der Quelltext. Kann man sicher noch viel besser machen, aber es funktioniert erstemal: KompilierenMarkierenSeparierenTemperaturmessung Temper232 für PROFAN
über RS232 COMPORT 3
(C) Webbisoft 3/2010
Declare a$, f%, ende%,e%
Declare x$, y$, z%, bz&, xtemp!,xdtemp!, ll&, hh&, testtemp%
Proc GetComInput
Parameters id%
x$ = @ReadCom$(id%,10)
y$ = @ComError(id%)
bz& = @addr(x$)
print "temp: ",bz&
WhileNot x$ = ""
testtemp% = 0
x$=@ReadCom$(id%, 10)
@ComError(id%)
bz& = ord(mid$(x$,1,1))
print "temp1: ",(bz&); " ";
if bz& = 36
testtemp% = 1
else
testtemp% = 0
endif
bz& = ord(mid$(x$,2,1))
print (bz&); " ";
if bz& = 254
testtemp% = 1
else
testtemp% = 0
endif
bz& = ord(mid$(x$,3,1))
print (bz&); " ";
if bz& = 2
testtemp% = 1
else
testtemp% = 0
endif
bz& = ord(mid$(x$,4,1))
print (bz&); " ";
bz& = ord(mid$(x$,5,1))
print (bz&); " ";
bz& = ord(mid$(x$,6,1))
print (bz&); " "
iF TESTTEMP% =1
hh& = ord(mid$(x$,4,1))
ll& = ord(mid$(x$,5,1))
Print "ll& =", (ll&)
Print "hh& =",(hh&)
Xtemp! =256*hh&+ll&
Print "xtemp!=", xtemp!
If Xtemp! > 16384
XDtemp! = -(16384-(Xtemp!)/4)*(0.03125) Korrekturwert 4000h ab 100°C
Else
XDtemp! = (Xtemp!/4)*(0.03125)
EndIf
XDtemp!= XDtemp!-3 Korrekturwert
@Set("Decimals",2)
print "Temperatur USB232= ",xdtemp!,"°C"
endif
sleep 800
EndWhile
print
EndProc
Window 0, 0 - 400, 400
f% = @OpenCom("COM3", 1024, 1024)
@SetCom("COM3:4800,N,8,1")
@WriteCom(f%, chr$($24)+ chr$($10)+chr$($05)+chr$($01)+chr$($01)+chr$($00)+chr$($32)+chr$($01)+chr$($55))
Thermometer initialisieren
y$ = @ComError(f%)
GetComInput f% Antwort abwarten und anzeigen
ende% = 0
WhileNot ende%
a$ = @Inkey$() Tastatur abfragen
If a$ = "§" Ende mit SHIFT-3
ende%=1
Else
GetComInput f% empfangene Zeichen lesen
Endif
EndWhile
@Clos a> (f% )
End
|
|
|
| |
|
|
|
| Juhu, bitte auch als Exe Posten mit (am besten Kauflink zum Tempfühler, runde Sache und ich hole mir solch Tempfühler garantiert schon alleine fürs Mondauto. ^^ |
|
|
| |
|
|
|
Web Scanner | Du kannst Dir dieses Thermometer bei Ebay bestellen:
USB xp linux thermometer,RS232 protocol,TEMPer232 Ebay Artikelnummer:220564891464
Herstellerseite: [...]
Das Ding kostet 18US$ + 6$ Fracht. Das Temper232 kommt aus China, dauert paar Tage.
Grüße
Web |
|
|
| |
|
|
| |
|
- Page 8 - |
|
|
| |
|
| |
|
|