datatom
07.09.2011, 21:50
Hallo zusammen,
ich bin am verzweifeln:(
Ich habe ein RN-Mega 2560 und möchte vom PC aus Daten senden und empfangen.
Wenn ich zum ersten mal den Wert 127X1 sende kann ich diesen Wert auch empfangen. Beim zweiten Durchlauf klappt das Senden wohl auch, aber das Empfangen klappt nicht. Ich empfange immer Schrott, z.B. 127XÌÌÌÌ.
Das Senden und Empfangen sieht so aus:
if(!WriteFile(hSerial, &write_char, laenge_write_char, &dwBytesWrite, NULL))
{
//error occurred. Report to user
msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei WriteFile!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
EndDialog(hwnd, 1);
return TB_ERROR;
}
else
{
string_parameter_write = write_char;
int laenge_string_write = string_parameter_write.length() - 2;
string_parameter_write2 = string_parameter_write.substr(laenge_string_write, 2);
int laenge_write_r = strlen ("\r");
if(!WriteFile(hSerial, "\r", laenge_write_r, &dwBytesWrite, NULL))
{
//error occurred. Report to user
msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei WriteFile!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
EndDialog(hwnd, 1);
return TB_ERROR;
}
else
{
string_fehlerfrei_gesendet = "Ja";
}
}
}while(string_fehlerfrei_gesendet == "Nein" );
string_fehlerfrei_gesendet = "Nein";
int do_zaehler = 1;
do // Ausführen bis der empfangene Wert der Achse, etc. gleich des gesendeten Wertes der Achse ist
{
do_zaehler ++;
int laenge_read_buffer = sizeof (dwBytesRead);
//read_buffer[8] = ' ';
if(!ReadFile(hSerial, &read_buffer, 7, &dwBytesRead, NULL))//n, &dwBytesRead, NULL))
{
//error occurred. Report to user.
msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei ReadFile!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
EndDialog(hwnd, 1);
return TB_ERROR;
}
// Achsenwert übergeben
string_parameter_read = read_buffer;
Das Programm auf dem Controller sieht so aus:
$prog , 255 , &B11011100 , '&B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Pind.5 = Output
Led Alias Portd.5
$baud = 19200
'Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Com2 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Com4 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Open "com1:" For Binary As #1 'RS232
'Open "com2:" For Binary As #2 'RS232
Open "com3:" For Binary As #3 'RS232
'Open "com4:" For Binary As #4 'RS232
Dim Eingabe As String * 50
Dim Ausgabe As String * 6
Dim String1 As String * 3
Dim String2 As String * 2
Dim X1_position As Integer
Dim Y1_position As Integer
Dim Z1_position As Integer
Config Porth = Output
Out1 Alias Porth.0
Out2 Alias Porth.1
Out3 Alias Porth.2
Out4 Alias Porth.3
Out5 Alias Porth.4
Out6 Alias Porth.5
Out7 Alias Porth.6
Out8 Alias Porth.7
Declare Sub Daten_empfangen()
Declare Sub Daten_senden()
Do
Led = 0
Call Daten_empfangen()
Led = 1
Call Daten_senden()
Loop
End
Sub Daten_empfangen()
Input Eingabe
String1 = Mid(eingabe , 1 , 3)
String2 = Mid(eingabe , 4 , 2)
Ausgabe = String1 + String2 + Chr(13)
If String2 = "X1" Then
X1_position = Val(string1)
End If
If String2 = "Y1" Then
Y1_position = Val(string1)
End If
If String2 = "Z1" Then
Z1_position = Val(string1)
End If
End Sub
Sub Daten_senden()
If Ausgabe = "127X1" Then
Led = 0
Waitms 20
Led = 1
Waitms 20
Led = 0
Waitms 20
Led = 1
Waitms 20
Led = 0
Waitms 20
Led = 1
Waitms 20
Led = 0
Waitms 20
Led = 1
Waitms 20
Else
Led = 0
Wait 2
Led = 1
Wait 2
End If
Print Ausgabe
End Sub
Ich krieg es einfach nicht hin. Vielleicht hat ja jemand einen Tip.
Grüße
datatom
ich bin am verzweifeln:(
Ich habe ein RN-Mega 2560 und möchte vom PC aus Daten senden und empfangen.
Wenn ich zum ersten mal den Wert 127X1 sende kann ich diesen Wert auch empfangen. Beim zweiten Durchlauf klappt das Senden wohl auch, aber das Empfangen klappt nicht. Ich empfange immer Schrott, z.B. 127XÌÌÌÌ.
Das Senden und Empfangen sieht so aus:
if(!WriteFile(hSerial, &write_char, laenge_write_char, &dwBytesWrite, NULL))
{
//error occurred. Report to user
msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei WriteFile!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
EndDialog(hwnd, 1);
return TB_ERROR;
}
else
{
string_parameter_write = write_char;
int laenge_string_write = string_parameter_write.length() - 2;
string_parameter_write2 = string_parameter_write.substr(laenge_string_write, 2);
int laenge_write_r = strlen ("\r");
if(!WriteFile(hSerial, "\r", laenge_write_r, &dwBytesWrite, NULL))
{
//error occurred. Report to user
msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei WriteFile!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
EndDialog(hwnd, 1);
return TB_ERROR;
}
else
{
string_fehlerfrei_gesendet = "Ja";
}
}
}while(string_fehlerfrei_gesendet == "Nein" );
string_fehlerfrei_gesendet = "Nein";
int do_zaehler = 1;
do // Ausführen bis der empfangene Wert der Achse, etc. gleich des gesendeten Wertes der Achse ist
{
do_zaehler ++;
int laenge_read_buffer = sizeof (dwBytesRead);
//read_buffer[8] = ' ';
if(!ReadFile(hSerial, &read_buffer, 7, &dwBytesRead, NULL))//n, &dwBytesRead, NULL))
{
//error occurred. Report to user.
msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei ReadFile!",
(LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION);
EndDialog(hwnd, 1);
return TB_ERROR;
}
// Achsenwert übergeben
string_parameter_read = read_buffer;
Das Programm auf dem Controller sieht so aus:
$prog , 255 , &B11011100 , '&B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Pind.5 = Output
Led Alias Portd.5
$baud = 19200
'Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Com2 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Com4 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Open "com1:" For Binary As #1 'RS232
'Open "com2:" For Binary As #2 'RS232
Open "com3:" For Binary As #3 'RS232
'Open "com4:" For Binary As #4 'RS232
Dim Eingabe As String * 50
Dim Ausgabe As String * 6
Dim String1 As String * 3
Dim String2 As String * 2
Dim X1_position As Integer
Dim Y1_position As Integer
Dim Z1_position As Integer
Config Porth = Output
Out1 Alias Porth.0
Out2 Alias Porth.1
Out3 Alias Porth.2
Out4 Alias Porth.3
Out5 Alias Porth.4
Out6 Alias Porth.5
Out7 Alias Porth.6
Out8 Alias Porth.7
Declare Sub Daten_empfangen()
Declare Sub Daten_senden()
Do
Led = 0
Call Daten_empfangen()
Led = 1
Call Daten_senden()
Loop
End
Sub Daten_empfangen()
Input Eingabe
String1 = Mid(eingabe , 1 , 3)
String2 = Mid(eingabe , 4 , 2)
Ausgabe = String1 + String2 + Chr(13)
If String2 = "X1" Then
X1_position = Val(string1)
End If
If String2 = "Y1" Then
Y1_position = Val(string1)
End If
If String2 = "Z1" Then
Z1_position = Val(string1)
End If
End Sub
Sub Daten_senden()
If Ausgabe = "127X1" Then
Led = 0
Waitms 20
Led = 1
Waitms 20
Led = 0
Waitms 20
Led = 1
Waitms 20
Led = 0
Waitms 20
Led = 1
Waitms 20
Led = 0
Waitms 20
Led = 1
Waitms 20
Else
Led = 0
Wait 2
Led = 1
Wait 2
End If
Print Ausgabe
End Sub
Ich krieg es einfach nicht hin. Vielleicht hat ja jemand einen Tip.
Grüße
datatom