-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathComPortClass.cs
277 lines (248 loc) · 8.59 KB
/
ComPortClass.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.IO;
using System.Windows.Forms;
namespace CellInfo
{
public class ComPortClass
{
public SerialPort sp = new SerialPort();
/// <summary>
/// 串口参数配置
/// </summary>
/// <param name="Portname"></param>
/// <param name="Baudrate"></param>
/// <param name="handshake"></param>
/// <param name="parity"></param>
/// <param name="Databits"></param>
/// <param name="Stopbits"></param>
public void Port_Assignment(string Portname, int Baudrate, string handshake, string parity, int Databits, string Stopbits)
{
sp.PortName = Portname;
sp.BaudRate = Baudrate;
switch (handshake)
{
case "None":
sp.Handshake = Handshake.None;
break;
case "XonXoff":
sp.Handshake = Handshake.XOnXOff;
break;
case "RequestToSend":
sp.Handshake = Handshake.RequestToSend;
break;
case "RequestToSendXonXoff":
sp.Handshake = Handshake.RequestToSendXOnXOff;
break;
default:
MessageBox.Show("Handshake尚未输入", "提示信息");
break;
}
switch (parity)
{
case "None":
sp.Parity = Parity.None;
break;
case "Odd":
sp.Parity = Parity.Odd;
break;
case "Even":
sp.Parity = Parity.Even;
break;
case "Mark":
sp.Parity = Parity.Mark;
break;
case "Space":
sp.Parity = Parity.Space;
break;
default:
MessageBox.Show("Parity尚未输入", "提示信息");
break;
}
switch (Stopbits)
{
case "One":
sp.StopBits = StopBits.One;
break;
case "Two":
sp.StopBits = StopBits.Two;
break;
case "OnePointFive":
sp.StopBits = StopBits.OnePointFive;
break;
default:
MessageBox.Show("Stop Bits尚未输入", "提示信息");
break;
}
sp.DataBits = Databits;
sp.ReceivedBytesThreshold = 16;
}
//------------------------串口操作部分开始-------------------------
/// <summary>
/// 打开串口
/// </summary>
/// <returns></returns>
internal bool OpenComPort()
{
bool success = false;
if ((!(sp.IsOpen)))
{
sp.Open();
if (sp.IsOpen)
{
sp.ReadTimeout = 5000;
sp.WriteTimeout = 5000;
// Specify the routines that run when a DataReceived or ErrorReceived event occurs.
// Send data to other modules.
success = true;
// The port is open with the current parameters.
}
}
return success;
}
/// <summary>
/// 关闭串口
/// </summary>
/// <param name="portToClose"></param>
internal void CloseComPort(SerialPort portToClose)
{
object transTemp0 = portToClose;
if (!(transTemp0 == null))
{
if (portToClose.IsOpen)
{
portToClose.Close();
}
}
}
/// <summary>
/// Provide a central mechanism for displaying exception information.
/// Display a message that describes the exception.
/// </summary>
///
/// <param name="ex"> The exception </param>
/// <param name="moduleName" > the module where the exception was raised. </param>
private void DisplayException(string moduleName, Exception ex)
{
string errorMessage = null;
errorMessage = "Exception: " + ex.Message + " Module: " + moduleName + ". Method: " + ex.TargetSite.Name;
}
/// <summary>
/// Respond to error events.
/// </summary>
private void ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
{
SerialError SerialErrorReceived1 = 0;
SerialErrorReceived1 = e.EventType;
switch (SerialErrorReceived1)
{
case SerialError.Frame:
Console.WriteLine("Framing error.");
break;
case SerialError.Overrun:
Console.WriteLine("Character buffer overrun.");
break;
case SerialError.RXOver:
Console.WriteLine("Input buffer overflow.");
break;
case SerialError.RXParity:
Console.WriteLine("Parity error.");
break;
case SerialError.TXFull:
Console.WriteLine("Output buffer full.");
break;
}
}
/// <summary>
/// 接收事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataReceived(Object sender, SerialDataReceivedEventArgs e)
{
System.Windows.Forms.MessageBox.Show(sp.ReadExisting());
}
//------------------------串口操作部分结束-------------------------
//--------------------------AT命令开始--------------------
/// <summary>
/// 当前小区信息AT命令
/// </summary>
/// <returns></returns>
public string AT_Serving(int time)
{
try
{
sp.Write("AT^MONI\r");
Thread.Sleep(time);
byte[] buffer = new byte[sp.BytesToRead];
sp.Read(buffer, 0, buffer.Length);
return System.Text.Encoding.ASCII.GetString(buffer);
}
catch
{
return "发送失败!";
}
}
/// <summary>
/// 邻居小区信息AT命令
/// </summary>
/// <returns></returns>
public string AT_Neighbor(int time)
{
try
{
sp.Write("AT^MONP\r");
Thread.Sleep(time);
byte[] buffer = new byte[sp.BytesToRead];
sp.Read(buffer, 0, buffer.Length);
return System.Text.Encoding.ASCII.GetString(buffer);
}
catch
{
return "发送失败!";
}
}
/// <summary>
/// 小区监控_1AT命令
/// </summary>
/// <returns></returns>
public string AT_CellMonitor_1(int time)
{
try
{
sp.Write("AT^SMONC\r");
Thread.Sleep(time);
byte[] buffer = new byte[sp.BytesToRead];
sp.Read(buffer, 0, buffer.Length);
return System.Text.Encoding.ASCII.GetString(buffer);
}
catch
{
return "发送失败!";
}
}
/// <summary>
/// 小区监控_2AT命令
/// </summary>
/// <returns></returns>
public string AT_CellMonitor_2(int time)
{
try
{
sp.Write("AT^SMNOD\r");
Thread.Sleep(time);
byte[] buffer = new byte[sp.BytesToRead];
sp.Read(buffer, 0, buffer.Length);
return System.Text.Encoding.ASCII.GetString(buffer);
}
catch
{
return "发送失败!";
}
}
//--------------------------AT命令结束--------------------
}
}