Hallo, ich bin neu hier im forum, und habe auch erst gerade mit
Bascom angefangen
Mein Projekt:
Ich möchte 30 Ladegeräte per RS485 Steuern/Abfragen
Die Geräte werden den Kommando K01 M(CR/LF) für Gerät 1 nach Messwerten gefragt, die Antwort ist denn ein 18 Zeichen langen string, der mit P01 ... anfängt.
Desweitern gibt es noch ander Kommandos, die aber erstmal nicht wichtig sind, es geht mir jetzt nur darum die Kommunikation herzustellen
also z.b.
Sende: K01 M(CR/LF)
Antwort: P01 VT-EEE-EEE-EEE(CR/LF)
Das Problem:
Es muss sichergestellt sein, das wenn ein Gerät gefragt wurde, und es nicht, oder Falsch antwortet (was durchaus vorkommen kann, z.b. Defekter Optokoppler im Gerät), das Programm nicht stehen bleibt, sondern das nächste Gerät abfragt.
Deshalb kommen wohl INPUT und WAITKEY nicht infrage weil sie warten würden, und INKEY wegen der 0 auch nicht ?! (wenn falsch bitte korrigieren)
Ich habe bereits eine LabView Anwendung geschrieben die die Geräte effizient Steuert/Abfragt, doch einige bereiche sollen jetzt in den Atmega ausgelagert werden um einen Ausfall das PCs mittelfristig zu überbrücken
Ich habe übrigens die möglichkeit die Aktivität auf dem Bus mit zu Logger und im Terminal zu sehen
Mein bisheriger code funktioniert, aber ich weis nicht wie ich die antwort anders empfangen könnte.
Code:
$regfile = "M88def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Com1 = 4800 , Synchrone = 0 , Parity = Even , Stopbits = 1 , Databits = 7 , Clockpol = 0
Config Print = Portd.2 , Mode = Set
Config Pind.2 = Output
Led1 Alias Portb.0
Config Led1 = Output
Led2 Alias Portd.7
Config Led2 = Output
Led3 Alias Portd.4
Config Led3 = Output
Taster1 Alias Pind.5
Config Taster1 = Input
Taster2 Alias Pind.6
Config Taster2 = Input
Dim Test As String * 20
Do
Gosub Mess
If Len(test) = 19 Then
Led2 = 1
Else
Led2 = 0
End If
Loop
Mess:
Waitms 5
Print "K02 M"
Input Test Noecho
Return
schonmal vielen dank für eure Antworten
Lesezeichen