串口通信

 List<byte> request = new List<byte>(); //首先定义一个byte请求
                    request.Add(ModbusAddress);
                    request.Add(3);
                    request.Add(0);
                    request.Add(0);
                    request.Add(0); //添加通信协议地址包
                    byte length=(byte)(new BaseModel.Meteorological().MeteorologicalChannel.Max() + 1);

                    request.Add(length); //Modbus协议规定占两个字节并且通道以最大值为准,最后加一个长度;


                    length=(byte)(length*2+5); 
                    request = ModbusCrc.BoxData(request); //校验打包
                    List<byte> response= Send(request, length);//发送数据包,然后接受数据存储在response应答里面;

                


                if (response.Count == length && ModbusCrc.CheckCRC(response))//应答数据打包验证;

                    {                        
                        for (int i = 0; i < xxxxx.Length; i++)
                        {
                                                
                            Int16 v =response[3+m.MeteorologicalChannel[i]*2];
                            v <<= 8;
                            v += response[4 + m.MeteorologicalChannel[i] * 2];
                            m.Value[i] =(float) (v/Math.Pow(10,m.MeteorologicalPoint[i]));
                        }
                        AddTable(m);
                        CurrentMeteorological = m;
                    }
                    if (lastSaveDateTime.Minute != DateTime.Now.Minute && table.Rows.Count > 10)
                    {
                        lastSaveDateTime = DateTime.Now;
                        Save();

                    }



 static List<byte> Send(List<byte> request,int responseLength)//推送
        {
            List<byte> result = new List<byte>();
            try
            {
                PortIsOpen = false;//用于断开打卡判断;
                using (SerialPort port = new SerialPort("COM3", 9600))//new一个串口并写入定义波特率;
                {
                    port.WriteTimeout = 500;//延迟
                    port.ReadTimeout = 500;
                    port.Open();//串口要打开
                    PortIsOpen = true;
                    port.Write(request.ToArray(), 0, request.Count);//端口写入数据;
                    while (request.Count < responseLength)
                    {
                        byte bye = (byte)port.ReadByte();//每次读取一个byte数据;
                        result.Add(bye);
                    }
                    readFalse = 0;
                    return result;        
                }
            }
            catch
            {
                readFalse++;
               return  new List<byte>();
            }           
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值