 |
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 |
saefter
Anmeldungsdatum: 13.12.2006 Beiträge: 1
|
Verfasst am: 13.12.2006, 23:16 Titel: Modemmeldung am seriellen Port abfragen |
|
|
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  |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 14.12.2006, 17:28 Titel: |
|
|
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 |
|
 |
Steini63
Anmeldungsdatum: 11.11.2004 Beiträge: 28 Wohnort: 30926 Seelze
|
Verfasst am: 14.12.2006, 20:12 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|