Form1.cs
上传用户:svehicle
上传日期:2013-07-27
资源大小:62k
文件大小:23k
源码类别:

C#编程

开发平台:

C#

  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.Windows.Forms;
  5. using System.Data;
  6. using System.Runtime.InteropServices; 
  7. using System.Threading;
  8. namespace SerialAPI 
  9. /// <summary> 
  10. /// SerialPort 的摘要说明。 
  11. /// </summary> 
  12. public class SerialPort 
  13. #region 申明要引用的和串口调用有关的API 
  14. //win32 api constants 
  15. private const uint GENERIC_READ = 0x80000000; 
  16. private const uint GENERIC_WRITE = 0x40000000; 
  17. private const int OPEN_EXISTING = 3; 
  18. private const int INVALID_HANDLE_VALUE = -1; 
  19. private const int MAXBLOCK = 4096; 
  20. private const uint PURGE_TXABORT = 0x0001; // Kill the pending/current writes to the comm port. 
  21. private const uint PURGE_RXABORT = 0x0002; // Kill the pending/current reads to the comm port. 
  22. private const uint PURGE_TXCLEAR = 0x0004; // Kill the transmit queue if there. 
  23. private const uint PURGE_RXCLEAR = 0x0008; // Kill the typeahead buffer if there. 
  24. [StructLayout(LayoutKind.Sequential)] 
  25. private struct DCB 
  26. //taken from c struct in platform sdk 
  27. public int DCBlength; // sizeof(DCB) 
  28. public int BaudRate; // current baud rate 
  29. public int fBinary; // binary mode, no EOF check 
  30. public int fParity; // enable parity checking 
  31. public int fOutxCtsFlow; // CTS output flow control 
  32. public int fOutxDsrFlow; // DSR output flow control 
  33. public int fDtrControl; // DTR flow control type 
  34. public int fDsrSensitivity; // DSR sensitivity 
  35. public int fTXContinueOnXoff; // XOFF continues Tx 
  36. public int fOutX; // XON/XOFF out flow control 
  37. public int fInX; // XON/XOFF in flow control 
  38. public int fErrorChar; // enable error replacement 
  39. public int fNull; // enable null stripping 
  40. public int fRtsControl; // RTS flow control 
  41. public int fAbortOnError; // abort on error 
  42. public int fDummy2; // reserved 
  43. public ushort wReserved; // not currently used 
  44. public ushort XonLim; // transmit XON threshold 
  45. public ushort XoffLim; // transmit XOFF threshold 
  46. public byte ByteSize; // number of bits/byte, 4-8 
  47. public byte Parity; // 0-4=no,odd,even,mark,space 
  48. public byte StopBits; // 0,1,2 = 1, 1.5, 2 
  49. public char XonChar; // Tx and Rx XON character 
  50. public char XoffChar; // Tx and Rx XOFF character 
  51. public char ErrorChar; // error replacement character 
  52. public char EofChar; // end of input character 
  53. public char EvtChar; // received event character 
  54. public ushort wReserved1; // reserved; do not use 
  55. [StructLayout(LayoutKind.Sequential)] 
  56. private struct COMMTIMEOUTS 
  57. public int ReadIntervalTimeout; 
  58. public int ReadTotalTimeoutMultiplier; 
  59. public int ReadTotalTimeoutConstant; 
  60. public int WriteTotalTimeoutMultiplier; 
  61. public int WriteTotalTimeoutConstant; 
  62. [StructLayout(LayoutKind.Sequential)] 
  63. private struct OVERLAPPED 
  64. public int Internal; 
  65. public int InternalHigh; 
  66. public int Offset; 
  67. public int OffsetHigh; 
  68. public int hEvent; 
  69. [StructLayout(LayoutKind.Sequential)] 
  70. private struct COMSTAT 
  71. /*public int fCtsHold; 
  72. public int fDsrHold; 
  73. public int fRlsdHold; 
  74. public int fXoffHold; 
  75. public int fXoffSent; 
  76. public int fEof; 
  77. public int fTxim; 
  78. public int fReserved; 
  79. public int cbInQue; 
  80. public int cbOutQue;*/ 
  81. // Should have a reverse, i don't know why!!!!! 
  82. public int cbOutQue; 
  83. public int cbInQue; 
  84. public int fReserved; 
  85. public int fTxim; 
  86. public int fEof; 
  87. public int fXoffSent; 
  88. public int fXoffHold; 
  89. public int fRlsdHold; 
  90. public int fDsrHold; 
  91. public int fCtsHold; 
  92. #if FULLFRAMEWORK 
  93. [DllImport("kernel32")] 
  94. private static extern int CreateFile( 
  95. string lpFileName, // file name 
  96. uint dwDesiredAccess, // access mode 
  97. int dwShareMode, // share mode 
  98. int lpSecurityAttributes, // SD 
  99. int dwCreationDisposition, // how to create 
  100. int dwFlagsAndAttributes, // file attributes 
  101. int hTemplateFile // handle to template file 
  102. ); 
  103. #else 
  104. [DllImport("coredll")] 
  105. private static extern int CreateFile( 
  106. string lpFileName, // file name 
  107. uint dwDesiredAccess, // access mode 
  108. int dwShareMode, // share mode 
  109. int lpSecurityAttributes, // SD 
  110. int dwCreationDisposition, // how to create 
  111. int dwFlagsAndAttributes, // file attributes 
  112. int hTemplateFile // handle to template file 
  113. ); 
  114. #endif 
  115. #if FULLFRAMEWORK 
  116. [DllImport("kernel32")] 
  117. private static extern bool GetCommState( 
  118. int hFile, // handle to communications device 
  119. ref DCB lpDCB // device-control block 
  120. ); 
  121. #else 
  122. [DllImport("coredll")] 
  123. private static extern bool GetCommState( 
  124. int hFile, // handle to communications device 
  125. ref DCB lpDCB // device-control block 
  126. ); 
  127. #endif 
  128. #if FULLFRAMEWORK 
  129. [DllImport("kernel32")] 
  130. private static extern bool BuildCommDCB( 
  131. string lpDef, // device-control string 
  132. ref DCB lpDCB // device-control block 
  133. ); 
  134. #else 
  135. [DllImport("coredll")] 
  136. private static extern bool BuildCommDCB( 
  137. string lpDef, // device-control string 
  138. ref DCB lpDCB // device-control block 
  139. ); 
  140. #endif 
  141. #if FULLFRAMEWORK 
  142. [DllImport("kernel32")] 
  143. private static extern bool SetCommState( 
  144. int hFile, // handle to communications device 
  145. ref DCB lpDCB // device-control block 
  146. ); 
  147. #else 
  148. [DllImport("coredll")] 
  149. private static extern bool SetCommState( 
  150. int hFile, // handle to communications device 
  151. ref DCB lpDCB // device-control block 
  152. ); 
  153. #endif 
  154. #if FULLFRAMEWORK 
  155. [DllImport("kernel32")] 
  156. private static extern bool GetCommTimeouts( 
  157. int hFile, // handle to comm device 
  158. ref COMMTIMEOUTS lpCommTimeouts // time-out values 
  159. ); 
  160. #else 
  161. [DllImport("coredll")] 
  162. private static extern bool GetCommTimeouts( 
  163. int hFile, // handle to comm device 
  164. ref COMMTIMEOUTS lpCommTimeouts // time-out values 
  165. ); 
  166. #endif 
  167. #if FULLFRAMEWORK 
  168. [DllImport("kernel32")] 
  169. private static extern bool SetCommTimeouts( 
  170. int hFile, // handle to comm device 
  171. ref COMMTIMEOUTS lpCommTimeouts // time-out values 
  172. ); 
  173. #else 
  174. [DllImport("coredll")] 
  175. private static extern bool SetCommTimeouts( 
  176. int hFile, // handle to comm device 
  177. ref COMMTIMEOUTS lpCommTimeouts // time-out values 
  178. ); 
  179. #endif 
  180. #if FULLFRAMEWORK 
  181. [DllImport("kernel32")] 
  182. private static extern bool ReadFile( 
  183. int hFile, // handle to file 
  184. byte[] lpBuffer, // data buffer 
  185. int nNumberOfBytesToRead, // number of bytes to read 
  186. ref int lpNumberOfBytesRead, // number of bytes read 
  187. ref OVERLAPPED lpOverlapped // overlapped buffer 
  188. ); 
  189. #else 
  190. [DllImport("coredll")] 
  191. private static extern bool ReadFile( 
  192. int hFile, // handle to file 
  193. byte[] lpBuffer, // data buffer 
  194. int nNumberOfBytesToRead, // number of bytes to read 
  195. ref int lpNumberOfBytesRead, // number of bytes read 
  196. ref OVERLAPPED lpOverlapped // overlapped buffer 
  197. ); 
  198. #endif 
  199. #if FULLFRAMEWORK 
  200. [DllImport("kernel32")] 
  201. private static extern bool WriteFile( 
  202. int hFile, // handle to file 
  203. byte[] lpBuffer, // data buffer 
  204. int nNumberOfBytesToWrite, // number of bytes to write 
  205. ref int lpNumberOfBytesWritten, // number of bytes written 
  206. ref OVERLAPPED lpOverlapped // overlapped buffer 
  207. ); 
  208. #else 
  209. [DllImport("coredll")] 
  210. private static extern bool WriteFile( 
  211. int hFile, // handle to file 
  212. byte[] lpBuffer, // data buffer 
  213. int nNumberOfBytesToWrite, // number of bytes to write 
  214. ref int lpNumberOfBytesWritten, // number of bytes written 
  215. ref OVERLAPPED lpOverlapped // overlapped buffer 
  216. ); 
  217. #endif 
  218. #if FULLFRAMEWORK 
  219. [DllImport("kernel32")] 
  220. private static extern bool CloseHandle( 
  221. int hObject // handle to object 
  222. ); 
  223. #else 
  224. [DllImport("coredll")] 
  225. private static extern bool CloseHandle( 
  226. int hObject // handle to object 
  227. ); 
  228. #endif 
  229. #if FULLFRAMEWORK 
  230. [DllImport("kernel32")] 
  231. private static extern bool ClearCommError( 
  232. int hFile, // handle to file 
  233. ref int lpErrors, 
  234. ref COMSTAT lpStat 
  235. ); 
  236. #else 
  237. [DllImport("coredll")] 
  238. private static extern bool ClearCommError( 
  239. int hFile, // handle to file 
  240. ref int lpErrors, 
  241. ref COMSTAT lpStat 
  242. ); 
  243. #endif 
  244. #if FULLFRAMEWORK 
  245. [DllImport("kernel32")] 
  246. private static extern bool PurgeComm( 
  247. int hFile, // handle to file 
  248. uint dwFlags 
  249. ); 
  250. #else 
  251. [DllImport("coredll")] 
  252. private static extern bool PurgeComm( 
  253. int hFile, // handle to file 
  254. uint dwFlags 
  255. ); 
  256. #endif 
  257. #if FULLFRAMEWORK 
  258. [DllImport("kernel32")] 
  259. private static extern bool SetupComm( 
  260. int hFile, 
  261. int dwInQueue, 
  262. int dwOutQueue 
  263. ); 
  264. #else 
  265. [DllImport("coredll")] 
  266. private static extern bool SetupComm( 
  267. int hFile, 
  268. int dwInQueue, 
  269. int dwOutQueue 
  270. ); 
  271. #endif 
  272. #endregion 
  273. // SerialPort的成员变量 
  274. private int hComm = INVALID_HANDLE_VALUE; 
  275. private bool bOpened = false; 
  276. public bool Opened 
  277. get 
  278. return bOpened; 
  279. /// <summary> 
  280. ///串口的初始化函数 
  281. ///lpFileName 端口名 
  282. ///baudRate 波特率 
  283. ///parity 校验位 
  284. ///byteSize 数据位 
  285. ///stopBits 停止位 
  286. /// <summary> 
  287. public bool OpenPort(string lpFileName,int baudRate,byte parity, byte byteSize, byte stopBits) 
  288. // OPEN THE COMM PORT. 
  289. hComm = CreateFile(lpFileName ,GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); 
  290. // IF THE PORT CANNOT BE OPENED, BAIL OUT. 
  291. if(hComm == INVALID_HANDLE_VALUE) 
  292. return false; 
  293. SetupComm(hComm, MAXBLOCK, MAXBLOCK); 
  294. // SET THE COMM TIMEOUTS. 
  295. COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS(); 
  296. GetCommTimeouts(hComm,ref ctoCommPort); 
  297. ctoCommPort.ReadIntervalTimeout = Int32.MaxValue; 
  298. ctoCommPort.ReadTotalTimeoutConstant = 0; 
  299. ctoCommPort.ReadTotalTimeoutMultiplier = 0; 
  300. ctoCommPort.WriteTotalTimeoutMultiplier = 10; 
  301. ctoCommPort.WriteTotalTimeoutConstant = 1000; 
  302. SetCommTimeouts(hComm,ref ctoCommPort); 
  303. // SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS. 
  304. // THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST. 
  305. // IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER 
  306. // THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING. 
  307. // ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING. 
  308. DCB dcbCommPort = new DCB(); 
  309. dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort); 
  310. GetCommState(hComm, ref dcbCommPort); 
  311. dcbCommPort.BaudRate = baudRate; 
  312. dcbCommPort.Parity = parity; 
  313. dcbCommPort.ByteSize = byteSize; 
  314. dcbCommPort.StopBits = stopBits; 
  315. SetCommState(hComm, ref dcbCommPort); 
  316. PurgeComm(hComm, PURGE_RXCLEAR | PURGE_RXABORT); 
  317. PurgeComm(hComm, PURGE_TXCLEAR | PURGE_TXABORT); 
  318. bOpened = true; 
  319. return true; 
  320. // 关闭串口 
  321. public bool ClosePort() 
  322. if (hComm == INVALID_HANDLE_VALUE) 
  323. return false; 
  324. if (CloseHandle(hComm)) 
  325. hComm = INVALID_HANDLE_VALUE; 
  326. bOpened = false; 
  327. return true; 
  328. else 
  329. return false; 
  330. // 往串口写数据 
  331. public bool WritePort(byte[] WriteBytes) 
  332. if (hComm == INVALID_HANDLE_VALUE) 
  333. return false; 
  334. COMSTAT ComStat = new COMSTAT(); 
  335. int dwErrorFlags = 0; 
  336. ClearCommError(hComm, ref dwErrorFlags, ref ComStat); 
  337. if (dwErrorFlags != 0) 
  338. PurgeComm(hComm, PURGE_TXCLEAR | PURGE_TXABORT); 
  339. OVERLAPPED ovlCommPort = new OVERLAPPED(); 
  340. int BytesWritten = 0; 
  341. return WriteFile(hComm, WriteBytes, WriteBytes.Length, ref BytesWritten, ref ovlCommPort); 
  342. // 从串口读数据 
  343. public int ReadPort(int NumBytes, byte[] commRead) 
  344. if (hComm == INVALID_HANDLE_VALUE) 
  345. return 0; 
  346. COMSTAT ComStat = new COMSTAT(); 
  347. int dwErrorFlags = 0; 
  348. ClearCommError(hComm, ref dwErrorFlags, ref ComStat); 
  349. if (dwErrorFlags != 0) 
  350. {
  351. PurgeComm(hComm, PURGE_RXCLEAR | PURGE_RXABORT); 
  352. }
  353. if (ComStat.cbInQue > 0) 
  354. OVERLAPPED ovlCommPort = new OVERLAPPED(); 
  355. int BytesRead = 0; 
  356. ReadFile(hComm, commRead, NumBytes, ref BytesRead, ref ovlCommPort); 
  357. return BytesRead;
  358. else 
  359. return 0; 
  360. namespace CSharpSerialPort
  361. {
  362. /// <summary>
  363. /// Form1 的摘要说明。
  364. /// </summary>
  365. public class Form1 : System.Windows.Forms.Form
  366. {
  367. private System.Windows.Forms.MenuItem menuItem1;
  368. private System.Windows.Forms.MenuItem menuItem2;
  369. private System.Windows.Forms.Button button1;
  370. private System.Windows.Forms.MainMenu mainMenu1;
  371. private System.Windows.Forms.TextBox textBoxReceive;
  372. private System.Windows.Forms.Button button2;
  373. private SerialAPI.SerialPort Serial=new SerialAPI.SerialPort();
  374. bool PortOpen=false;
  375. private System.Windows.Forms.TextBox textBoxSend;
  376. private System.Windows.Forms.Label label1;
  377. private Microsoft.WindowsCE.Forms.InputPanel inputPanel1;
  378. private System.Windows.Forms.Label label2;
  379. private System.Windows.Forms.CheckBox checkBox1;
  380. bool Receive=false;
  381. private System.Windows.Forms.Timer timer1;
  382. private char last_key;
  383. private System.Windows.Forms.MenuItem menuItem3;
  384. private System.Windows.Forms.Label label4;
  385. private int loopnum;
  386. private System.Windows.Forms.Label label5;
  387. private int baudRate;
  388. private System.Windows.Forms.Label label6;
  389. private System.Windows.Forms.Label returnnum;
  390. private System.Windows.Forms.Button button3;
  391. private System.Windows.Forms.Button button4;
  392. private int delay;
  393. public Form1()
  394. {
  395. //
  396. // Windows 窗体设计器支持所必需的
  397. //
  398. InitializeComponent();
  399. //
  400. // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
  401. //
  402. }
  403. /// <summary>
  404. /// 清理所有正在使用的资源。
  405. /// </summary>
  406. protected override void Dispose( bool disposing )
  407. {
  408. base.Dispose( disposing );
  409. }
  410. #region Windows 窗体设计器生成的代码
  411. /// <summary>
  412. /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  413. /// 此方法的内容。
  414. /// </summary>
  415. private void InitializeComponent()
  416. {
  417. this.mainMenu1 = new System.Windows.Forms.MainMenu();
  418. this.menuItem1 = new System.Windows.Forms.MenuItem();
  419. this.menuItem2 = new System.Windows.Forms.MenuItem();
  420. this.menuItem3 = new System.Windows.Forms.MenuItem();
  421. this.button1 = new System.Windows.Forms.Button();
  422. this.textBoxReceive = new System.Windows.Forms.TextBox();
  423. this.button2 = new System.Windows.Forms.Button();
  424. this.textBoxSend = new System.Windows.Forms.TextBox();
  425. this.label1 = new System.Windows.Forms.Label();
  426. this.inputPanel1 = new Microsoft.WindowsCE.Forms.InputPanel();
  427. this.label2 = new System.Windows.Forms.Label();
  428. this.returnnum = new System.Windows.Forms.Label();
  429. this.checkBox1 = new System.Windows.Forms.CheckBox();
  430. this.timer1 = new System.Windows.Forms.Timer();
  431. this.label4 = new System.Windows.Forms.Label();
  432. this.label5 = new System.Windows.Forms.Label();
  433. this.label6 = new System.Windows.Forms.Label();
  434. this.button3 = new System.Windows.Forms.Button();
  435. this.button4 = new System.Windows.Forms.Button();
  436. // 
  437. // mainMenu1
  438. // 
  439. this.mainMenu1.MenuItems.Add(this.menuItem1);
  440. // 
  441. // menuItem1
  442. // 
  443. this.menuItem1.MenuItems.Add(this.menuItem2);
  444. this.menuItem1.MenuItems.Add(this.menuItem3);
  445. this.menuItem1.Text = "操作";
  446. // 
  447. // menuItem2
  448. // 
  449. this.menuItem2.Text = "退出";
  450. this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
  451. // 
  452. // menuItem3
  453. // 
  454. this.menuItem3.Text = "设置串口";
  455. this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
  456. // 
  457. // button1
  458. // 
  459. this.button1.Location = new System.Drawing.Point(88, 184);
  460. this.button1.Size = new System.Drawing.Size(56, 24);
  461. this.button1.Text = "发送";
  462. this.button1.Click += new System.EventHandler(this.button1_Click);
  463. // 
  464. // textBoxReceive
  465. // 
  466. this.textBoxReceive.Location = new System.Drawing.Point(24, 22);
  467. this.textBoxReceive.Multiline = true;
  468. this.textBoxReceive.Size = new System.Drawing.Size(192, 98);
  469. this.textBoxReceive.Text = "";
  470. // 
  471. // button2
  472. // 
  473. this.button2.Location = new System.Drawing.Point(8, 184);
  474. this.button2.Size = new System.Drawing.Size(64, 24);
  475. this.button2.Text = "打开";
  476. this.button2.Click += new System.EventHandler(this.button2_Click);
  477. // 
  478. // textBoxSend
  479. // 
  480. this.textBoxSend.Location = new System.Drawing.Point(24, 152);
  481. this.textBoxSend.Size = new System.Drawing.Size(192, 21);
  482. this.textBoxSend.Text = "01 01 02 06 05 01 09 00 00 25 08 00 00 01 10 66 66 66 66 FF ";
  483. this.textBoxSend.TextChanged += new System.EventHandler(this.textBoxSend_TextChanged);
  484. // 
  485. // label1
  486. // 
  487. this.label1.Location = new System.Drawing.Point(23, 4);
  488. this.label1.Size = new System.Drawing.Size(72, 16);
  489. this.label1.Text = "接收区";
  490. // 
  491. // label2
  492. // 
  493. this.label2.Location = new System.Drawing.Point(24, 128);
  494. this.label2.Size = new System.Drawing.Size(64, 16);
  495. this.label2.Text = "发送区";
  496. // 
  497. // returnnum
  498. // 
  499. this.returnnum.Location = new System.Drawing.Point(88, 216);
  500. this.returnnum.Size = new System.Drawing.Size(48, 16);
  501. this.returnnum.Text = "0";
  502. // 
  503. // checkBox1
  504. // 
  505. this.checkBox1.Location = new System.Drawing.Point(88, 128);
  506. this.checkBox1.Size = new System.Drawing.Size(80, 16);
  507. this.checkBox1.Text = "十六进制";
  508. // 
  509. // timer1
  510. // 
  511. this.timer1.Interval = 1500;
  512. this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
  513. // 
  514. // label4
  515. // 
  516. this.label4.Location = new System.Drawing.Point(136, 216);
  517. this.label4.Size = new System.Drawing.Size(48, 16);
  518. this.label4.Text = "label4";
  519. // 
  520. // label5
  521. // 
  522. this.label5.Location = new System.Drawing.Point(184, 216);
  523. this.label5.Size = new System.Drawing.Size(48, 16);
  524. this.label5.Text = "label5";
  525. // 
  526. // label6
  527. // 
  528. this.label6.Location = new System.Drawing.Point(40, 216);
  529. this.label6.Size = new System.Drawing.Size(48, 16);
  530. this.label6.Text = "label6";
  531. // 
  532. // button3
  533. // 
  534. this.button3.Location = new System.Drawing.Point(0, 128);
  535. this.button3.Size = new System.Drawing.Size(24, 16);
  536. this.button3.Text = "button3";
  537. this.button3.Click += new System.EventHandler(this.button3_Click);
  538. // 
  539. // button4
  540. // 
  541. this.button4.Location = new System.Drawing.Point(152, 184);
  542. this.button4.Size = new System.Drawing.Size(72, 24);
  543. this.button4.Text = "更改设置";
  544. this.button4.Click += new System.EventHandler(this.button4_Click);
  545. // 
  546. // Form1
  547. // 
  548. this.ClientSize = new System.Drawing.Size(234, 232);
  549. this.Controls.Add(this.button4);
  550. this.Controls.Add(this.button3);
  551. this.Controls.Add(this.label6);
  552. this.Controls.Add(this.label5);
  553. this.Controls.Add(this.label4);
  554. this.Controls.Add(this.checkBox1);
  555. this.Controls.Add(this.returnnum);
  556. this.Controls.Add(this.label2);
  557. this.Controls.Add(this.label1);
  558. this.Controls.Add(this.textBoxSend);
  559. this.Controls.Add(this.button2);
  560. this.Controls.Add(this.textBoxReceive);
  561. this.Controls.Add(this.button1);
  562. this.Menu = this.mainMenu1;
  563. this.MinimizeBox = false;
  564. this.Text = "Form1";
  565. this.Load += new System.EventHandler(this.Form1_Load);
  566. }
  567. #endregion
  568. /// <summary>
  569. /// 应用程序的主入口点。
  570. /// </summary>
  571. static void Main() 
  572. {
  573. Application.Run(new Form1());
  574. }
  575. private void menuItem2_Click(object sender, System.EventArgs e)
  576. {
  577. Receive=false;
  578. Serial.ClosePort();
  579. this.Close();
  580. }
  581. private void SendCmd()
  582. {
  583. byte[] buf;
  584. textBoxReceive.Text ="";
  585. if(textBoxSend.TextLength==0)
  586. {
  587. return;
  588. }
  589. if(checkBox1.Checked ==true)
  590. {
  591. buf = new byte[(textBoxSend.Text.Length/3)];
  592. for ( int i=0 ; i< (textBoxSend.Text.Length/3); i++)
  593. {
  594. buf[i] = byte.Parse( textBoxSend.Text.Substring(i*3 ,2) ,System.Globalization.NumberStyles.AllowHexSpecifier);
  595. }
  596. //com.Output = buf;
  597. }
  598. else
  599. {
  600. buf=new byte [textBoxSend.TextLength];
  601. for(int i=0;i<textBoxSend.TextLength;i++)
  602. {
  603. buf[i]=Convert.ToByte(textBoxSend.Text[i]);
  604. }
  605. // byte[] buf=new byte[4]; 
  606. // buf[0]=200; 
  607. // buf[1]=0;
  608. // buf[2]=0;
  609. // buf[3]=200;
  610. }
  611. Serial.WritePort(buf);
  612. }
  613. private void button1_Click(object sender, System.EventArgs e)
  614. {
  615. // for(int i=0;i<5;i++)
  616. // {
  617. // SendCmd();
  618. // Sleep(500);
  619. // }
  620. loopnum=0;
  621. timer1.Enabled =true;
  622. timer1.Interval=delay;
  623. }
  624. private void timer1_Tick(object sender, System.EventArgs e)
  625. {
  626. loopnum=loopnum+1;
  627. label6.Text =loopnum.ToString();
  628. if(int.Parse(returnnum.Text)<10 && loopnum<300) //int.Parse(returnnum.Text)<4 && 
  629. {
  630. SendCmd();
  631. }
  632. else
  633. {
  634. returnnum.Text ="0";
  635. timer1.Enabled =false;
  636. }
  637. }
  638. private void button2_Click(object sender, System.EventArgs e)
  639. {
  640. if(!PortOpen)
  641. {
  642. if(Serial.OpenPort("COM1:",baudRate,0,8,1))
  643. {
  644. PortOpen=true;
  645. Receive=true;
  646. ThreadPool.QueueUserWorkItem(new WaitCallback(SerialReceive),0); 
  647. button2.Text="关闭";
  648. }
  649. }
  650. else
  651. {
  652. Receive=false;
  653. Serial.ClosePort();
  654. PortOpen=false;
  655. button2.Text="打开";
  656. }
  657. }
  658. public void SerialReceive(Object a)
  659. {
  660. byte [] buf;
  661. buf=new byte [1];
  662. int bytesRead=0;
  663. int i;
  664. while(Receive)
  665. {
  666. if(Serial.Opened)
  667. {
  668. bytesRead=Serial.ReadPort(1,buf);
  669. if(bytesRead>0)
  670. {
  671. for(i=0;i<bytesRead;i++)
  672. {
  673. // textBoxReceive.Text+=Convert.ToChar(buf[i]).ToString();
  674. textBoxReceive.Text+= buf[i].ToString("X2")+ " ";
  675. }
  676. returnnum.Text = textBoxReceive.Text.Length.ToString();
  677. }
  678. //Application.DoEvents();
  679. }
  680. }
  681. //Thread.Sleep(0);
  682. }
  683. private void textBoxSend_TextChanged(object sender, System.EventArgs e)
  684. {
  685. //
  686. // Hex格式发送数据区输入数据整理:自动用空格间隔每字节的数据
  687. //
  688. // 转换为大写
  689. textBoxSend.Text = textBoxSend.Text.ToUpper();
  690. if ( (textBoxSend.Text.Length % 3) == 2 )
  691. {
  692. if(last_key=='b')
  693. textBoxSend.Text = textBoxSend.Text.Remove( textBoxSend.Text.Length-1 ,1 );
  694. else
  695. textBoxSend.Text += " ";
  696. }
  697.            
  698. // 设置插入点到最后面
  699. textBoxSend.SelectionStart = textBoxSend.Text.Length;
  700. }
  701. private void menuItem3_Click(object sender, System.EventArgs e)
  702. {
  703. cResult r = new cResult();
  704. r.TextChanged += new TextChangedHandler(this.EventResultChanged);
  705. frmComSet fc = new frmComSet(r);
  706. fc.ShowDialog();
  707. label4.Text = r.Result1;// + "rn" + r.Result2;
  708. baudRate=int.Parse(r.Result1);
  709. label5.Text = r.Result2;
  710. delay=int.Parse(r.Result2);
  711. }
  712. private void EventResultChanged(string s)
  713. {
  714. label4.Text = s;
  715. }
  716. private void Form1_Load(object sender, System.EventArgs e)
  717. {
  718. baudRate=9600;
  719. delay=1500;
  720. label4.Text = baudRate.ToString();
  721. label5.Text =delay.ToString();
  722. }
  723. private void button3_Click(object sender, System.EventArgs e)
  724. {
  725. // ADOCE.Connection connection;
  726. //            Set connection = CreateObject("ADOCE.Connection.3.1")
  727. //            connection.ConnectionString = "Data Source=MyDatabase.cdb"
  728. //            connection.Open
  729. }
  730. private void button4_Click(object sender, System.EventArgs e)
  731. {
  732. SendCmd();
  733. }
  734. }
  735. }