Ich mal wieder..
Ich habe es mal in C# versucht was zu coden.
1 | namespace RS232_serialport
|
2 | {
|
3 | public delegate void RS232_Receive_Handler(string datain);//object sender, EventArgs e);
|
4 |
|
5 | public class RS232
|
6 | {
|
7 | private SerialPort SP = new SerialPort("COM1");
|
8 | public RS232_Receive_Handler _RS232_receive_handler;
|
9 |
|
10 | public RS232()
|
11 | {
|
12 |
|
13 | }
|
14 |
|
15 | public void RS232_init()
|
16 | {
|
17 | SP.BaudRate = 9600;
|
18 | SP.Parity = Parity.None;
|
19 | SP.StopBits = StopBits.One;
|
20 | SP.DataBits = 8;
|
21 | SP.Handshake = Handshake.None;
|
22 | SP.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
|
23 |
|
24 | SP.Open();
|
25 | RS232_empfang("teststring");
|
26 | }
|
27 |
|
28 | public bool RS232_isopen()
|
29 | {
|
30 | if (SP.IsOpen) { return true; }
|
31 | return false;
|
32 | }
|
33 |
|
34 | public void RS232_close()
|
35 | {
|
36 | SP.Close();
|
37 | }
|
38 |
|
39 | public void RS232_empfang(string datain)
|
40 | {
|
41 | _RS232_receive_handler(datain);
|
42 | }
|
43 |
|
44 | public void RS232_cons(string datain)
|
45 | {
|
46 | RS232_empfang(datain);
|
47 | }
|
48 |
|
49 | private static void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
|
50 | {
|
51 | RS232 _rs232 = new RS232();
|
52 |
|
53 | SerialPort sp = (SerialPort)sender;
|
54 | string indata = sp.ReadExisting();
|
55 | // Console.WriteLine("Data Received:");
|
56 | // Console.Write(indata);
|
57 | //_rs232.RS232_cons(indata);
|
58 |
|
59 | }
|
60 |
|
61 | }
|
62 | }
|
Einglich alles wie in C++ nur in C# geschrieben. Aber ich bekomme eine
Nullexception, sobald ich von der Datareveice ins RS232_empfang(datain);
geht, da in RS232_empfang scheinbar die
"_RS232_receive_handler(datain);" nicht mehr auffingbar ist.
Hat einer eine Idee?
Invoke geht bei den Punkt irgendwie nicht und ich find meist nur direkt
in GUI hilfe in Verbindung mit Invoke.
Ich will einglich die Daten aus dem Reveicehandler rausschicken zu
meinem eigenen Handler, der dann in einer Gui extra verwaltet wird.
Ist das ungewöhnlich die ganze RS232 geschichte in eine extra Klasse zu
verpacken, wo auch die ganze Datenverarbeitung drin steckt?
In der GUI wollt ich dann einglich nur aufrufe machen, zb RS232_config,
init...