有了前两文的基础,当然还要加上更前面的一些知识。
1.设备源码不贴了。几点说明。
由于上文的串口类在linux下只能使用poll方式查询串口。所以需要准备一个定时器去polling,4ms(并且串口类的采集串口时间也设为4ms)
但又由于需要识别modbus的帧结束,所以又准备一个定时器,10ms(这样就设定modbus的帧间距时间10ms。而第一个定时器的超时时间定的比第二个定时器的超时时间10ms少一点并且保证2x<10ms,所以定了4ms)。
在第一个定时器读到数据的时候重置第二个定时器。没读到就什么也不做(意味着允许第二个定时器超时),然后在10ms之内,第一个定时器有机会可以再一次读取数据,如果仍然没有读到,那么第二个定时器肯定要超时了。
所以在第二个定时器里面就认为是整个modbus帧了,然后分析数据执行命令。

但是modbus规范上定的帧间距时间为3.5个字符(每个字符4bit)。按照115200b/s的波特率,每位的时间是1/115200=8.68e-6 s=8.68e-3 ms,帧间距应该是x3.5x4=1.22e-4 s=0.122 ms。尽管如此,由于大多数上位机采集数据即发送modbus帧的周期都在100ms以上,所以上面设定10ms的帧间距时间已经满足大多情况下的要求(所以micro2440上第二个定时器也可以省掉。直接使用第一个定时器(比如设为10 ms,串口类的周期也设为10)读取串口数据,读到的基本就是一帧的数据----如果有数据的话)

2.测试。
安装DASMBSerial,主题名配置为micro2440.  右键大图。采集周期默认1000ms就行.

如下是在excel使用管道(进程间通信)测试,

=DASMBSerial|micro2440!'6'
=DASMBSerial|micro2440!'40012'=DASMBSerial|micro2440!'$SYS$UpdateInterval'
=DASMBSerial|micro2440!'$SYS$ItemCount'
=DASMBSerial|micro2440!'$SYS$ActiveItemCount'
=DASMBSerial|micro2440!'$SYS$status'

如图

然后到诊断页看看数据质量怎么样,

由于DASMBSerial也会占用串口,但在激活,如图,的时候

如果有别的程序已经占用了同相同的串口(或者根本不存在这个串口),DASMBSerial却不提示如打不开等出错信息(并还把当前标志置为绿色貌似已经打开)(一般串口程序在打开串口的时候如果发现被其他程序如DASMBSerial占用时会提示的)。--------这是由于DASMBSerial激活的时候并不执行打开操作,只有在有app如excel ,intouch向DASMBSerial索取数据时,DASMBSerial才会去打开对应的串口并去读数据。
此时需要关闭那个占用串口的程序,并且最好重新激活一次DASMBSerial,然后再打开各个app从DASMBSerial读数据。
所以测试的顺序是
1.确保串口存在并且可用(如果其他app在占用此串口,shut off)
2.激活DASMBSerial
(1,2可以交换一下)
3.打开对应app从DASMBSerial读取数据。

监视到的串口数据如下,显示的时间是10ms单位。write是DASMBSerial->micro2440,read是micro2440-->DASMBSerial。看来DASMBSerial基本是800ms采集一次数据,与配置的1000ms差不多。

或者使用intouch测试而不使用excel,建立访问名如下

转载于:https://www.cnblogs.com/-song/archive/2011/11/27/3331917.html

