Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Hilfe!!! Messmodul an serieller Schnittstelle

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
holgi78



Anmeldungsdatum: 22.02.2007
Beiträge: 7

BeitragVerfasst am: 02.03.2007, 16:35    Titel: Hilfe!!! Messmodul an serieller Schnittstelle Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 02.03.2007, 16:46    Titel: Antworten mit Zitat

Zitat:
,1,"

Am Komma liegts nich?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 02.03.2007, 17:12    Titel: Antworten mit Zitat

So gut wie jeder, der hier schreibt, braucht Hilfe. Zunge rausstrecken
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 02.03.2007, 17:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
holgi78



Anmeldungsdatum: 22.02.2007
Beiträge: 7

BeitragVerfasst am: 02.03.2007, 19:50    Titel: da ist wohl ein Wurm drin.... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 03.03.2007, 11:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
holgi78



Anmeldungsdatum: 22.02.2007
Beiträge: 7

BeitragVerfasst am: 03.03.2007, 18:50    Titel: verflixt, es will einfach nicht.... Antworten mit Zitat

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???
mit dem Kopf durch die Mauer wollen
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
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 03.03.2007, 19:19    Titel: Antworten mit Zitat

poste nochmal den code, wie du ihn jetzt hast!
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
holgi78



Anmeldungsdatum: 22.02.2007
Beiträge: 7

BeitragVerfasst am: 04.03.2007, 13:16    Titel: nochmal der Code Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 04.03.2007, 16:24    Titel: Antworten mit Zitat

[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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 05.03.2007, 19:45    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
holgi78



Anmeldungsdatum: 22.02.2007
Beiträge: 7

BeitragVerfasst am: 06.03.2007, 19:18    Titel: Schon wieder nix.... Antworten mit Zitat

Hallo Zusammen grinsen
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 weinen

Muss ich mir jetzt einen anderen Rechner besorgen???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 06.03.2007, 20:04    Titel: Antworten mit Zitat

Zitat:
Der Alternativcode läuft übrigens auf einem anderen Rechner unter XP wunderbar....nur bei mir nicht weinen
Muss ich mir jetzt einen anderen Rechner besorgen???


Bevor du das ganze Kopfkissen nass wird weinen
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
holgi78



Anmeldungsdatum: 22.02.2007
Beiträge: 7

BeitragVerfasst am: 06.03.2007, 21:34    Titel: Das endlose Rätselraten geht weiter,.... Antworten mit 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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
holgi78



Anmeldungsdatum: 22.02.2007
Beiträge: 7

BeitragVerfasst am: 06.03.2007, 21:45    Titel: noch was Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Steini63



Anmeldungsdatum: 11.11.2004
Beiträge: 28
Wohnort: 30926 Seelze

BeitragVerfasst am: 07.03.2007, 20:32    Titel: Antworten mit Zitat

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 verwundert . 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz