wpf上位机 modbus串口通信,获取收发数据的完整报文

一、

1.网上很多modbus类库,封装的方法,大多只获取返回的数据,而不是完整的报文,有时使用不便。
2.大多类库“读取”有返回值,而“写”时没有返回值,不好判断!不好做其他操作!
3.这是通过类库dsapi,实现简单!在此感谢!

读线圈 01

二、

       /// 【获取读数据命令,返回命令帧】
        public void SetWriteFrame(string slave_Addr, string R_CMD, string startAddr, string data_reg, string byte_Data, string change_Data)
        {
        .....


  #region 功能码变更触发事件
        /// <summary>
        /// 功能码变更触发事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>       
        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // >4:写
            if (cb_Function.SelectedIndex < 4)
            {
                btn_Read.IsEnabled = true;
                btn_Write.IsEnabled = false;

                //此时字节数和变更数是禁止的
                tb_ByteData.IsEnabled = false;
                tb_ChangeData.IsEnabled = false;

                tb_SlaveAddr.IsEnabled = true;
                tb_StartAddr.IsEnabled = true;
                tb_RegData.IsEnabled = true;
            }
            //4,5:写 从站+功能码+起始+变更数据+crc
            else if ((cb_Function.SelectedIndex == 4) || (cb_Function.SelectedIndex == 5))
            {
                btn_Read.IsEnabled = false;
                btn_Write.IsEnabled = true;

                //此时字节数和寄存器数是禁止的
                tb_ByteData.IsEnabled = false;
                tb_ChangeData.IsEnabled = true;
                tb_RegData.IsEnabled = false;
            }
            ......
            //委托事件,在主线程中创建的控件,在子线程中读取设置控件的属性会出现异常,使用Invoke方法可以解决
            this.Dispatcher.Invoke(new Action(() => { functionCode = content; functionOder = cb_Function.SelectedIndex; }));            
        }
        #endregion

#region 写日志文件
        public static void WriteLog(string strLog)
        {            
            string sFilePath = Directory.GetCurrentDirectory().ToString() + "\\log\\" + DateTime.Now.ToString("yyyyMMdd");
            string sFileName = "log" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
            sFileName = sFilePath + "\\" + sFileName; //文件的绝对路径
            if (!Directory.Exists(sFilePath))//验证路径是否存在
            {
                //不存在则创建
                Directory.CreateDirectory(sFilePath);                
            }
            FileStream fs;
            StreamWriter sw;
            if (File.Exists(sFileName))
            //验证文件是否存在,有则追加,无则创建
            {
                fs = new FileStream(sFileName, FileMode.Append, FileAccess.Write);
            }
            else
            {
                fs = new FileStream(sFileName, FileMode.Create, FileAccess.Write);
            }
            sw = new StreamWriter(fs);
            // sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "   ---   " + strLog);
            sw.WriteLine(strLog);
            sw.Close();
            fs.Close();
        }
        #endregion 
``

![发送](https://img-blog.csdnimg.cn/b07dc24378e64ee69a1e0c1a1addf672.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAZmVuZ2Rhb2thbmhhaXF1,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)


***需要这个文档说明和软件的请联系 QQ752670829***
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值