SerialPort端口通信
遍历机器上的SerialPort
1: public static List<string> funList_SerialPortName()
2: {
3: List<string> lst = new List<string>();
4: RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
5: if (keyCom != null)
6: {
7: string[] sSubKeys = keyCom.GetValueNames();
8: foreach (string sName in sSubKeys)
9: {
10: string sValue = (string)keyCom.GetValue(sName);
11: lst.Add(sValue);
12: }
13: }
14: return lst;
15: }
打开一个端口
1: public static void subAlarm_Open(ref System.IO.Ports.SerialPort sp)
2: {
3: if (sp.IsOpen)
4: {
5: sp.Close();
6: }
7: string strSQL = "select AlarmPort,AlarmRate from Basic_PortInfo";
8: DataSet ds = new DataSet();
9: ds = IdioSoft.ClassDbAccess.ClassDbAccess.funDataset_SQLExecuteNonQuery(strSQL);
10: sp.PortName = ds.Tables[0].Rows[0]["AlarmPort"].ToString();
11: sp.BaudRate = ds.Tables[0].Rows[0]["AlarmRate"].ToString().funInt_StringToInt(0);
12: //停止位等信息也是在这个地方初使化
13: try
14: {
15: sp.Open();
16: }
17: catch
18: {
19: }
20: }
发送指令
1: //发送防区指令
2: byte[] data = ClassCommand.funString_SubLineZone(CurrentSubLineIndex - 1, intFQ, strStatus);//返回一个byte[]
3: spAlarm.Write(data, 0, data.Length);
接收指令,这个需要用用委托来实现
1: delegate void delgSpReceived();
2: delgSpReceived objdelgSpReceived;
3: objdelgSpReceived = new delgSpReceived(subSpAlarm_Received);
委托过程
1: private void subSpAlarm_Received()
2: {
3: //操作代码
4: }