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:

Modemmeldung am seriellen Port abfragen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
saefter



Anmeldungsdatum: 13.12.2006
Beiträge: 1

BeitragVerfasst am: 13.12.2006, 23:16    Titel: Modemmeldung am seriellen Port abfragen Antworten mit Zitat

Hallo !
Ich habe mich heute im Forum angemeldet, weil ich ein QB-Problem habe, mit dem ich nicht weiter komme.
Und auch in den FAQs habe ich nichts gefunden.
Erstmal zum Hintergrund: ich habe eine ISDN-Telefonanlage, die ich umkonfigurieren müsste. Dazu braucht man eine 4-stellige PIN
( von 0000 bis 9999 ), und die weiss keiner mehr. Nun kann man mit einem Tonwahltelefon die Anlage auch konfigurieren
und auch die PIN ändern, vorausgesetzt, man kennt die alte oder man man benötigt max. 10000 Versuche.
Der Ablauf ist so: Rufnummer #82 wählen, alte PIN, zweimal neue PIN (1234,1234).
Diese Arbeit wollte ich einem Modem überlassen, welches von einem QB-Programm gesteuert wird. Ich habe mich also als blutiger Anfänger daran gemacht, ein Programm zuschreiben, mit welchen erstmal die fortlaufenden 4-stelligen Zahlen erzeugt werden, die als alte PIN versucht werden sollen. Das machewn 4 FOR-NEXT-Schleifen. Dann wird ein String zusammengesetzt, der an das Modem gesendet wird ("atdt#82,<Ergebnis der FOR-NEXT-Schleifen>,1234,1234<CR>.
( die Kommas sorgen für eine Pause zwischen den Wahlziffern und sind gewollt ) Soweit der Plan, es hat sich jedoch gezeigt, dass die Strings zu schnell nacheinander an das Modem geschickt werden. Der Zweite kommt schon, wenn das Modem
der ersten noch wählt. Aber einfach mit Sleep ein paar Sekunden zu warten, brachte mich auch nicht weiter.
Wenn ich das Modem mit einem Terminalprogramm steurere, also den Wahlstring eintippe, läuft es so ab. Das Modem wählt, erhält nach Wahl der ( bisher immer falschen ) PIN ein Besetztzeichen von der Telefonanlage, worauf es auflegt und ein "BUSY"
an das Terminal sendet.
Nun habe ich vergeblich versucht, dieses "BUSY" in das QB ein zu lesen, um erst dann mit dem nächsten Wahlstring weiter zu machen.

Also, darum geht es mir jetzt: ich möchte das Programm so lange warten lassen bis es das Wort "BUSY" an der COM empfängt. Erst dann soll der nächste String gesendet werden.
Ich hoffe, ihr habt die Lösung für mich.

Vielen Dank an jene, die schon mal bis hierher gelesen haben

Hier noch das bisherige Programm
u$ = CHR$(13)
t% = 0
h% = 0
z% = 0
e% = 0
CLS
FOR t% = 0 TO 0 ;Tausenderstelle erzeugen
FOR h% = 0 TO 0 ;Hunderterstelle erzeugen
FOR z% = 0 TO 0 ;Zehnerstelle erzeugen
FOR e% = 0 TO 0 ;Einerstelle erzeugen
GOSUB Ausgabe
NEXT e%
NEXT z%
NEXT h%
NEXT t%
END
Ausgabe:
t$ = CHR$(48 + t%) ;Tausender in Hex
h$ = CHR$(48 + h%) ;Hunderter in Hex
z$ = CHR$(48 + z%) ;Zehner in Hex
e$ = CHR$(48 + e%) ;Einer in Hex
a$ = "atdt #82" ;String für Rufnummer
b$ = "1234,1234" ;String für neue PIN
c$ = t$ + h$ + z$ + e$ ;String mit Versuchspin erzeugen
k$ = "," ;String für Wahlpause
f$ = a$ + k$ + c$ + k$ + b$ + u$ ;Kompletter Wahlstring
PRINT f$ ;Wahlstring am Bildschirm
OPEN "COM1:300,N,8,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1 ;Com 1 öffnen
REM SLEEP (5)
PRINT #1, f$; ;Wahlstring ans Modem senden
REM SLEEP (12)
CLOSE 1 :Com 1 schliessen
RETURN
END mit dem Kopf durch die Mauer wollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 14.12.2006, 17:28    Titel: Antworten mit Zitat

ouhh...
ich kann mich da etz auch irren, aber kann man das nicht mit IN XXX,busy% machen??
also statt XXX die adresse des modems und busy muss man glaubich noch weiter splitten...
ka obs so geht..
_________________
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: 14.12.2006, 20:12    Titel: Antworten mit Zitat

Hallo saefter

Code:
Antwort$ = INPUT$(4, #1)

wartet, bis 4 Zeichen eingegangen sind (z.B. "BUSY").

Gib danach erstmal
Code:
SLEEP 1
PRINT LOC(1)

Damit kannst du prüfen, ob noch mehr Zeichen vom Modem gesendet werden (z.B. Zeilenumbüche oder so). Wird z.B. 2 angezeigt, sind noch zwei Zeichen im Empfangspuffer. Beim nächsten Start änderst du dann einfach auf
Code:
Antwort$ = INPUT$(6, #1)

den SLEEP/LOC - Kram brauchst du dann nicht mehr.

Noch ein paar Hinweise:
Die Schnittstelle brauchst du nur einmal am Anfang öffnen und vor END wieder schließen. Ich hoffe du nimmst andere Kommentarzeichen als ein Semikolon.
_________________
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 -> Allgemeine Fragen zu QBasic. 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