Serielle Abfrage ohne zu wissen was dran ist ?!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

In a$? Die Daten werden mit ReadString() vom Port gelesen (wenn was da ist) und in a$ abgelegt. dann mit PrintN(a$) ausgegeben.

Kann aber sein, dass ReadString() nur geht, wenn die Waage die Daten mit einem CR+LF (ASCII 13 + 10) abschließt. Sonst probier mal
a$ = a$ + Char(ReadByte()), dann werden die Zeichen einzeln gelesen.

Oder nimm endlich die MVCOM-Library, die ist genau für sowas gemacht, und es sind Beispiele dabei.

Sven
Benutzeravatar
Then
Beiträge: 285
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Beitrag von Then »

Oder nimm endlich die MVCOM-Library...
Was glaubst Du womit ichs versucht habe ??? :evil:

btw:

Code: Alles auswählen

Char() is not a function...
Mirt MVCOM komm ich an gar nix ! :([/code]
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
HeX0R
Beiträge: 3042
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:

Beitrag von HeX0R »

So sollte es funzen:

Code: Alles auswählen

Repeat
	a$ = ""
	Repeat
		b = ReadByte()
		If b
			a$ + Chr(b & $FF)
		EndIf
	Until b = $0A
	PrintN(a$) 
	Delay(500) 
	zahl+1 
Until zahl=1000
Benutzeravatar
Then
Beiträge: 285
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Beitrag von Then »

nö... auch nix ! :(

Code: Alles auswählen

Chaine.s = Hex(5)
Port.s = "com3:4800,e,7,1"
Handshake.l = 1
Buffer.l = 1024
Car.s
e.s

HCom.l = ComOpen(Port, Handshake,Buffer,Buffer)
If HCom > 0                                 ; Communication port is open
  If ComOutput(HCom,Chaine)  ; Send data
   Delay(1000)                        ; Or other action
   NbCar.l = ComInputBufferCount(HCom) > 0
    While NbCar > 0
      Car =  Space(NbCar)        ;Adjust the size of Car
       If ComInputAll(HCom,Car,NbCar)
          e$+ Car
       EndIf
     Wend
    ComClose(HCom)              ; Close the communication port
  EndIf
EndIf
MessageRequester("",e$)
gibt auch nix von sich.... es ist zum ......
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
HeX0R
Beiträge: 3042
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:

Beitrag von HeX0R »

Was ist das denn :

Code: Alles auswählen

WriteStringN(Hex(5))
?
Das hatte ich aber nicht geschrieben...
Das würde das hier senden:
$35 $0D $0A

und das hat rein gar nix mit Strg+E zutun...

[Edit]und bleib endlich mal bei einer Version. Dieses ständige zwischen API und MVCOM hin- und herschalten ist nur verwirrend.
Ausserdem brauchst für den Pipifax keine MVCOM, das wäre mit Kanonen auf Spatzen geschossen...
Benutzeravatar
Then
Beiträge: 285
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Beitrag von Then »

Wem soll ichs denn recht machen ?? :freak: Der eine schreibt
Oder nimm endlich die MVCOM...
und der andere
[Edit]und bleib endlich mal bei einer Version...
Nun, ich probiere alles aus und habe derzeit 34 Codeschnipsel, welche ich nacheinander getestet habe - per API und per MVCOM ! Habe nun wirklich alles versucht, aber es kommt nichts an. Daß da jetzt der Fehler mit dem HEX(5) war ist klar, habs mal eben so zusammen geschustert Sorry !
Ausserdem brauchst für den Pipifax keine MVCOM, das wäre mit Kanonen auf Spatzen geschossen...
nun, dann zeig mir mal ne Lösung für den "Pipifax" ? :shock:
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
HeX0R
Beiträge: 3042
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:

Beitrag von HeX0R »

Würde ich ja gerne, aber ich krieg irgendwie sogut wie keine Infos, ausser einem "Es geht nicht".

Was genau passiert hier z.B.:

Code: Alles auswählen

OpenConsole()
If Open_Com(3, 4800, 1024, 1024, #EVENPARITY, 7, #ONESTOPBIT, $2018, 50)
	WriteByte(5) ;<- This should be Strg+E ... Play with it...
	Repeat
		a$ = ""
		Repeat
			b = ReadByte()
			If b
				Debug b
				a$ + Chr(b & $FF)
			EndIf
		Until b = $0A
		PrintN(a$)
		Delay(500)
		zahl+1
	Until zahl=1000
	Close_Com(3)
Else
   PrintN("Error!, Can't open Com3")
   Input()
EndIf
CloseConsole()
End
etwa gar nix ?
Aber mit deinem Com-Überwacher siehst du das vom Screenshot ?
Benutzeravatar
Then
Beiträge: 285
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Beitrag von Then »

ist etwas komplizierter....

Also erstmal danke für den Code. Ich generiere daraus ne EXE uns schicke diese an meinen bekannten (in Bochum) der die Waage hat. Der wiederum startet das Programm und sagt seinem Administrator bescheid, daß das Programm gestartet wurde und der kann per Monitor schauen, ob was passiert (bzw was gesendet oder empfangen wird).

Ist halt über 5 Ecken... Es handelt sich um eine Waage für LKWs ! Soviel weiß ich ! Mein Bekannter will aucheinen Code raussuchen und mir diesen mal zukommen lassen. Ich habe dem jetzt mal die EXE geschickt !

Sobald ich mehr weiß schreib ichs rein, okay ?
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
HeX0R
Beiträge: 3042
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:

Beitrag von HeX0R »

Hmm... als Exe sehen wir aber den Debug nicht...

Versuch mal das hier:

Code: Alles auswählen

If Open_Com(3, 4800, 1024, 1024, #EVENPARITY, 7, #ONESTOPBIT, $2018, 50)
	WriteByte(5) ;<- This should be Strg+E ... Play with it...
	*Buffer = AllocateMemory(32)
	TimeOUT = ElapsedMilliseconds() + 3000
	If *Buffer
		Repeat
			Delay(20)
			UseFile(3)
			L + ReadData(*Buffer + L, 14 - L)
			If TimeOUT < ElapsedMilliseconds()
				Break
			EndIf
		Until L = 14
		MessageRequester("Info", "Es kamen " + Str(L) + " Zeichen an :" + PeekS(*Buffer, L))
		Close_Com(3)
		FreeMemory(*Buffer)
	EndIf
Else
	MessageRequester("Error!", "Can't open Com3")
EndIf
End
Benutzeravatar
Then
Beiträge: 285
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Beitrag von Then »

So, nun habe ichs nochmal testen lassen, aber wir kamen auf kein Ergebnis.

Kennt jemand "NerBasic" ??

Habe da einen Quellcode bekommen, vielleicht hat jemand ne Idee den umzusetzen ?!

Code: Alles auswählen

...
30000 REM INIT STEUERZEICHEN WAAGE
30001 REM BEACHTE, NULL AHNUNG WAS und WIEVIEL šBER die LEITUNK KOMMT
30040 LET G3$="_205_"  ; ENQ  ( GUCKEN OB WAAGE DA )
30041 LET N3$=G3$
30042 CALL 20,2,G3$,0
30050 LET G4$="_206_"  ; ACK ( VERSTANDEN)
30051 LET N4$=G4$
30052 CALL 20,2,G4$,0
30060 LET G5$="u"  ; NAK  ( nicht VERSTANDEN )
30061 LET N5$=G5$
30062 CALL 20,2,G5$,0
30070 LET G6$="_212_"  ; 'LF'                
30071 LET N6$=G6$
30072 CALL 20,2,G6$,0
30080 LET G7$="_215_" ; 'CR'           
30082 CALL 20,2,G7$,0
30090 LET G8$="_202_" ; STX
30091 LET N8$=G8$
30092 CALL 20,2,G8$,0
30100 LET G9$="_203_"  ; ETX
30101 LET N9$=G9$
30102 CALL 20,2,G9$,0
30190 Return 
---------------------------------------------------------------------------------
;- ab hier wirds interesant !!
---------------------------------------------------------------------------------
40000 If  ESC  Goto 40200  ; Abbruch, Nochmal versuchen ??
40005 If  ERR 0 Goto  40200  ; Abbruch, Nochmal versuchen ??
40010 LET D(1)= SPC 3  ; Zeit in 10-tel Sekunden
40020 LET D(2)=0  ; noch Kein Versuch gestartet
40030 WRITE #13;G3$  ; Sende ENQ
40040 SIGNAL 3,20
40050 If  LKY 0=256 Goto  40200
40060 LET D(2)=D(2)+1
40065 If D(2)>3 Goto  40200
40070 CLEAR W$,W9$
40071 LET D(3)=0  ; Z„hler Leseversuche
40080 Read #13;W$;
40090 LET W9$( LEN W9$+1)=W$
40100 CALL 23,N6$,W9$,1,A
40110 If A>0 Goto 40152  ; Fertig !
40120 LET D(3)=D(3)+1
40125 If D(3)>10 Goto 40200
40130 SIGNAL 3,4
40135 Goto  40080  ; Nächste Daten lesen
40150 REM
...
#13 ist die Waage !!

ist nur ein Ausschnitt, aber NUR in diesem Bereich wird gelesen !
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Antworten