Private Sub Open_Com() ' öffnet die eingestellte COM-Schnittstelle If Demo_Mode.Checked = False Then Com_Error = False On Error Resume Next MSComm.Settings = "38400,n,8,1" MSComm.CommPort = Comport MSComm.InBufferSize = Bufferlen ' Buffer für Zeichen + 1 für "D" + Reserve MSComm.InputLen = 0 ' mit Input kompletten Buffer lesen MSComm.SThreshold = 0 If Reset_Flag = True Then ' Reset der Hardware MSComm.InputMode = comInputModeText If Debug_Einstellungen.Checked = True Then ' für Debug werden auch kürzere Meldungen empfangen MSComm.RThreshold = 30 ' minimal Länge der Hardwaremeldung bei Debug Else MSComm.RThreshold = 54 ' Länge der gültigen Hardwaremeldung End If MSComm.PortOpen = True If MSComm.PortOpen = False Then Status.BackColor = RGB(255, 0, 0) MsgBox ("COM " & Comport & " Problem: " & Err.Description) Com_Error = True Else Status.BackColor = RGB(0, 255, 0) End If Else MSComm.InputMode = comInputModeBinary MSComm.RThreshold = Receivelen ' Anzahl Sampldaten MSComm.PortOpen = True If MSComm.PortOpen = False Then Status.BackColor = RGB(255, 0, 0) MsgBox ("COM " & Comport & " Problem: " & Err.Description) Com_Error = True Else Status.BackColor = RGB(0, 255, 0) End If End If End If End Sub --------------------------------------------- Private Sub MSComm_OnComm() ' Anzahl Samplebytes empfamgen oder COM-Fehler Dim Debugdaten As Variant If Demo_Mode.Checked = False Then If Reset_Flag = True Then ' Hardware-Meldung erwartet Timer_Com.Enabled = False Select Case MSComm.CommEvent Case comEvReceive ' Eingestellte Anzahl Bytes empfangen Datenbuffer = MSComm.Input ' Daten vom Resetkommando empfangen Case Else MsgBox ("Übertragungsfehler!") End Select If Debug_Einstellungen.Checked = True Then MsgBox ("### Debug ON ###") End If If InStr(Datenbuffer, "MiniLog ") Then ' hat da überhaupt ein MiniLog geantwortet? HW_Version = Mid(Datenbuffer, 25, 3) ' Version merken SW_Version = Mid(Datenbuffer, 41, 3) If InStr(Datenbuffer, " 80MHz Hardware") Then Clock_80_Flag = True Call Set_Timing_80 ElseIf InStr(Datenbuffer, " 50MHz Hardware") Then Clock_80_Flag = False Call Set_Timing_50 Else MsgBox ("Speichertakt nicht unterstützt!") End If MsgBox (Datenbuffer) ' Meldung vom MiniLog anzeigen Ram32k_Flag = False ' erstmal keine 32k annehmen Ram32k_Teil2 = False Samplestart = 20 If InStr(Datenbuffer, " 4kB") Then Samplelen = 4000 Bufferlen = 4200 Receivelen = 4096 ReDim Datenbuffer(Bufferlen) As Byte ElseIf InStr(Datenbuffer, " 8kB") Then Samplelen = 8000 Bufferlen = 8400 Receivelen = 8192 ReDim Datenbuffer(Bufferlen) As Byte ElseIf InStr(Datenbuffer, " 16kB") Then Samplelen = 16000 Bufferlen = 16600 Receivelen = 16384 ReDim Datenbuffer(Bufferlen) As Byte ElseIf InStr(Datenbuffer, " 32kB") Then Samplelen = 32000 Bufferlen = 16600 Receivelen = 16384 Ram32k_Flag = True Ram32k_Teil2 = False ReDim Datenbuffer(Bufferlen) As Byte ReDim Ram32k_Buffer(Bufferlen) As Byte Else Samplelen = 8000 Bufferlen = 8400 Receivelen = 8192 ReDim Datenbuffer(Bufferlen) As Byte MsgBox ("Speichergröße nicht unterstützt!") End If End If If MSComm.PortOpen = True Then MSComm.PortOpen = False End If Else If Stop_Flag = False Then ' bei Stop Daten verwerfen Select Case MSComm.CommEvent Case comEvReceive ' Eingestellte Anzahl Bytes empfangen If Ram32k_Flag = False Then ' weniger als 32k Ram kann im Stück gelesen werden Datenbuffer = MSComm.Input Else Ram32k_Buffer = MSComm.Input If Ram32k_Teil2 = False Then ' 1. Teil bei 32k Ram ReDim Datenbuffer(32767) As Byte For i = 0 To 16383 Datenbuffer(i) = Ram32k_Buffer(i) Next Ram32k_Teil2 = True MSComm.Output = "*" ' 2. Hälfte bestellen Else For i = 0 To 16383 Datenbuffer(i + 16384) = Ram32k_Buffer(i) Next Ram32k_Teil2 = False End If End If If Ram32k_Teil2 = False Then ' 2. Teil bei 32k Ram Sample_Flag = False ' Trigger muß neu berechnet werden Trigger_Timer.Enabled = False ' Timer für Triggerabstand abschalten Trigger_Time = (Trigger_Time * 10) - 250 ' ca. Zeit für Sample und Daten holen abziehen If Trigger_Time < 0 Then Trigger_Time = 0 ' 9 falls < 0, Ungenauigkeit End If If Trigger_Time > 1000 Then Trigger_Time = Trigger_Time / 1000 B_Trigger_Masseinheit.Caption = "s" Else B_Trigger_Masseinheit.Caption = "ms" End If B_Trigger_Time.Text = Trigger_Time End If Case Else MsgBox ("Übertragungsfehler! " & MSComm.CommEvent) Call Clear_Buffer End Select End If If Ram32k_Teil2 = False Then ' 2. Teil bei 32k holen ? If MSComm.PortOpen = True Then ' nein, Schnittstelle schließen MSComm.PortOpen = False End If Trigger_Position = Find_Edge(Trigger_Position, 200, 0) ' Triggerposition suchen Call Draw_Sample ' Sample anzeigen If B_Auto.Value = Checked Then Timer_Auto.Enabled = True ' bei Auto-Mode Pause einlegen Else Call Enable_Button ' kein Auto aktiv End If End If End If End If Reset_Flag = False ' Reset-Aufforderung abschalten End Sub