hmmmm muss ich da irgendwie waitkey verwenden oder sowas ???
man die hilfe ist gar nicht mal sooo übersichtlich ...
also ich habe ein gerät an nem 485 bus dass ich per printbin ein paar kommandos schicke, das funzt einwandfrei.
das gerät empfängt die befehle und zeigt es auf dem display an.
nun schickt das gerät antworten, die ich jetzt einlesen will, es klappt aber nicht.
(ich kann das ganze mit dem pc testen, da funzt alles über ein terminal programm)
also die antwort auf ein kommando ist z.b. 200 1 0 254 201
(kurze erklärung: 200 ist das startbyte, dann kommt die gerät-id, dann errorcode 0, dann checksum, dann 201 als endbyte
ich will die werte jetzt einfach in variablen einlesen, und versuche das gerade so:
Code:Config Serialin = Buffered , Size = 64 ... Do Wait 3 Call Transmit_101 'command get start parameters senden If Ischarwaiting() = 1 Then Call Receive_101 'sub receive_101 soll empfangen End If 'Loop 'End If ....... Loop Sub Receive_101 Reset Portc.0 'hier nochmal den rs485 auf empfangen schalten Startcom = 0 Do Inputbin Startcom Loop Until Startcom = 200 ... end sub
beim senden checke ich ob alle daten gesendet wurden mit dem txc flag und schalte den 485 wieder auf empfangen ... geht prima.
problem ist beim empfangen auch wenn ich ischarwaiting weglasse geht gar nix.
kann es sein dass er sich bei inputbin irgendwie aufhängt ?
das gerät antwortet innerhalb von 10ms, deshalb dachte ich mir mit ischarwaiting wartet er bis daten kommen, dann in der sub prüft er ob das byte 200 empfangen wird, das ist dann der erste wert, danach die anderen einlesen....
?????????
buhuuuuu
hmmmm muss ich da irgendwie waitkey verwenden oder sowas ???
man die hilfe ist gar nicht mal sooo übersichtlich ...
oh mann jetzt hab ich echt schon etliches versucht .... interrupt, waitkey, usw usw
es klappt einfach nicht
LOL, das problem hatte ich exakt so mit der CMUCam2, daher schreib ich für die ja auch grad nen manual, wo ich das ganze etwas besser beschreibe, und die gibt als startbyte ne 255 ^^ also so iss der code dazu:
der wartet also auf die 200, und dann liest er 4 weitere bytes ein, das funzt wunderbar so, und die methode wird DIREKT nach dem senden ausgeführt, also ohne ischarwaiting und son quatsch, tests mal, sollte genau so gehen ^^Code:Sub Empfangen() While Isit <> 200 Isit = Waitkey() Wend For I = 1 To 4 Isit = Waitkey() Ar(i) = Isit Next End Sub
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
wow prima ich werds gleich mal austesten !
bei mir sinds so 8-10 bytes glaub ich, müsste ja gehen.
ach mist und ich hatte den nachmittag eigentlich für was anderes verplant
kannst ja auch das andere machen, aber wenn du natürlich der verlockung nicht widerstehen kannst
musst mal testen mit deiner byteanzahl, aber musste eben nur die 4 ersetzen, in dem array sind dann die verwertbaren bytes nur nach der 200 enthalten, also eigentlich einfach, aber knackig ^^
Martin
Linus Torvalds, Entwickler von LinuxIch will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
ok also nach etlichem hin- und her gehts auf einmal, allerdings etwas anders:
loopCode:do Wait 3 Call Transmit_102 'commando senden, dann antwort abwarten 'antwort ist 200 1 0 244 201 (start, id, error, checksum, end) Check = Waitkey() If Check = 200 Then For I = 1 To 4 Check = Waitkey() Ar(i) = Check Next End If If Ar(1) = 1 Then (das erste byte nach der 200 muss 1 sein) 'dann kontroll led blinken lassen Porta.0 = 0 Waitms 100 Porta.0 = 1 Waitms 100 Porta.0 = 0 Waitms 100 Porta.0 = 1 Waitms 100 Ar(1) = 0 End If
ok also das läuft kontinuierlich durch.
als erstes brauch ich jetzt mal nen timeout, wenn innerhalb von 10ms nicht geantwortet wird soll das kommando erneut gesendet werden.
wenn ich das hab müsst ich eigentlich klar kommen.
vielen dank schonmal und wenn wer tipps zum timeout hat ... ich habe aber noch nie mit timern gearbeitet ....
werd mich mal umschauen, glaub ich hab im forum irgendwo mal was gelesen
hmmm die hilfe sagt mit inkey gehts weiter auch wenn kein character kommt .... aber da werd ich das problem haben das mein gerät bis zu 10ms brauchen kann bis es sendet ....
ich probier mal weiter rum
juhuuu mit $timeout und waitkey klappts ...
Lesezeichen