Snecx
19.04.2009, 22:31
Hallo
ich habe einen Gerät welches ich über Rs232 steuern will. Dazu nutze ich ZigBee Module. Ist praktisch eine Drahtlose Verbindung zwischen PC und dem Gerät. Weil ich mehr als 2 Module einsetzt muss ich dem Gerät sagen wohin er die Antwort senden soll.
Deswegen habe ich mir mit dem AT162 einen Converter gebaut.
An der ser1 des AT ist das Gerät mit Max232 und am ser2 das Zigbee.
Schicke ich jetzt einen Befehl an das ZigBee dann wird es einfach nur an der Schnittstelle zum Gerät ausgegeben.
Antwortet jetzt das Gerät dann muss vor der Antwort noch ein Prefix vor.
Dieser komplette String wird jetzt an das ZigBee zurückgesendet.
das Modul schickt dann die Antwort zurück.
Diesen Converter habe ich schon in Betrieb. Mein Receiver funktioniert damit.
Vom zweiten Gerät (2tes Modul) bekomme ich aber keine Antwort.
Verbinde ich aber das Gerät direkt mit dem PC bekomme ich eine Antwort.
Bsp: PC-->Beamer ich sende 21h 81h 00h 0ah
als Antwort kommt 41h 81h 00h 0ah
Setze ich jetzt mein Modul dazwichen kann ich zwar das Gerät steuern ich bekomme aber keine Antwort.
Wie gesagt mit einem Anderen Gerät bekomme ich auch eine Antwort.
Bei dem Gerät welches funzt ist die Schnittstelle auch mit 9600Baud und das Endbyte ist 13 (If A = 13 Then)
Bei dem Gerät welches nicht funzt ist die Schnittstelle 19200 baud und das Endbyte ist 10 (wie unten im Quelltext zu sehen)
Jemand eine Idee??
$regfile = "m162def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$hwstack = 40 ' default use 32 for the hardware stack
$swstack = 40 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
$timeout = 1000000
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Enable Interrupts
Config Serialin = Buffered , Size = 80 , Bytematch = All
Config Serialin1 = Buffered , Size = 80 , Bytematch = All
Open "COM2:" For Binary As #2
Dim A As Byte
Dim B As Byte
Dim Tmp As String * 80
Dim Tmp2 As String * 80
Dim Tmp3 As String * 80
Dim Tmp4 As String * 80
Dim T As String * 80
Dim Lock As Byte
Config Portd.7 = Output
Lock = 1
Do
Portd.7 = 1
Waitms 500
Portd.7 = 0
Waitms 500
Loop
Rem //////////// Mit Max 232 --- to device
Serial0bytereceived:
A = Inkey()
If A = 10 Then
Tmp2 = "AT+SCAST:" + Tmp + Chr(13)
Print #2 , Tmp2
Lock = 1
T = ""
Tmp = ""
Tmp2 = ""
Tmp3 = ""
Tmp4 = ""
Else
Tmp = Tmp + Chr(a)
End If
Return
Rem ///////////// ZigBee
Serial1bytereceived:
B = Inkey(#2)
If B = Chr(10) Then
If Lock = 1 Then
T = Mid(tmp3 , 2)
Print T;
Lock = 0
Else
Print Tmp3;
End If
T = ""
Tmp = ""
Tmp2 = ""
Tmp3 = ""
Tmp4 = ""
Else
Tmp3 = Tmp3 + Chr(b)
End If
Return
End
ich habe einen Gerät welches ich über Rs232 steuern will. Dazu nutze ich ZigBee Module. Ist praktisch eine Drahtlose Verbindung zwischen PC und dem Gerät. Weil ich mehr als 2 Module einsetzt muss ich dem Gerät sagen wohin er die Antwort senden soll.
Deswegen habe ich mir mit dem AT162 einen Converter gebaut.
An der ser1 des AT ist das Gerät mit Max232 und am ser2 das Zigbee.
Schicke ich jetzt einen Befehl an das ZigBee dann wird es einfach nur an der Schnittstelle zum Gerät ausgegeben.
Antwortet jetzt das Gerät dann muss vor der Antwort noch ein Prefix vor.
Dieser komplette String wird jetzt an das ZigBee zurückgesendet.
das Modul schickt dann die Antwort zurück.
Diesen Converter habe ich schon in Betrieb. Mein Receiver funktioniert damit.
Vom zweiten Gerät (2tes Modul) bekomme ich aber keine Antwort.
Verbinde ich aber das Gerät direkt mit dem PC bekomme ich eine Antwort.
Bsp: PC-->Beamer ich sende 21h 81h 00h 0ah
als Antwort kommt 41h 81h 00h 0ah
Setze ich jetzt mein Modul dazwichen kann ich zwar das Gerät steuern ich bekomme aber keine Antwort.
Wie gesagt mit einem Anderen Gerät bekomme ich auch eine Antwort.
Bei dem Gerät welches funzt ist die Schnittstelle auch mit 9600Baud und das Endbyte ist 13 (If A = 13 Then)
Bei dem Gerät welches nicht funzt ist die Schnittstelle 19200 baud und das Endbyte ist 10 (wie unten im Quelltext zu sehen)
Jemand eine Idee??
$regfile = "m162def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$hwstack = 40 ' default use 32 for the hardware stack
$swstack = 40 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
$timeout = 1000000
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Enable Interrupts
Config Serialin = Buffered , Size = 80 , Bytematch = All
Config Serialin1 = Buffered , Size = 80 , Bytematch = All
Open "COM2:" For Binary As #2
Dim A As Byte
Dim B As Byte
Dim Tmp As String * 80
Dim Tmp2 As String * 80
Dim Tmp3 As String * 80
Dim Tmp4 As String * 80
Dim T As String * 80
Dim Lock As Byte
Config Portd.7 = Output
Lock = 1
Do
Portd.7 = 1
Waitms 500
Portd.7 = 0
Waitms 500
Loop
Rem //////////// Mit Max 232 --- to device
Serial0bytereceived:
A = Inkey()
If A = 10 Then
Tmp2 = "AT+SCAST:" + Tmp + Chr(13)
Print #2 , Tmp2
Lock = 1
T = ""
Tmp = ""
Tmp2 = ""
Tmp3 = ""
Tmp4 = ""
Else
Tmp = Tmp + Chr(a)
End If
Return
Rem ///////////// ZigBee
Serial1bytereceived:
B = Inkey(#2)
If B = Chr(10) Then
If Lock = 1 Then
T = Mid(tmp3 , 2)
Print T;
Lock = 0
Else
Print Tmp3;
End If
T = ""
Tmp = ""
Tmp2 = ""
Tmp3 = ""
Tmp4 = ""
Else
Tmp3 = Tmp3 + Chr(b)
End If
Return
End