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 :oops:
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 :allright:
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:

Code: Alles auswählen

text1.s = Mid(RemoveString(text1.s,...),0)
Das Mid() brauchst Du hier nicht. So ist's besser:

Code: Alles auswählen

text1 = RemoveString(text1, ...)
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)