namespace Test_temp
{
1. public partial class Form1 : Form
2. {
3. public Form1()
4. {
5. InitializeComponent();
6. button1.Enabled = false;
7. //*引用Tony.SerialPorts.RS232.dll(将Tony.SerialPorts.RS232.dll、HDInfo.txt複制到運作目錄下)
8. //擷取RS232入口
9. Tony.SerialPorts.RS232Enroll.GetRS232Enroll();
10. //Tony.SerialPorts.RS232Enroll.RunRS232Enroll如果不是null,說明正确 擷取序列槽。
11. if (Tony.SerialPorts.RS232Enroll.RunRS232Enroll != null)
12. {
13. button1.Enabled = true;
14. }
15. }
16. private Tony.SerialPorts.RS232.IRS232 IRS232Comm1 = null;
17. private void button1_Click(object sender, EventArgs e)
18. {
19. //*進行序列槽參數配置
20.
21. //從配置檔案中擷取以前配置的序列槽參數。
22. Tony.SerialPorts.RS232.RS232Setting xSetting = Tony.SerialPorts.RS232.RS232Setting.GetSetting(Application.StartupPath + @".\RS232Set\RS232Set1.IO");
23. 如無配置檔案……
24. //Tony.SerialPorts.RS232.RS232Setting xSetting = new Tony.SerialPorts.RS232.RS232Setting();
25.
26. //調用,進行序列槽參數配置:(x1_Scan:序列槽自動掃描事件的引用。
27. Tony.SerialPorts.RS232Enroll.RunRS232Enroll.RS232Worker.RunRS232Setting(xSetting, Application.StartupPath + @".\RS232Set\RS232Set1.IO", "testScan", false , x1_Scan);
28. }
29. private void x1_Scan(Tony.SerialPorts.RS232.RS232Setting gSetting, string[] gScanRS232Port, out string gRS232Port, string gUserName)
30. {
31. //*此事件由Tony.SerialPorts.RS232Enroll.RunRS232Enroll.RS232Worker.RunRS232Setting(……)在點選“掃描”按鈕後自動執行。
32. //*此事件用途:在可用的序列槽号集合gScanRS232Port中,分别向序列槽發送指定指令,如接到符合條件的資料,即認為是可用序列槽。
33. //*以K2000為例:用Transact方法當發送指令":SYSTem:BEEPer:STATe?",如儀表回送的指令中包含"1"(即“*1*”,*為任意字元)。
34. //*此例請将序列槽參數配置窗體中,接收中斷字元、發送附加字元設定成“CR”。
35. //*Transact方法發送指令後主動回收資料,并不依賴于資料接收事件。
36. //*參考http://blog.csdn.net/tonysungood000/article/details/78763553
37. //*參考http://blog.csdn.net/tonysungood000/article/details/78780109
38. //*參考http://blog.csdn.net/tonysungood000/article/details/78788391
39.
40. //gSetting:使用者在配置窗體中,配置好的參數設定。
41. //gScanRS232Port:可選的序列槽号(計算機存在的序列槽号集合)
42. //gRS232Port:掃描後,由使用者設定符合條件的序列槽号。
43.
44.
45. gRS232Port = null;
46. //取得一個序列槽執行個體
47. this.IRS232Comm1 = Tony.SerialPorts.RS232Enroll.RunRS232Enroll.RS232Worker.GetRS232Working(gUserName);
48.
49. //周遊可用的序列槽号
50. for (int i = 0; i < gScanRS232Port.Length; i++)
51. {
52. try
53. {
54. //設定臨時序列槽号
55. gSetting.port = gScanRS232Port[i];
56. //設定序列槽參數
57. this.IRS232Comm1.Settings = gSetting;
58. //打開序列槽
59. this.IRS232Comm1.Open();
60.
61. //向打開的序列槽發送指令":SYSTem:BEEPer:STATe?",如接收資料中包含 "1",即認為符合條件,傳回接收到的資料,否則輸出為null;
62. object xValue = this.IRS232Comm1.Transact(":SYSTem:BEEPer:STATe?", -1, 3, "1", true);
63. if (xValue != null)
64. {
65. //成功掃描到符合條件序列槽,設定符合條件的序列槽号,傳回。
66. gRS232Port = gScanRS232Port[i];
67. break;
68. }
69. }
70. finally
71. {
72. this.IRS232Comm1.Close();
73. }
74. }
75. this.IRS232Comm1.Dispose();
76. this.IRS232Comm1 = null;
77. }
78.
79. }
}