trueideal

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:  }

posted on 2010-02-28 11:27  trueideal  阅读(450)  评论(0编辑  收藏  举报

导航