基于多串口ETH005设备的Socket网络编程

来源:互联网 发布:淘宝松下18650锂电池 编辑:程序博客网 时间:2024/06/05 16:15

利用多串口设备进行Socket网络编程

1、安装多串口服务器ETH005软件。软件下载地址:http://download.csdn.net/detail/taomanman/6762173

2、打开ETH005软件,点击“扫描”,如下图:

3、会搜索到设备的IP地址,修改串口COM1的串口波特率为9600,通讯方式修改为485通信,远程IP修改成192.168.0.2,然后点击“连接”,如下图:

4、连接完成后,点击“配置”,如下图:

5、点击“读取配置信息”,如下图:

 

6、打开串口调试助手,配置远程主机和远程端口号信息,然后连接网络,然后输入十六进制数,然后发送,接收区会将结果输出,如下图:

 

 

开始编程:使用Socket进行网络编程,发送指令,获取数据

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、             建立Socket连接

Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint ie = new IPEndPoint(IPAddress.Parse("192.168.0.18"), 50001);try{     newclient.Connect(ie);} catch (SocketException e){     MessageBox.Show("连接服务器失败:" + e.Message);     return;}ThreadStart myThreaddelegate = new ThreadStart(ReceiveMsg);myThread = new Thread(myThreaddelegate);myThread.Start();

 

2、             发送指令

///<summary>///发送温湿度数据///</summary>public void SendWSD(){    string wsd = "01 03 00 00 00 03 05 cb";    int m_length = wsd.Length;    byte[] data = new byte[m_length];    //十六进制字符串转换成字符数组(01 03 00 00 00 03 05 cb)    data = ConvertHelper.strToToHexByte(wsd);    int i = newclient.Send(data, data.Length, 0);    //showMsg("温湿度发送消息为:" + wsd + "\r\n");} public static class ConvertHelper{    ///<summary>       /// 16进制字符串转字节数组       ///</summary>      ///<param name="hexString"></param>      ///<returns></returns>       public static byte[] strToToHexByte(string hexString)    {        hexString = hexString.Replace(" ", "");        if ((hexString.Length % 2) != 0)           hexString += " ";        byte[] returnBytes = new byte[hexString.Length / 2];        for (int i = 0; i < returnBytes.Length; i++)            returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2).Trim(), 16);        return returnBytes;   }     ///<summary>       ///字节数组转16进制字符串        ///</summary>       ///<param name="bytes"></param>       ///<returns></returns>        public static string byteToHexStr(byte[] bytes)     {        string returnStr = "";        if (bytes != null)        {             for (int i = 0; i < bytes.Length; i++)             {                 returnStr += bytes[i].ToString("X2");             }        }        return returnStr;    }     ///<summary>    ///十六进制转十进制    ///</summary>   ///<param name="hex"></param>   ///<returns></returns>    public static string Hex2Ten(string hex)    {        int ten = 0;        for (int i = 0, j = hex.Length - 1; i < hex.Length; i++)        {            ten += HexChar2Value(hex.Substring(i, 1)) * ((int)Math.Pow(16, j));            j--;        }        return ten.ToString();    }}

3、             接收数据

  ///<summary>  ///接收消息  ///</summary>  public void ReceiveMsg()  {    while (true)    {        byte[] data = new byte[1024];        int recv = newclient.Receive(data);        string stringdata = Encoding.UTF8.GetString(data, 0, recv);        //将所读取的字符串转换为字节数组        byte[] content = Encoding.ASCII.GetBytes(stringdata);        if (recv <= 0)               break;        string hexString = ConvertHelper.byteToHexStr(content);        string sd = hexString.Substring(6, 4);        string wd = hexString.Substring(10, 4);       //showMsg("温湿度接收到的返回值串为:" + hexString + "\r\n");        //处理后的温湿度数值        double csd = double.Parse(ConvertHelper.Hex2Ten(sd)) / 100;        double cwd = (double.Parse(ConvertHelper.Hex2Ten(wd)) - 27315) / 100;        showMsg("湿度值为:" + csd + "% 采集时间:[" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "]\r\n");        showMsg("温度值为:" + cwd + "℃ 采集时间:[" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "]\r\n");     }  }     ///<summary>    ///显示消息    ///</summary>   ///<param name="msg"></param>   public void showMsg(string msg)   {      {          //在线程里以安全方式调用控件           if (receiveMsg.InvokeRequired)           {                MyInvoke _myinvoke = new MyInvoke(showMsg);                receiveMsg.Invoke(_myinvoke, new object[] { msg });            }            else            {                receiveMsg.AppendText(msg);            }       }  } 


 

0 0
原创粉丝点击