串口接收报文

用串口对象,发送数据后》循环读取》超时后退出

 #region 通用发送报文并接受
        /// <summary>
        /// 通用发送报文并接受
        /// </summary>
        /// <param name="sendByte"></param>
        /// <param name="response"></param>
        /// <returns></returns>
        private bool SendData(byte[] sendByte, ref byte[] response)
        {
            //上锁
            InteractiveLock.Enter();

            try
            {
                //发送报文
                MyCom.Write(sendByte, 0, sendByte.Length);

                //定义一个Buffer
                byte[] buffer = new byte[1024];

                //定义一个内存
                MemoryStream ms = new MemoryStream();

                //定义读取开始时间
                DateTime start = DateTime.Now;

                //【1】获取当前缓冲区的值,判断是否有值,如果有值,读取过来,放到内存中

                //接着再去判断,如果当前缓冲区的值为0,说明读完了

                //【2】如果每次读取都读不到,我们用超时时间来做判断

                while (true)
                {
                    Thread.Sleep(SleepTime);

                    if (MyCom.BytesToRead >= 1)
                    {
                        int spcount = MyCom.Read(buffer, 0, buffer.Length);
                        ms.Write(buffer, 0, spcount);
                    }
                    else
                    {
                        //判断是否超时
                        if ((DateTime.Now - start).TotalMilliseconds > this.ReceiveTimeOut)
                        {
                            ms.Dispose();
                            return false;
                        }
                        else if (ms.Length > 0)
                        {
                            break;
                        }
                    }

                }

                response = ms.ToArray();
                ms.Dispose();

                return true;
            }
            catch (Exception)
            {
                return false;
            }

            finally
            {
                //解锁
                InteractiveLock.Leave();
            }

        }

        #endregion

Modbus是一种通信协议,用于在不同设备之间进行数据传输和通信。在Modbus通信中,需要编写发送和接收报文的代码来实现数据的传输。 发送报文的代码可以通过串口或网络发送数据。首先,需要定义报文的格式,包括功能码、地址、数据等。然后,使用相关的通信库或函数,将报文发送出去。通常,发送报文的代码会包含以下步骤: 1. 建立与设备的连接,例如打开串口或建立网络连接。 2. 定义报文的格式,包括功能码、地址、数据等。 3. 将报文数据转换为字节流,以便发送。 4. 使用通信库或函数发送报文数据。 5. 等待设备的响应,通常是等待一段时间或等待收到特定的响应指令。 6. 接收设备的响应报文数据。 7. 关闭与设备的连接。 接收报文的代码用于接收其他设备发送的数据,并将其解析为可读取的格式。接收报文的代码通常会包含以下步骤: 1. 建立与设备的连接,例如打开串口或建立网络连接。 2. 循环接收数据,直到接收到完整的报文数据或达到超时时间。 3. 解析接收到的报文数据,提取功能码、地址、数据等。 4. 进行相应的处理操作,例如将数据存储到数据库或进行其他计算。 5. 返回响应给发送方,例如发送一个确认响应或发送数据给请求方。 6. 关闭与设备的连接。 以上是基本的发送和接收报文的代码流程,但具体的实现方式会根据使用的编程语言和通信库的不同而有所差异。在具体编写代码时,还需考虑错误处理、异常情况等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值