Seite 1 von 1
[Gelöst] RS232 Antwortet nicht
Verfasst: 07.07.2010 11:55
von Elektrolurch
Hi all
ich habe gerade angefangen etwas mit der seriellen Schnittstelle zu experimentieren.
Leider funktioniert dies nicht so wie ich dies mit vorstelle.
Kann mir jemand sagen warum ich keine Antwort erhalte.
Der ausgehende so wie der eingehende Puffer sind immer leer.
Code: Alles auswählen
a= OpenSerialPort(#PB_Any, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
Debug a
If a > 1
Debug "Port geöffnet"
Else
Debug "Port defekt"
EndIf
If WriteSerialPortString(a, "DW1FA0:12L3" + Chr(13) + Chr(10 ))
Debug "Daten gesendet"
Else
Debug "Senden Fehlerhaft"
EndIf
Debug AvailableSerialPortOutput(a)
Debug AvailableSerialPortInput(a)
CloseSerialPort(a)
BYe André
Re: RS232 Antwortet nicht
Verfasst: 07.07.2010 12:37
von HeX0R
Du musst dir da schon ein wenig mehr Mühe beim Code geben, direkt nach dem senden wirst du bestimmt noch keine Antwort haben...
Re: RS232 Antwortet nicht
Verfasst: 07.07.2010 15:35
von Crawler
Vor allem: Wer oder was hängt denn an der seriellen Schnittstelle? Kann das Gerät auch antworten?
Re: RS232 Antwortet nicht
Verfasst: 07.07.2010 22:56
von Elektrolurch
Hi
@Hexor
Das habe ich mir schon fast gedacht
Ich habe jetzt mal eine Endlosschleife laufen lassen die auch tatsächlich etwas empfängt nur sieht es nicht annähernd so aus, wie wenn ich den gleichen Befehl per Windowsterminal an das System schicke.
Wenn ich morgen wieder etwas Zeit habe werde ich vielleicht mal meinen jetzigen Code posten.
@Crawler
An der seriellen Schnittstelle hängt ein System welches auf die Befehle antwortet.
Normalerweise bediene ich es per Terminalprogramm. Meine Idee war nun dies selbst etwas zu automatisieren.
@all
Ich dachte es hätte vielleicht einer schon mal so etwas gemacht und könnte mir einen kleinen Code posten.
An dem könnte ich dann etwas herumspielen und so das Händling für meine Zwecke anpassen.
Ein Demofile gibt es anscheinend nicht, ich habe zumindest nicht gefunden.
Trotzdem schon mal Danke für das Interesse.
BYe André
Re: RS232 Antwortet nicht
Verfasst: 08.07.2010 10:16
von Elektrolurch
Hi all
nach etwas tüffteln
funktioniert mein Test mit folgendem Code.
Code: Alles auswählen
a= OpenSerialPort(#PB_Any, "COM1", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
If a > 1
Debug "Port geöffnet"
Debug "Portnummer = " + Str(a)
Else
Debug "Port konnte nicht geöffnet werden"
EndIf
If WriteSerialPortString(a, "DW1FA0:12L3" + Chr(13)) ; Anfrage senden
Debug "Daten gesendet"
Else
Debug "Senden Fehlerhaft"
EndIf
Delay (100); warten bis Daten anstehen
While AvailableSerialPortInput(a) >0
If ReadSerialPortData(a, @s_byte, 1)
text1.s = text1.s + Chr(s_byte)
EndIf
Wend
text1.s = Mid(RemoveString(text1.s,Chr(13)),0)
text1.s = Mid(RemoveString(text1.s,Chr(10)),0)
text1.s = Mid(RemoveString(text1.s,"*"),0)
text1.s = Mid(RemoveString(text1.s,Chr(4)),0)
text1.s = Mid(RemoveString(text1.s,Chr(23)),0)
Debug "Daten empfangen"
Debug text1.s
CloseSerialPort(a)
Ich werde es nun mal in mein Programm einbauen.
Wenn es einer gebrauchen kann....
BYe André
Re: RS232 Antwortet nicht
Verfasst: 08.07.2010 10:47
von Kiffi
Elektrolurch hat geschrieben:
Das Mid() brauchst Du hier nicht. So ist's besser:
Grüße ... Kiffi
Re: [Gelöst] RS232 Antwortet nicht
Verfasst: 08.07.2010 12:43
von Elektrolurch
Hi Kiffi
Hast natürlich recht, habe ich beim zusammenstreichen, nachdem es lief glatt übersehen.
BYe André
Re: [Gelöst] RS232 Antwortet nicht
Verfasst: 08.07.2010 13:37
von NicTheQuick
Ich hatte mir unter Linux mal dieses Mini-Terminal geschrieben. Vielleicht hilft dir das auch noch weiter bezüglich Auslesen.
Code: Alles auswählen
Define port.i
Procedure.s ReadSerialPortString(port.i)
Protected length.i = AvailableSerialPortInput(port)
Protected *mem, pos = 0
Protected result.s
If length
*mem = AllocateMemory(length)
While pos < length
pos + ReadSerialPortData(port, *mem + pos, length - pos)
Wend
result = PeekS(*mem, length)
FreeMemory(*mem)
ProcedureReturn result
EndIf
ProcedureReturn ""
EndProcedure
#BUFFER_READ = 1024
#BUFFER_WRITE = 1024
OpenConsole()
port = OpenSerialPort(#PB_Any, "/dev/ttyUSB0", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, #BUFFER_READ, #BUFFER_WRITE)
If Not port
PrintN("Konnte Port nicht öffnen.")
End 1
EndIf
Define KeyPressed.s
Repeat
Print(ReadSerialPortString(port))
KeyPressed = Inkey()
If KeyPressed
If KeyPressed = Chr(27)
Break
EndIf
WriteSerialPortData(port, @KeyPressed, 1)
Print(KeyPressed)
EndIf
Delay(10)
ForEver
CloseSerialPort(port)