modbus-rtu qt4-serialport3--------micro2440 as device相关推荐

  1. modbus-tcp qt4-socket ---------micro2440 as device

    private:Ui::Widget *ui;QTcpServer *tcpServer;QTcpSocket *clientConnection ;QByteArray sendBuf;QByteA ...

  2. 安卓开发板之串口通信,通过modbus Rtu协议控制下位机

    安卓开发板之串口通信,通过modbus Rtu协议控制下位机 1.环境准备 2.编写串口操作核心类 3.编写测试类 前言:因为公司最近有个人脸识别门禁的项目,这个项目主要业务是实现远程人脸注册,管理员 ...

  3. Codesys + BeagleBone PLC控制达到小儿科水平之Modbus RTU通讯

    Codesys + BeagleBone PLC控制达到小儿科水平之Modbus RTU通讯 1,项目目标 准备将自己设计的AM335x平台变成一个PLC平台,所以需要尝试一些有关PLC控制和开发的技 ...

  4. Modbus RTU 通信工具设计

    Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域. M ...

  5. modbus协议和串口服务器,Modbus RTU通信模式与Modbus ASCII通信模式的异同点

    Modbus基于串行通信存在两种模式:Modbus RTU与Modbus ASCII模式,不管是RTU模式还是ASCII模式,Modbus信息都以帧的方式传输,每个信息帧有确定的起始点和结束点,使接收 ...

  6. readfile读取串口数据_西门子PLC-1200-串口Modbus RTU通讯实例

    西门子PLC-1200的基于232串口的Modbus RTU通讯实例 这里先讲一下Modbus和232,232和485串口是一种串口接法,这种接法实际能实现十几种的协议通讯,有基于串口的Modbus ...

  7. 树莓派 rfid_树莓派工控机做Modbus RTU主站读取RFID数据

    KUNBUS Revpi Core 3是工业级的树莓派,可作为小型的工业PC用,外观十分小巧,操作简单,DIN导轨模块化安装,RevPi core 3能与RevPi IO连接,能实时对这些IO的控制. ...

  8. Modbus RTU 通信应用案例

    如何打开项目归档文件 例程中的TIA博途项目文件与STEP 7项目文件均为归档文件,需要按如下方式打开: TIA博途项目文件 1. 打开TIA博途软件,通过软件左下方"项目视图"按 ...

  9. modbus RTU协议设备使用无线代替有线注意事项

    1.设备有线连接 Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议.ModBus网络是一个工业通信系统,由带智能终端的可编程序控 ...

  10. 基于Modbus RTU协议的开关量控制采集简介

    一.什么是开关量控制采集 所谓的开关量控制采集就是通过458/232接口发送控制命令,实现读取开关量输入或者控制开关量输出的通断. 二.开关量输入采集和开关量输出控制 1.  开关量输入采集就是将一个 ...

最新文章

  1. 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-Tensorflow2.2-cpu/gpu环境安装-01
  2. evil twin_Evil-Twin框架:用于测试WiFi安全性的工具
  3. 3种方法实现http虚拟主机
  4. 为什么物联网产品迫切需要良好的 UI/UX 设计?
  5. String与StringBuilder区别总结
  6. html边框怎么设置100%宽度,边框100%身高和宽度(HTML 4.01严格)
  7. 淘宝商品类目查询方法怎样查看别人商品的类目淘宝类目查询工具软件
  8. tt按键精灵从入门到精通完整版
  9. 小区疫情防控应对策略
  10. Vue.js watch 属性
  11. Minecraft 1.18.2 forge开发 | (1) 开发环境搭建
  12. 基于Android Studio开发的笔记APP
  13. 深入理解Java Stream流水线
  14. lua——很好很强大的脚本语言
  15. 弹性力学第五版pdf_弹性力学5-圣维南原理.pdf
  16. RPA自动办公02——Uibot界面元素选择
  17. 数据挖掘人员工作领域分为哪几类,各自需要掌握哪些知识?
  18. 读书笔记:Effective Java-第11章 并发Concurrency
  19. 【C++】:auto的for循环
  20. 贴吧个人“精品”帖总结(乱舞水浒)

热门文章

  1. 全方面了解和学习PHP框架
  2. 现在比较流行的三级菜单,京东商城,淘宝网效果等等。(修正版)
  3. Ubuntu 软件包管理详解
  4. 【知识小课堂】 之 聚合函数
  5. Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant)
  6. Eclipse配置Tomcat服务器,通用方法
  7. Java并发编程—Thread类的start()方法是如何启动一个线程的?
  8. Java集合—Deque Stack
  9. 接口自动化测试系列(二):深入分析HTTP状态码502
  10. java:提示Could not initialize class sun.awt.X11GraphicsEnvironment