$regfile = "m644pdef.dat" $crystal = 16000000 $baud = 9600 $baud1 = 2400 $hwstack = 200 $swstack = 200 $framesize = 200 'Globale Variablen '############################ Informationen ##################### ' Rx/Tx = Empfang/Senden zum Pc ' Rx1/Tx1 = Empfang/Senden zu den Slaves '################################################################## Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Com2 = 2400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'Interrupt RS232 Empfang Declare Sub Serial0charmatch Declare Sub Serial1charmatch Declare Sub Daten1 Config Serialin = Buffered , Size = 20 , Bytematch = 13 Config Serialin1 = Buffered , Size = 20 , Bytematch = 13 Enable Interrupts Open "COM2:" For Binary As #2 Wait 2 Print "VacControl 1.0" Print "19.08.2014 A.Hermann" Print "Mastersystem " 'Lichtschranke1 Tog Alias Portb.0 Config Tog = Output Dim Slave As Integer Dim Incomming_data1 As String * 10 Dim S_1 As String * 10 Dim S_2 As String * 10 Dim S_3 As String * 10 Dim S_4 As String * 10 Dim S_5 As String * 10 Dim S_6 As String * 10 Dim E_1 As Bit Dim E_2 As Bit Dim Sensor As Integer Slave = 132 E_1 = 0 E_2 = 0 'Ausgangspins Deklarieren Config Portd.6 = Output Config Portd.5 = Output Licht Alias Portd.6 Test Alias Portd.5 'Hauptprogramm Main: Do Slave = 132 Waitms 500 Toggle Licht Print Slave Print #2 , Slave If E_2 = 1 Then E_2 = 0 'lesen 'Print #2 , "True" ; Slave Input #2 , Incomming_data1 Noecho Clear Serialin1 'Print #2 , "nachSerial" Call Daten1 Else !Nop End If If E_1 = 1 Then E_1 = 0 Gosub Uart1 Else End If Wait 2 Slave = 134 Print Slave Print #2 , Slave If E_2 = 1 Then E_2 = 0 'Print #2 , "True" ; Slave 'lesen Input #2 , Incomming_data1 Noecho Clear Serialin1 'Print #2 , "nachSerial" Call Daten1 Else !Nop End If If E_1 = 1 Then E_1 = 0 Gosub Uart1 Else End If Wait 2 Slave = 136 Print Slave Print #2 , Slave If E_2 = 1 Then E_2 = 0 'Print #2 , "True" ; Slave 'lesen Input #2 , Incomming_data1 Noecho Clear Serialin1 Call Daten1 Else !Nop End If If E_1 = 1 Then E_1 = 0 Gosub Uart1 Else End If Wait 2 Slave = 138 Print Slave Print #2 , Slave If E_2 = 1 Then E_2 = 0 'Print #2 , "True" ; Slave 'lesen Input #2 , Incomming_data1 Noecho Clear Serialin1 Call Daten1 Else !Nop End If If E_1 = 1 Then E_1 = 0 Gosub Uart1 Else End If Wait 2 Slave = 140 Print Slave Print #2 , Slave If E_2 = 1 Then E_2 = 0 'Print #2 , "True" ; Slave 'lesen Input #2 , Incomming_data1 Noecho Clear Serialin1 Call Daten1 Else !Nop End If If E_1 = 1 Then E_1 = 0 Gosub Uart1 Else End If Wait 2 Slave = 142 Print Slave Print #2 , Slave If E_2 = 1 Then E_2 = 0 'Print #2 , "True" ; Slave 'lesen Input #2 , Incomming_data1 Noecho Clear Serialin1 Call Daten1 Else !Nop End If If E_1 = 1 Then E_1 = 0 Gosub Uart1 Else End If Waitms 500 Toggle Licht Loop End '####################### UART 1 vom/zum PC ################## Sub Serial0charmatch() E_1 = 1 End Sub Uart1: Toggle Test Dim Incomming_data As String * 20 'lesen Input Incomming_data Noecho 'Print "Empfang UART 1" '####################### Empfangene Daten von Uart1 an Uart2 weiterleiten Print #2 , Incomming_data Print "Empfangen: " ; Incomming_data ; "Weitergeleitet" Toggle Test Return '####################### UART 2 vom/zum Microcontroller ##### Sub Serial1charmatch() E_2 = 1 'Print #2 , "Bit E_2 gesetzt" Return End Sub Sub Daten1 'Print #2 , "Rutine Daten1" Print "Empfangen von Slave: " ; Incomming_data1 Dim Adrr As String * 3 Dim Adrr_ As Integer 'Adresse von Slave Dim Druckwert As String * 4 'Übermittelter Wert Dim Empf As String * 10 Dim Druck As Single Empf = Incomming_data1 Print "Empf: " ; Empf Adrr = Left(empf , 3) Druckwert = Right(empf , 4) Print "Adrr: " ; Adrr Print "DrWert: " ; Druckwert Adrr_ = Val(adrr) Select Case Adrr_ Case 132 Sensor = 1 S_1 = Druckwert Druck = Val(s_1) Print " S1 " ; Druck Gosub Fehlerauswertung Case 134 Sensor = 2 S_2 = Druckwert Druck = Val(s_2) Print " S2 " ; Druck Gosub Fehlerauswertung Case 136 Sensor = 3 S_3 = Druckwert Druck = Val(s_3) Print " S3 " ; Druck Gosub Fehlerauswertung Case 138 Sensor = 4 S_4 = Druckwert Druck = Val(s_4) Print " S4 " ; Druck Gosub Fehlerauswertung Case 140 Sensor = 5 S_5 = Druckwert Druck = Val(s_5) Print " S5 " ; Druck Gosub Fehlerauswertung Case 142 Sensor = 6 S_6 = Druckwert Druck = Val(s_6) Print " S6 " ; Druck Gosub Fehlerauswertung Case Else !NOP End Select End Sub Fehlerauswertung: Select Case Sensor 'Print #2 , "Rutine Fehlerauswertung" Case 1 If Druck < 0.36 Then Print "Sensor 1 Druck zu niedrig" Else End If Case 2 If Druck < 0.33 Then Print "Sensor 2 Druck zu niedrig" Else End If Case 3 If Druck < 0.30 Then Print "Sensor 3 Druck zu niedrig" Else End If Case 4 If Druck < 0.27 Then Print "Sensor 4 Druck zu niedrig" Else End If Case 5 If Druck < 0.24 Then Print "Sensor 5 Druck zu niedrig" Else End If Case 6 If Druck < 0.21 Then Print "Sensor 6 Druck zu niedrig" Else End If Case Else !Nop End Select Return