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 bei Schnittstellenprogrammierung

 
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
tysonie



Anmeldungsdatum: 23.06.2006
Beiträge: 1
Wohnort: USA

BeitragVerfasst am: 23.06.2006, 00:14    Titel: Hilfe bei Schnittstellenprogrammierung Antworten mit Zitat

Hallo Leute,

ich weiss das hier ist viel verlangt von mir aber ich brauche dringend hilfe.

Ich muss fuer ein Geraet, welches bestimmte Daten per RS232 liefert einen Datensatzwandler schreiben (sprich ein programm dass auf diese Daten wartet, und wenn diese ankommen, quittiert und dann in einem anderen (lesbaren) format wieder auf einer 2. RS232 Schnittstelle ausgeben.

Dabei habe ich das problem das ich schon seit jahren nimmer Qbasic programmiert habe.

Nun meine Fragen:

1. Ich brauche 19200, 8, N, 1 als Parameter fuer Com 1 (&H3F8).
2. Das Geraet sendet ein Enq (Hex 05) und erwartet darauf hin ain Ack (Hex 06).
Anschliessend sendet das geraet einen kompletten string, aus welchem ich nur die 8 letzten zeichen benoetige (laenge des strings ist nicht fest definiert). Hier wuerde mir reichen, wenn mir jemand zeigen kann, wie ich z.b. einen 20 Stelligen String von der Ser. Schnittstelle einlesen kann und in einer Variablen speichern kann - und anschliessend diese daten auch filtern kann.
3. Dann muss ein erneuter ENQ kommen und zwar diesmal vom PC.
4. Anschliessend muss der PC auf ein ACK vom Geraet warten.
5. Sobald dieser Ack kommt, muss dass geraet einen Antwort string in der selben laenge schicken.

Das waere es erst einmal.

Bitte wenn moeglich nicht nur auf irgendwelche links verweisen, da ich ja gerne auch was aus diesem code lernen moechte.

Vielen lieben dank
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 23.06.2006, 17:37    Titel: Antworten mit Zitat

Und wo ist die Frage ? zwinkern

Ich kümmere mich gleich darum.

Edit:
Gab vor kurzem einen ähnlichen Thread (http://forum.qbasic.at/viewtopic.php?t=2605), werde den Code von dort als Grundalge verwenden.
_________________
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
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 23.06.2006, 18:33    Titel: Antworten mit Zitat

Als Diskussuins Grundlage:
Code:
'1. Ich brauche 19200, 8, N, 1 als Parameter fuer Com 1 (&H3F8).
OPEN "COM1: 19200,N,8,1" FOR RANDOM AS #1

'2. Das Geraet sendet ein Enq (Hex 05)
DO  'Also warte ich bis ich es erhalte
        IF LOC(1) THEN
                INPUT #1, a$
                IF a$ = CHR$(5) THEN EXIT DO
        END IF
LOOP


'und erwartet darauf hin ain Ack (Hex 06).
PRINT #1, CHR$(6) 'da kommt es

'Anschliessend sendet das geraet einen kompletten string, aus
a$ = ""
b$ = ""
ttime = TIMER
DO
        IF LOC(1) THEN  'Zeichen f?ür Zeichen ab hollen
                INPUT #1, a$
                b$ = b$ + a$
                ttime = TIMER
        ELSEIF TIMER = ttime + 5 THEN 'Kommt nach 5 sekunden nichts mehr ist woll ende
                EXIT DO
        END IF
LOOP
altlang = LEN(b$) 'f?r 5.

'welchem ich nur die 8 letzten zeichen benoetige
c$ = RIGHT$(b$, 8)
PRINT c$ 'Da sind sie ja ;-)

'3. Dann muss ein erneuter ENQ kommen und zwar diesmal vom PC.
PRINT #1, CHR$(5) 'Da ist es

'4. Anschliessend muss der PC auf ein ACK vom Geraet warten.
DO  'Also warte ich bis ich es erhalte
        IF LOC(1) THEN
                INPUT #1, a$
                IF a$ = CHR$(6) THEN EXIT DO
        END IF
LOOP

'5. Sobald dieser Ack kommt,
'muss dass geraet einen Antwort string in der selben laenge schicken.
a$ = "" 'Noch ein Text kommt? Gut ;-)
b$ = ""
i = 0
ttime = TIMER
DO
        IF LOC(1) THEN  'Zeichen f?ür Zeichen ab hollen
                INPUT #1, a$
                b$ = b$ + a$
                ttime = TIMER
                i = i + LEN(a$)
        ELSEIF i = altlang THEN 'Gleiche L„nge wie vorher dann Ende
                EXIT DO
        END IF
LOOP

! Ungestestet !
Das mit der Zweiten Schnittstelle blicke ich aber nicht, weil bei deinen Punkten nur von "Gerät" und Com 1 die Rede ist.
_________________
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


Zuletzt bearbeitet von Michael Frey am 24.06.2006, 07:11, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kai Bareis



Anmeldungsdatum: 10.09.2004
Beiträge: 545
Wohnort: Baden Würtemberg

BeitragVerfasst am: 23.06.2006, 19:52    Titel: Antworten mit Zitat

Wenn du vor hast 19200 Baud mit Qbasic auszuwählen hast du ein Problem den Qbasic selber kann nur 75Baud bis 9600Baud. In der MonsterFAQ wird beschrieben wie man durch setzen von bestimmten Bits die Baudrate erhöhen kann.
_________________
MfG Kai Bareis
Es ist noch kein Meister vom Himmel gefallen! Warum einfach wens auch umständlich geht!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 24.06.2006, 07:10    Titel: Antworten mit Zitat

Kai Bareis hat Folgendes geschrieben:
Wenn du vor hast 19200 Baud mit Qbasic auszuwählen hast du ein Problem den Qbasic selber kann nur 75Baud bis 9600Baud. In der MonsterFAQ wird beschrieben wie man durch setzen von bestimmten Bits die Baudrate erhöhen kann.

Das hab iuch anders in Erinerung, bei mir hat die Einstellung 19200 Baud Einwandfrei funktioniert, als ich mein Handy angesteuert habe.
(Ich weiss, in der Online Hilfe von QBasic steht 9600 Baud, aber 19200 BAud gingen bei mir eben auch)

(Mir ist gerade aufgefallen, das ich beim Open Com unnötige Deklartionen vornehme, das ändere ich mal schnell)
_________________
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
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 24.06.2006, 20:02    Titel: Antworten mit Zitat

Bist du sicher,dass der port dann auch WIKRLICH auf 19200 gewerkelt hat?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 25.06.2006, 07:38    Titel: Antworten mit Zitat

Ich Teste es mal ...
(QBasic Programm auf Win 95 Laptop, Hyperterminal auf XP Rechner)
Melde mich gleich.

Edit:
Ja, es geht.
(Wenn ihr 2 Computer und ein Serielles Nullmodekabel könnt ihr es ja selbst Testen.)
_________________
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
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