|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Flashbanger
Anmeldungsdatum: 03.09.2006 Beiträge: 14
|
Verfasst am: 03.09.2006, 19:17 Titel: OPEN COM Befehle |
|
|
Hallo ich bin neu hier und nutzte freebasic
ich möchte ein programm schreiben das den Com port ausließt und bestimmte werte auswertete und umrechnet.
ein steurungsprogramm für modelleisenbahnen soll auf einem windows-pc laufen. diese sendet daten an den com port.
der com port ist mit dem com-port des 2 pc's verbunden.
volgendes kann ich euch über das protololl des steurungsprogramms sagen:
eine einfache version sieht so aus:
Für loks:
100 OPEN "COM1:2400,N,8,2,CS10000,DS" FOR RANDOM AS #1
110 CLS
200 INPUT " Byte1 (Geschw. 0-15) "; GE
210 INPUT " Byte2 (Loknr. 1-80) "; LN
290 IF LOF(1) < 512 THEN GOTO 290
300 PRINT #1, CHR$(GE); CHR$(LN);
310 GOTO 200
für weichen:
100 OPEN "COM1:2400,N,8,2,CS10000,DS" FOR RANDOM AS #1
110 CLS : ROT = 34 : GRUEN = 33 : AUS = 32 : TW = 1
200 INPUT " Magnetartikel (1-255) "; MN
210 INPUT " Rot oder Gruen (R/G) "; MS$
220 IF MS$ = "r" OR MS$ = "R" THEN MS = ROT: GOTO 300
230 IF MS$ = "g" OR MS$ = "G" THEN MS = GRUEN: GOTO 300
240 GOTO 200
300 IF LOF(1) < 512 THEN GOTO 300
310 PRINT #1, CHR$(MS); CHR$(MN);
311 T = TIMER +0.2
320 IF TIMER < T THEN 320
325 IF LOF(1) < 512 THEN GOTO 325
330 PRINT #1, CHR$(AUS);
340 GOTO 200
für rückmeldedekoder:
100 OPEN "COM1:2400,N,8,2,CS10000,DS" FOR RANDOM AS #1
110 CLS : RM = 1
200 LOCATE 1, 29, 1: PRINT " ": LOCATE 1, 1, 1
210 INPUT " Rueckmeldemodulnr. (1-63) "; RM
220 IF RM < 1 OR RM > 63 THEN GOTO 200
230 IF LOF(1) < 512 THEN GOTO 230
240 PRINT #1, CHR$(RM + 192);
250 PRINT : PRINT
260 PRINT "Schalter: 1 2 3 4 5 6 7 8": PRINT "ein/aus : ";
270 A = ASC(INPUT$(1, #1))
280 FOR I = 7 TO 0 STEP –1 : PRINT SGN(A AND 2 ^ I); : NEXT
310 PRINT : PRINT : PRINT
320 PRINT "Schalter: 9 10 11 12 13 14 15 16": PRINT "ein/aus : ";
330 B = ASC(INPUT$(1, #1))
340 FOR I = 7 TO 0 STEP –1 : PRINT SGN(B AND 2 ^ I); : NEXT
380 GOTO 200
wie kann ich mit dem 2 pc die com schnittstelle auslesen und mir die dort ankommenden daten anzeigen lassen ??? |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.09.2006, 21:33 Titel: |
|
|
willkommen im forum
also da du freeBasic benutzt, empfehle ich dir, die ganzen zeilennummern wegzulassen, die waren nur damals bei gwbasic nötig (und das is laaaaaaaange her). mit open com kenn ich mich nicht so gut aus, aber ich hab da mitgekriegt, dass es unter winXP ohne einen gewissen Emulator probleme gibt... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Flashbanger
Anmeldungsdatum: 03.09.2006 Beiträge: 14
|
Verfasst am: 03.09.2006, 21:42 Titel: |
|
|
ich hab zwar windows xp doch ich teste meine programme auf einem win98-pc und einem win 95 PC.
am liebsten hätte ich ein programm das wie nullmodem.bas funktioniert, sprich mir erst einmal anzeigt was das steurungsprogramm denn so sendet. |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 03.09.2006, 22:04 Titel: |
|
|
Hi,
mit dem COM-Port kenn ich mich auch nicht so gut aus, aber laut FBhilfe
http://freebasic.de/Referenz.php?zeig=tuts&col1=a0d5d0&ref=yes&show=OPEN%20COM
soll:
OPEN COM "COM1:2400,N,8,2,CS10000,DS" FOR RANDOM AS #1 gehen, zumindest unter XP und 98 (95??).
Die Zeilennummern stören erst mal nicht, ein paar werden auch als Label gebraucht.
Gruß Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 03.09.2006, 22:24 Titel: |
|
|
Open com funktioniert unter windows xp einwadfrei.
Falls es nicht gehen sollte, kann man immer noch mit INP/OUT arbeiten, das geht auf jeden fall. |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Kai Bareis
Anmeldungsdatum: 10.09.2004 Beiträge: 545 Wohnort: Baden Würtemberg
|
Verfasst am: 03.09.2006, 22:45 Titel: |
|
|
Und OPEN COM sollte mit FB unter Win 2000/XP kein problem sein da ich damit schon gearbeitet habe. _________________ MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht! |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 04.09.2006, 00:30 Titel: |
|
|
Hi,
ich hoffe damit kann man die Steuersignale empfangen, aber ich konnte es nicht ausprobieren.
Code: | Dim As Integer ff, l, t, x
Dim Icom As UByte
Screen 0
ff = Freefile
Open COM "COM1:2400,N,8,2,CS10000,DS" For Input As #ff
'Do : Loop While Lof(ff)<512 'Initialisierung??
l = Lof(ff)
t = Timer
?"Start: ";Time$; " Abbruch mit Escape"
Do
If Lof(ff)>l Then
Input #ff,Icom
x = Icom
Select Case x
Case 0 To 15'Byte 1 0 - 15 = Geschwindigkeit 2Byte LockNr 1-80
Input #ff,Icom
l+=2
?"Zug: ";Icom;" Geschwindigkeit: ";x
Case 32'Byte 1 32 = (Zeitverzögert) Magnetartikel AUS,
l+=1
?"Magnetartikel: Aus"
Case 33'Byte 1 33 - 34 = Weichen GRUEN, ROT Byte 2 Magnetartikel
Input #ff,Icom
l+=2
?"Magnetartikel: ";Icom;" gruen"
Case 34
Input #ff,Icom
l+=2
?"Magnetartikel: ";Icom;" rot"
Case 193 To 255'Byte 1 193 - 255 = Rückmeldemodul-192, Byte 2 und 3 Schalterstellungen
Input #ff,Icom
?" Rueckmeldemodul: ";(x-192);" ";Bin(Icom,8);
Input #ff,Icom
?Bin(Icom,8)
l+=3
Case Else
?"???",x
l+=1
End Select
t = Timer
End If
If t+5 < Timer Then
?"kein Signal ";Time$
t = Timer
End If
Loop Until Inkey=Chr(27)
Close #ff
?"ENDE: ";Time$
Sleep |
Gruß Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Flashbanger
Anmeldungsdatum: 03.09.2006 Beiträge: 14
|
Verfasst am: 04.09.2006, 15:36 Titel: |
|
|
Danke Volta
das programmm zeigt bei
?" Rueckmeldemodul: ";(x-192);" ";Bin(Icom,;
und bei
?Bin(Icom,
beim compieleren einen fehler und zwar
"argument count mismatch, found: '8'"
ansonsten muss ich noch ausprobiern ob es klappt.
da die funktion der rückmeldungeg zz noch nicht von belang ist, da die anlage noch nicht automatisch laufen soll teste ich jetzt das ganze mal ohne diese abschnitte.
So ich hab dan test beendet.
ergebnis: negativ
es kam inmmerwieder :kein singnal
auch das programm nullmodem.bas schft es nicht eine verbindung zu erstellen
woran kann das liegen???
das kabel habe ich gecheckt das ist in ordnung.
die schnittstellen müssen auch in ordnung sein(modem geht)
Ich stelle euch jetzt noch mehr infos zu verfügung:
Beim orginal interface von Märklin werden blos die leitungen RxD, TxD, GND, RTS sowie CTS geschaltet.(so steht es in der anleitung)
die leitungen DCD, DIR und DSR können falls nötig mitteinader vebunden werden.
wann das nötig ist weis ich allerdings nicht.
die von mir obern angegebenne quelltexte sind von Märklin selber.
das programm welches ich nutzte ist allerdings von Freiwald.
doch auch bei verwendung des orginal-märklin-programmes klappt nix.
firewall ist ausgeschaltet.
Serielle schnittstellen dürften eigendlich normal sein.
das von märkin verwendete protokoll wird P50 genannt. ein nachfahre ist P50x, welches allerdings von uhlenbrock(einer anderen modelleisenbahn firma) genutzt wird. auf der nächsten seite gibst dann sie infos zum orginal märklin P50 protokoll. |
|
Nach oben |
|
|
Flashbanger
Anmeldungsdatum: 03.09.2006 Beiträge: 14
|
Verfasst am: 04.09.2006, 16:02 Titel: |
|
|
P50-Commands (Märklin 6050):
-----------------------------
0x00 .. 0x1F: Geschwindigkeit und 'Function' (2 Bytes)
Die unteren 4 Bits des ersten Bytes sind die Geschwindigkeit (0 .. 14). Der
Wert 15 bedeutet Richtungsumkehr. Das Bit 4 (0x10) schaltet die 'Function'
(Licht). Ist es gesetzt so wird das Licht eingeschaltet, sonst aus.
Das zweite Byte ist die Lokadresse. Gültige Adressen: 1 .. 255.
0x20 .. 0x22: Weichen (2 Bytes)
Das erste Byte kodiert die Funktion für die Weiche: 0x20 = Weichenantrieb
aus, 0x21 = Weiche gerade ('grün'), 0x22 = Weiche auf Abzweig ('rot').
Das zweite Byte ist die Weichenadresse 1 .. 255.
Anmerkungen: Das Kommando 0x23 ist eigentlich nicht vorgesehen. Es verhält
sich jedoch genauso wie 0x20 (Weichenantrieb aus). Im Kommandobereich bis
0x3F wiederholen sich die Weichenkommandos alle 4 Werte (0x24, 0x28, ... 0x3C
sind also das Gleiche wie 0x20).
ACHTUNG: die Magnete sollten sicherheitshalber automatisch abschalten ....
(oder nicht???)
0x40 .. 0x4F: Funktionen F1 bis F4 (2 Bytes)
Das erste Byte enthält in den unteren 4 Bits den neuen Zustand der Funktionen
F1 bis F4. Dabei wird F1 durch Bit 0 (0x01) und F4 durch Bit 4 (0x08) darge-
stellt.
Das zweite Byte ist die Lokadresse 1 .. 255.
Anmerkung: Das Kommando wiederholt sich im Bereich 0x50 .. 0x5F.
AUSNAHME: 0x58 = 'X' dient als Prefix für erweiterte Kommandos (P50x)
0x60 .. 0x61: Start / Stop (1 Byte)
0x60 entspricht dem Drücken der Taste "GO", 0x61 entspricht dem Drücken der
Taste "STOP". Die Kommandos wiederholen sich alle 2 Kommandowerte bis 0x7F
wobei jeder gerade Wert einem "GO" entspricht und jeder ungerade einem
"STOP".
AUSNAHME: 0x78 = 'x' dient als Prefix für Erweiterte Kommandos (P50x)
0x80 .. 0x9F: Ausgabe einer Anzahl S88-Units / S88 Reset aus (1 Byte)
Die unteren 5 Bits sind die Anzahl der auszugebenden S88 Module (1 bis 31).
Wird als Anzahl 0 angegeben (Kommando 0x80) so wird das S88-Autoreset
abgeschaltet.
0xA0 .. 0xBF: unbenutzt (1 Byte)
0xC0 .. 0xDF Ausgabe einer S88-Unit / S88 Reset ein (1 Byte)
Die unteren 5 Bits ist die Nummer des auszugebenden S88-Moduls (1 bis 31).
Wird als Anzahl 0 angegeben (Kommando 0xC0) so wird das S88-Autoreset
eingeschaltet.
0xE0 .. 0xFF: unbenutzt (1 Byte) |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 04.09.2006, 21:38 Titel: |
|
|
Hi Flashbanger,
ich habe leider keine Erfahrung mit der seriellen Schnittstelle und kann dir dazu auch kaum Tips geben.
Erst wenn das orginal Programm mit der digitalen Steuerung richtig arbeitet kannst du Fehler der Hardware ausschließen und eigene Programme probieren.
Zum Protokoll habe ich auch diese Seite gefunden:
http://www.marklin.com/tech/digital1/components/commands.html
Den Compiler-Error bekomme ich nicht mit meiner FB0.16stabel Version?
Gruß Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Flashbanger
Anmeldungsdatum: 03.09.2006 Beiträge: 14
|
Verfasst am: 04.09.2006, 22:29 Titel: |
|
|
hey danke
auf der deutschen-märklin seite gibt es nicht so viele detailierte informationen über das protokoll des interfaces.
das problem ist das ja bereits diese nullmodem-chat-programm nicht funktioniert.
Ich selber nutzte die aktuelle version von FB-IDE.
warum ich es nicht schffe diese chatprogramm zum laufen zu bringen ist mir ein rätsel
doch trotzdem habe ich bestimmte fragen die noch offen sind.
wenn ich dieses OPEN COMX benutzte so geb ich ja werte für geschw. und so weiter fest.
wenn ich allerdings windows nutzte so hab ich die selben infos ja auch noch im geräte manager zu wählen??? |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
|
Nach oben |
|
|
DB1BMN
Anmeldungsdatum: 17.12.2005 Beiträge: 24 Wohnort: Delmenhorst
|
Verfasst am: 06.09.2006, 00:12 Titel: |
|
|
Hallo Volta,
danke, dass du an mich gedacht hast
In der Tat hab ich so einiges an den COM-Port gemuddelt, aber Skilltronik hat natürlich die besseren Skills und bringt auch seine Projekte zu Ende.
Nun zur eigentlichen Problemstellung. Funktioniert denn der COM-Port bei Flashbanger? Ich verwende für Tests an der Hardware auch gerne das Br@y-Terminal.
Aber moment mal, ich habe mir mal eben noch mal die aktuellste version 17 von FB draufgespielt und bekomm das nachfolgende einfachst-Programm nicht zum laufen:
Code: | rem einfaches Testprogramm, ob Echo auf COM-Port funktiniert
rem freebasic 17 30.Jul testing
open com "COM1: 1200, N, 8, 1" For random As #1
rem in port schreiben und gucken obs ankommt
do
print #1, "hallo welt"
loop until inkey$=chr$(27)
close #1 |
Zitat: | Command executed:
"D:\Programme\FreeBASIC\fbc.exe" "D:\Programme\FreeBASIC\FBIDETEMP.bas" -mt
Compiler output:
D:\Programme\FreeBASIC\bin\win32\ld.exe: cannot find -lmingwex
Results:
Compilation failed |
Ich denke, wenn das hin- und herschicken der Daten klappt, kriegen wir dann auch leicht das Märklin-Protokoll eingebaut.
Beste Grüße, Marek _________________
|
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 06.09.2006, 10:20 Titel: |
|
|
Hi Marek,
DB1BMN hat Folgendes geschrieben: | Nun zur eigentlichen Problemstellung. Funktioniert denn der COM-Port bei Flashbanger? | Da müssen wir mal auf seine Antwort warten.
DB1BMN hat Folgendes geschrieben: | Aber moment mal, ich habe mir mal eben noch mal die aktuellste version 17 von FB draufgespielt und bekomm das nachfolgende einfachst-Programm nicht zum laufen: | Versuche es lieber mit der FB0.16stabel. Beim Testprog oben habe ich keine Compiler-Fehler bekommen, konnte es aber mangels Hardware nicht testen.
Gruß Volta
EDIT/ Die Testversionen von FB haben meist nicht die geänderten .inc und .bi Dateien als Inhalt.
Die muss man sich dann extra aus dem CVS holen, sonst gibt es Fehlermeldungen beim compilieren.
Holt man sich aber diese Dateien sehr viel später nach der Veröffentlichung der Testversion,
wurden soviel neue Änderungen in die .inc und .bi Dateien eingebaut, dass es auch wieder Fehler hagelt
Benutzt man die Testversionen nicht, hilft das den Entwicklern nicht die Fehler zu finden
Was man auch macht, mit Fehlern muss man leben.... _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
Flashbanger
Anmeldungsdatum: 03.09.2006 Beiträge: 14
|
Verfasst am: 07.09.2006, 22:14 Titel: |
|
|
Ja der COm port ist absolut in ordnung den mit dem COM-terminal lässt sich prima chatten.
doch warum schaff ich es nicht mit FB ein einfaches wort von pc1 auf pc2 zu übertragen?? |
|
Nach oben |
|
|
DB1BMN
Anmeldungsdatum: 17.12.2005 Beiträge: 24 Wohnort: Delmenhorst
|
Verfasst am: 08.09.2006, 23:23 Titel: |
|
|
Moin,
jetzt hab ich endlich alle meine 7 Sachen zusammen und nach langer Zeit wieder was lauffähiges unter FB geproggt.
Hier mal ein einfachstes Chat-Programm zum Testen. Läuft auch unter XP. Bitte mit der Final 0.16-Version von FB kompilieren. Damit ist eine 2-Wege Kommunikation möglich.
Wenn das dann läuft mal sehen wie wir dann das Märklin-Protokoll reinfummeln.
Code: | rem einfaches Testprogramm, ob Echo auf COM-Port funktiniert
rem freebasic 0.16 final
open com "COM1: 1200, N, 8, 1,CD0,CS0,DS0,OP0,RS" For RANDOM As #1
rem in port schreiben und gucken obs ankommt
do
sleep 1
eingabe$ = inkey$
print eingabe$;
print #1, eingabe$;
rem aus port lesen
if loc(1) then
do
print input$(1, #1);
loop until not eof(1)
end if
loop until eingabe$ = chr$(27)
close #1
|
Beste Grüße, Marek _________________
|
|
Nach oben |
|
|
Flashbanger
Anmeldungsdatum: 03.09.2006 Beiträge: 14
|
Verfasst am: 10.09.2006, 19:15 Titel: |
|
|
Erste erfolge
hab jetzt herausgefunden wie das interface protokoll funktioniert
jeder befehl besteht aus 2 Bytes
das erste byte bestimmt die geschwindigkeit, welches auch bestimmte sonderfunktionen bestimmt. so ist beispielsweise der wert 97 ein not-haltbefehl
das zweite byte bestimmt die lokkardresse
aber nun zu den erfolgen:
ich habe auf pc 1 volgendes ausgeführt
open "com2:2400,N,8,2,CS0,DS0" for output as #1
input "A"; A
input "B"; B
print #1, CHR$(A); CHR$(B)
close #1
auf pc 2 habe ich das programm com-terminal benutzt welches mir die eingegebenen werte anzeigt
auch das programm von märklin sendet diese bytes an pc2
doch das fremdprogramm testet zuerst ob ein interface da ist.
ich vermute, dass das reele interface auf dem CTS-Pin eine spannung sendet.
ich hab gehört, dass der TxD nur senden kann der RxD nur empfangen kann
RTS soll eine spannung rausgeben können und CTS eine annehmen
doch jetzt brauch ich ein programm, welches quasi das gegenteil von meinem programm macht also die datendes com ports ausließt und anzeigt.
MfG Flashbanger |
|
Nach oben |
|
|
DB1BMN
Anmeldungsdatum: 17.12.2005 Beiträge: 24 Wohnort: Delmenhorst
|
Verfasst am: 10.09.2006, 23:04 Titel: |
|
|
Hi Flashbanger,
konfigurier mal dein COM-Port so, wie ich das oben gemacht habe, also:
Code: | open com "COM2: 2400, N, 8, 2,CD0,CS0,DS0,OP0,RS" For RANDOM As #1 |
Dann sollte es zumindest keine Probleme mehr geben beim Warten aufs Interface.
Beste Grüße, Marek _________________
|
|
Nach oben |
|
|
Flashbanger
Anmeldungsdatum: 03.09.2006 Beiträge: 14
|
Verfasst am: 11.09.2006, 13:57 Titel: |
|
|
ich glaub ich wurde falsch verstanden
ich hab kein interface sondern will ein programm schreiben, welches quasi das interface ersetzt.
die daten die eigendlich zum interface gesendet werden sollen zu einem computer gesendet werden, der sie ausließt und bearbeitet.
mein problem ist das ich nicht weis wie ich in FB die com schnittstelle auslese
also die daten von meiner com mir auf dem bildschirm anzeigen lassen kann.
z.b als einfache nummernfolge
außerdem soll natürklich nur etwas angezeigt werden wenn ein wert gesendet wurde. und nicht ständig eine zahl gezeigt werden |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|