|
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 |
holgi78
Anmeldungsdatum: 22.02.2007 Beiträge: 7
|
Verfasst am: 02.03.2007, 16:35 Titel: Hilfe!!! Messmodul an serieller Schnittstelle |
|
|
Hallo zusammen,
nachdem ich vor einiger Zeit mit der C-Control von Conrad einen Einstieg in die Basic-Programmierung gefunden habe, möchte ich nun was neues ausprobieren und befasse mich mit der seriellen Schnittstelle am PC. Ich habe mir von ELV das M232 Messmodul besorgt. Das mitgelieferte Beispielprogramm (in c und pascal) funktioniert auch, nur mit Qbasic funktioniert nix.
Das ganze läuft unter WIN95.
Das Modul arbeitet mit folgenden Schnittstellenparametern an Port 2:
2400 Baud, 1 Stoppbit, ohne Parität.
Prinzipiell soll das ganze wie folgt funktionieren: der PC sendet zunächst SOH(ASCII 1)(Befehlbeginn), dann zb. 'v' (versionsabfrage) und dann CR( ASCII 13)(Ende des Befehls). Darauf sollte das Messmodul die Daten senden.
Ich habe für einen ersten Test in Anlehnung an das Mini-Chat Programm aus den Monster FAQ folgendes Programm gebastelt:
Code: | cls
open "com2:2400,N,8,1," for random as #2
print #2, 1; 'soh
print #2, v; 'versionsnummer anfordern
print #2, 6; 'cr
while not eof(2)
a$=input$(2,1)
print a$
wend
end |
Das einzige was hier funktioniert ist, daß die Meldung "Eingabe nach Dateiende" auftaucht.
Ich habe bereits RTS,DTR und CTS gebrückt um eine Komunikation ohne Handshake aufbauen zu können (Bei dem Messmodul sind nur RXD,TXD und GND verbunden). Ohne Brücken kommt bereits bei dem OPEN COM Befehl eine Fehlermeldung Ich denke nicht, das es an
der Hardware liegt, da die mitgelieferten Demoprogramme laufen.
Für ein paar Tips wäre ich dankbar.
Tschüss
Holger |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 02.03.2007, 16:46 Titel: |
|
|
Am Komma liegts nich? |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 02.03.2007, 17:12 Titel: |
|
|
So gut wie jeder, der hier schreibt, braucht Hilfe. _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 02.03.2007, 17:17 Titel: |
|
|
Hallo Holger!
Die serielle Schnittstelle erwartet Zeichen bzw. Strings, deshalb müssen diese in Anführungszeichen oder per CHR$ codiert werden. Ganz wichtig ist auch das abschließende Semikolon, damit nicht noch jeweils CHR$(13)+CHR$(10) angefügt werden, aber daran hattest du ja gedacht.
Dann braucht das Messmodul noch etwas Zeit zum Antworten. Wenn du sofort den Empfangspuffer abfragst, ist der mit ziemlicher Sicherheit noch leer.
Code: | ...
print #2, CHR$(1); 'soh
print #2, "v"; 'versionsnummer anfordern
print #2, CHR$(13); 'cr
SLEEP 2
...
| Beim "v" könnte auch die Groß-Kleinschreibung von Bedeutung sein.
Verhindern, dass die Handshake Leitungen abgefragt werden:
Code: | open "com2:2400,N,8,1,CD,CS,DS" for random as #2 |
_________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
|
holgi78
Anmeldungsdatum: 22.02.2007 Beiträge: 7
|
Verfasst am: 02.03.2007, 19:50 Titel: da ist wohl ein Wurm drin.... |
|
|
Hallo zusammen,
erstmal vielen Dank für die Tips. Ich habe jetzt alles abgeändert, aber dummerweise bleibt die Fehlermeldung. Ich habe dem Modul mit dem Befehl SLEEP 3 ausreichend Zeit verschafft, aber es hilft nix. Es kommt immer noch die Meldung "Eingabe nach Dateiende"
Ich wäre ja schon froh, wenn IRGENDWAS zurückkommt. Ich hoffe, ihr habt noch ein paar Ideen, sonst wandert was in die Tonne....
Tschüss
Holger |
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 03.03.2007, 11:18 Titel: |
|
|
Zitat: | OPEN "COMn: Optionen1 Optionen2" [FOR Modus] AS [#]Dateinr% [LEN=Satzlänge%]
open "com2:2400,N,8,1," for random as #2 |
Zitat: | INPUT$(n[,[#]Dateinummer%])
input$(2,1) |
Also Zahlendreher betreffs Dateinummer bei Input. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
|
holgi78
Anmeldungsdatum: 22.02.2007 Beiträge: 7
|
Verfasst am: 03.03.2007, 18:50 Titel: verflixt, es will einfach nicht.... |
|
|
richtig funktionieren.
Ich habe den Zahlendreher beseitigt, was aber auch nix gebracht hat... Zwischendurch habe ich es noch mal mit dem originalen Demoprogramm (s.o.) versucht, das funktioniert. Dummerweise habe ich keine Möglchkeit einen 2.ten Rechner dranzuhängen, um mit einem Terminalprogramm auf fehlersuche gehen zu können. Gibt es da vielleicht noch ein paar Alternativen???
Ich hoffe, die Sache lässt sich in den Griff bekommen... es kann doch gar nicht so schwer sein (denke ich immer noch) |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
|
holgi78
Anmeldungsdatum: 22.02.2007 Beiträge: 7
|
Verfasst am: 04.03.2007, 13:16 Titel: nochmal der Code |
|
|
Also, ich habe alle Änderungen vorgenommen, jetzt sieht's so aus:
Code: | cls
open "com2:2400,N,8,1,CD,CS,DS" for random as #2
print #2,CHR$(1); 'soh
print #2, "v"; 'versionsnummer anfordern
print #2, CHR$(13); 'cr
sleep 3 ' ich habe von SLEEP 1-3 erfolglos getestet
while not eof(2)
a$=input$(1,2)
print a$
wend
end |
Die Meldung ist nach wie vor: "Eingabe nach Dateiende"
Ich habe den Verdacht, das sich das Messmodul entweder nicht angesprochen füht, oder aber der PC nichts mit der Antwort anfangen kann. Wäre es möglich, das die serielle Schnittstelle noch irgendwas anderes als SOH,v und CR sendet ? Übrigens sendet das Modul bei nicht erkannten Befehlen ein NAK. Sollte nicht wenigstens das ankommen ????
Übrigens wurde in der Beschreibung des Moduls nicht angegeben, wieviele Datenbits die Kiste haben will. Ich habe dann aus dem C-Quellcode der Beispielsoftware gesehen, das es 8 Bits sein müssten. |
|
Nach oben |
|
|
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 04.03.2007, 16:24 Titel: |
|
|
[dumme frage]
geht eof bei random überhauopr?
[/dumme frage] _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 05.03.2007, 19:45 Titel: |
|
|
Kommt die Meldung auch ohne angeschlossenes Messmodul?
Probier es mal im reinen DOS-Modus, ohne Windows:
Start -> Beenden -> Im MS-DOS Modus neu starten _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
|
holgi78
Anmeldungsdatum: 22.02.2007 Beiträge: 7
|
Verfasst am: 06.03.2007, 19:18 Titel: Schon wieder nix.... |
|
|
Hallo Zusammen
Ich habe jetzt alles auch im MS-DOS Modus getestet, mit dem gleichen negativen Ergebnis. Wenn ich das Modul abklemme, kommt die Meldung:
Zeitüberschreitung am Gerät, ansonsten immer noch " Eingabe nach Dateiende"
Ich habe noch einen anderen Ansatz getestet, der aber auch nicht tut. Hier ist er, der Vollständigkeit halber:
Code: | CLS
OPEN "COM1:2400,N,8,1,CD,CS,DS,RS" FOR RANDOM AS #2
COM(1) ON
ON COM(1) GOSUB ComRead
PRINT #2, CHR$(1); 'soh
PRINT #2, "a0"; 'versionsnummer anfordern
PRINT #2, CHR$(13) 'cr
DO
LOOP UNTIL INKEY$ = CHR$(27)
CLOSE
END
' --------------------------------------------------------------------------
ComRead:
DO
a$ = INPUT$(1, #2)
PRINT a$;
LOOP UNTIL EOF(2)
RETURN |
Der Alternativcode läuft übrigens auf einem anderen Rechner unter XP wunderbar....nur bei mir nicht
Muss ich mir jetzt einen anderen Rechner besorgen??? |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 06.03.2007, 20:04 Titel: |
|
|
Zitat: | Der Alternativcode läuft übrigens auf einem anderen Rechner unter XP wunderbar....nur bei mir nicht
Muss ich mir jetzt einen anderen Rechner besorgen??? |
Bevor du das ganze Kopfkissen nass wird
kannst'e noch mal im BIOS oder/und im Win-Gerätemanager nachsehen, ob die Stadardeinstellungen für die Schnittstellen verstellt sind, Standard ist
COM1: Basisadresse 3F8 IRQ 4
COM2: Basisadresse 2F8 IRQ 3 _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
Nach oben |
|
|
holgi78
Anmeldungsdatum: 22.02.2007 Beiträge: 7
|
Verfasst am: 06.03.2007, 21:34 Titel: Das endlose Rätselraten geht weiter,.... |
|
|
...die Einstellungen für COM 1 und COM 2 stimmen.
Wie gesagt, die Demosoftware funktioniert ja auch. Auf einem anderen Rechner läuft das oben gezeigte Programm sogar unter XP. |
|
Nach oben |
|
|
holgi78
Anmeldungsdatum: 22.02.2007 Beiträge: 7
|
Verfasst am: 06.03.2007, 21:45 Titel: noch was |
|
|
Ich muss noch was anfügen: Das Programm reagiert immerhin auf die
ON COM-Anweisung und verzweigt, so wie es soll, Aber warum, wenn der rechner schon bemerkt, daß sich an der COM was tut, warum zum Geier kommt dann diese dusselige Fehlermeldung "Eingabe nach Dateiende"???
Kann es sein, das der Rechner aus irgend einem Grund den Puffer gleich wieder löscht, oder irgend ein Timingproblem vorliegt?? |
|
Nach oben |
|
|
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 07.03.2007, 20:32 Titel: |
|
|
Zitat: | ...die Einstellungen für COM 1 und COM 2 stimmen.
Wie gesagt, die Demosoftware funktioniert ja auch. Auf einem anderen Rechner läuft das oben gezeigte Programm sogar unter XP. |
Angenommen, die Interrupt-Kanäle sind vertauscht. Die C bzw. Pascal-Demosoft ist nicht interruptgesteuert und arbeitet fehlerfrei. Die serielle Schnittstelle wird unter QBasic aber interruptgesteuert bedient. Durch den Eingang eines Zeichens wird ein Interrupt ausgelöst, QBasic findet aber keine Zeichen im Puffer, weil die IO-Adresse nicht zum Interrupt passt. Das würde auch erklären, warum bei ON COM was passiert.
Meine bisher beste Theorie dazu . War der Wechsel con COM2 nach COM1 bei den Beispielquelltexten gewollt?
Die Fehlermeldung "Eingabe nach Dateiende" kommt, wenn per INPUT$ mehr Zeichen gelesen werden sollen, als sich in der Datei befinden bzw. vorher das (End-Of-File Zeichen = CHR$(26)) kommt. Das trifft bei Dateien allerdings nur zu, wenn sie im Modus INPUT geöffnet sind, nicht im Modus RANDOM. Das kann beim COM-Port aber anders sein. _________________ Viele Grüße Steini
http://www.FrankSteinberg.de +++++++ Planung ist das Ersetzen des Zufalls durch den Irrtum +++++++ |
|
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.
|
|