Programm stürtzt oft ab!

  • VB6

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Modran.

    Programm stürtzt oft ab!

    Hallo,
    ich bin nicht der VB-Freak, nutze eigentlich VB6 nur für Sachen, die ich nicht mit Clickexe3 hinbekomme.

    Zu meinem Problem:
    Ich habe ein Programm geschrieben, mit welchem ich eine Textdatei (Dat_Sender.txt) auslese.

    Inhalt:
    <font color="darkblue">
    4

    2400
    ATZXL3
    26
    1/1:Kommunikationsausfall
    </font>

    Aufgrund dieser Daten wird die Rufnummer angerufen.

    Danach soll sich das Programm beenden.

    Das VB-Script sieht folgendermaßen aus:
    <font color="darkblue">
    Dim schnittstelle As Integer
    Dim amt As String
    Dim baudrate As String
    Dim inizialisierung As String
    Dim rufnummer As String
    Dim empfaengerrufnummer As String
    Dim meldung As String
    Dim setting As String
    Dim modemantwort As String
    Dim t As Integer
    Dim stufe As Integer


    Private Sub abbrechen_Click()
    abbrechen.Enabled = False
    abbrechen.Visible = False
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Abbruch" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'MSComm1.PortOpen = False
    End Sub


    Private Sub Form_Load()
    Let stufe = 0
    'Daten von FRM übernehmen
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Input As #1
    Input #1, schnittstelle
    Input #1, amt
    Input #1, baudrate
    Input #1, inizialisierung
    Input #1, empfaengerrufnummer
    Input #1, meldung
    Close #1
    'Textfelder füllen
    'Let meldetext.Text = meldung
    Let empfaenger.Text = empfaengerrufnummer
    'Setting String (Schnittstelleneinstellung) zusammenstellen
    Let setting = baudrate + ",N,8,1"
    'Schnittstelle vorbereiten
    MSComm1.CommPort = schnittstelle
    'MsgBox schnittstelle
    MSComm1.Settings = setting
    MSComm1.PortOpen = True
    MSComm1.RThreshold = 1
    MSComm1.SThreshold = 1
    MSComm1.InputLen = 0
    'Initialisierungsstring senden
    ini(0).Visible = True
    MSComm1.Output = inizialisierung + Chr(13)
    For t = 0 To 10000: Next
    melde1(0).Visible = True
    waehle(1).Visible = True
    MSComm1.Output = "ATX3DT" + amt + empfaengerrufnummer + Chr(13)
    stufe = 3
    melde2(1).Visible = True
    'verbindung(0).Visible = True
    MSComm1.Handshaking = comRTS

    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'MSComm1.PortOpen = False
    End Sub

    Private Sub MSComm1_OnComm()
    modemantwort = MSComm1.Input
    'modemantwort = Replace$(modemantwort, Chr(13), "")
    'modemantwort = Replace$(modemantwort, Chr(10), "")
    Text1.Text = Text1.Text + modemantwort ' + Chr(13)
    If stufe = 3 Then
    If InStr(1, modemantwort, "NO CARRIER") <> 0 Then
    'MsgBox "NO CARRIER!"
    'melde2(1).Caption = "ERROR!"
    'melde2(1).ForeColor = &HFF&
    'melde2(1).Visible = True
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Ruf_ok" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "BUSY") <> 0 Then
    'MsgBox "NO CARRIER!"
    'melde2(1).Caption = "ERROR!"
    'melde2(1).ForeColor = &HFF&
    'melde2(1).Visible = True
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Ruf_ok" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    End If
    If stufe < 3 Then
    If InStr(1, modemantwort, "NO CARRIER") <> 0 Then
    'MsgBox "NO CARRIER!"
    melde2(1).Caption = "ERROR!"
    melde2(1).ForeColor = &HFF&
    melde2(1).Visible = True
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "ERROR") <> 0 Then
    'MsgBox "ERROR!"
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "NO DIALTONE") <> 0 Then
    'MsgBox "NO DIALTONE!"
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "BUSY") <> 0 Then
    MsgBox "BUSY!"
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "NO ANSWER") <> 0 Then
    'MsgBox "NO ANSWER!"
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    End If
    If InStr(1, modemantwort, "OK") <> 0 Then
    'MsgBox "Test bestanden - OK"
    If melde1(0).Visible = True Then
    melde2(1).Visible = True
    'verbindung(0).Visible = True
    End If
    melde1(0).Visible = True
    End If

    End Sub
    </font>

    Leider ist es so, dass das Programm beim 1. Mal super funktioniert, allerdings ab dem 2. oder 3. Programmstart wird das Fenster nicht mehr geöffnet und das Programm steht im Task-Manager, kann aber nicht geschlossen werden, in den meisten Fällen wird kann man den PC sogar nicht mehr herunterfahren!

    Ich habe die Befürchtung, dass das Programm nicht richtig beendet wird.

    Wer kann helfen?

    Andreas

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Engfer“ ()

    Wenn sich dein Programm bei "Unload Me" in deinem Code beenden soll, schreib statt dessen einfach "END", dann ist das Programm auf jedenfall beendet.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Hm,
    das habe ich mal eben ausprobiert. Das Programm wird auch beendet, trotzdem stürzt das Programm beim 2. Start auf fatalste Art ab (keine Fehlermeldung, steht im Task-Manager, sein Fenster öffnet sich allerdings nicht, PC läßt sich nicht mehr herunterfahren).
    Du überschriebst deine Textdatei immer mit einem Text und ne menge Zeilenumbrüchen:
    Print #1, "Abbruch" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)

    Hat das eine bestimmte Bedeutung? Wenn du das Programm wieder erneut startest, versuchst du die Daten wieder zu laden:
    Input #1, schnittstelle
    Input #1, amt
    Input #1, baudrate
    Input #1, inizialisierung
    Input #1, empfaengerrufnummer
    Input #1, meldung

    "amt" hat dann z.B. den Wert "Abbruch" und die anderen Variablen sind alle LEER. Außerdem brauchst du bei den Print-Befehl keine extra-Umbrüche machen, dass macht VB ganz alleine. Außer du willst mit Absicht zwischen jeder Zeile noch eine LEERzeile haben ?
    Dann übergibst du einer Komponente den Wert von "schnittstelle":
    MSComm1.CommPort = schnittstelle

    Der Wert dürfte "Abbruch" sein und das Programm zum absturz bringen, weil MSComm1 das nicht als Port anerkennt ?!
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Ich vermute mal, er hängt beim öffnen des Ports.
    In deiner Form_Unload Anweisung ist die Zeile zum
    schliessen des Ports auskommentiert, ist das beabsichtigt ?
    (Denn sonst wird der Port nirgends geschlossen)
    Du kannst aber auch genauer ermitteln, wo das Programm
    hängt: Starte und beende es und führe es dann in
    VB Schrittweise aus, dann kommst du vielleicht dahinter,
    wo das Problem liegt.
    Es wird noch besser:

    Ich habe nun das Modem über Hyperterminal gesteuert, klappt wunderbar! Als ich aber das Hyperterminal geschlossen und wieder geöffnet habe, stürzt es genau so fatal ab.

    Scheint also weniger das Problem der Programmierung, sondern eher vom Modem zu kommen.

    Andreas
    Wenn Hyperterminal aufgrund empfangener oder gesendeter Daten abstürzt, dann würde ich sogar behaupten, daß es nicht am Modem liegt, sondern am Rechner bzw. am Betriebssystem.
    Hast Du es spaßeshalber mal an einem anderen Rechner probiert?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Modran“ ()