[Gelöst] RS232 Antwortet nicht

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

[Gelöst] RS232 Antwortet nicht

Beitrag 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é
Zuletzt geändert von Elektrolurch am 08.07.2010 10:18, insgesamt 2-mal geändert.
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: RS232 Antwortet nicht

Beitrag 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...
Crawler
Beiträge: 110
Registriert: 08.02.2009 19:52
Computerausstattung: PB 4.41
Win7 64bit

Re: RS232 Antwortet nicht

Beitrag von Crawler »

Vor allem: Wer oder was hängt denn an der seriellen Schnittstelle? Kann das Gerät auch antworten?
PB 4.41 | Win7 64bit
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Re: RS232 Antwortet nicht

Beitrag 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é
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Re: RS232 Antwortet nicht

Beitrag 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é
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: RS232 Antwortet nicht

Beitrag 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
a²+b²=mc²
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Re: [Gelöst] RS232 Antwortet nicht

Beitrag von Elektrolurch »

Hi Kiffi

Hast natürlich recht, habe ich beim zusammenstreichen, nachdem es lief glatt übersehen.

BYe André
Wer Rechtschreibfehler findet darf sie ruhig behalten, ich brauche sie nicht mehr, ich habe noch genug davon.
BildBildBild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: [Gelöst] RS232 Antwortet nicht

Beitrag 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)
Antworten