欢迎来到皮皮网网首页

【图片涂鸦 源码】【飞狐指标源码优化】【dubbo服务源码过程】modubs 串口 源码_串口modbus调试工具

来源:怎么爬游戏源码 时间:2024-11-24 15:51:43

1.串口调试工具——Modbus Poll
2.干货 | 动手写写Modbus-RTU协议
3.「干货」迪文串口屏ModBus开发流程
4.免费串口调试助手 开源 C#
5.Qt编写Modbus从机程序
6.51单片机C语言怎么写Modbus通信程序?

modubs 串口 源码_串口modbus调试工具

串口调试工具——Modbus Poll

       Modbus Poll,串口串口作为一款专为测试和调试 Modbus 从设备设计的源码主机仿真器,支持 ModbusRTU、调试ASCII、工具TCP/IP 协议,串口串口为开发者提供了便捷的源码图片涂鸦 源码测试环境。其多文档接口特性允许同时监控多个从设备或数据域,调试简化了调试流程。工具软件界面直观,串口串口用户仅需设定从设备ID、源码功能、调试地址、工具大小和轮询间隔,串口串口即可通过任意窗口读写寄存器和线圈。源码提供浮点、调试双精度、长整型等多种数据格式显示方式,支持字节序列交换,极大提高了编程和测试的灵活性。

       安装使用 Modbus Poll 非常简便,只需双击桌面快捷方式启动软件。注册流程后,用户将直接进入主窗口,其中显示的参数包括向主站发送数据帧次数、通讯错误次数、模拟的Modbus子设备的设备地址、使用的Modbus功能码及扫描周期等信息。主窗口下方的错误状态显示,如“No Connection”表示未连接状态,直观提示用户当前连接状态。

       软件参数设置功能强大,允许用户根据需求调整从站地址、功能码、起始地址、寄存器连续个数及读取数据周期等参数。设置完成点击OK按钮后,模拟窗口将显示定义的寄存器列表。用户可选择数据显示方式,如Signed方式(进制无符号二进制),以满足不同数值显示需求。地址格式可选PLC地址或Protocol Addresses,飞狐指标源码优化一般情况下使用默认的PLC地址即可。

       串口连接功能允许用户通过选择相应的串口或TCP/IP模式进行连接,设置包括端口、模式、读取超时时间、最小间隔时间等参数。连接成功后,主窗口将显示读取寄存器的相关信息。用户可直接在主窗口寄存器地址上双击修改寄存器值,范围为-至。此外,软件还提供了“Communication Traffic”按钮,用于查看发送命令和接收数据的实时情况。

       为了更好地理解和使用 Modbus Poll,我们建议用户先安装vspd虚拟串口工具并添加COM2和COM3端口。随后,打开modbuspoll和modbus slave软件并按“F8”配置主从端的相关参数。连接时,选择与虚拟端口对应的端口进行连接,确保正确配置。连接后,主窗口将显示TX、Err、ID、F、SR等参数,显示发送命令次数、错误次数、从机ID、功能码及轮询间隔。使用工具栏的“Communication Traffic”按钮可监控实时通讯数据。

       对于需要进一步了解和使用 Modbus Poll 的用户,可访问提供下载的链接。通过下载和安装,用户将获得一款高效、灵活的 Modbus 从设备测试工具,为开发和调试过程提供强大支持。

干货 | 动手写写Modbus-RTU协议

       今天,我们来实现 Modbus-RTU 协议,重点放在设备端的dubbo服务源码过程实现。在了解 Modbus 协议时,我们曾绘制过一个 OSI 模型图,这是一个分层设计图,类似于建房子时建筑师绘制的设计图。不过,让我们回到正题。

       编码前,遵循协议设计三层结构:物理层与控制芯片使用 UART 与一个 GPIO 进行交互。接下来,让我们详细探讨字节编码、链路层与应用层。

       字节编码方面,链路层的主要职责是接收服务,芯片与物理层之间通信接口是 UART,因此需要处理串口接收。modbus 报文结构定义为无特殊帧头、帧尾,如何判定接收到一个完整的帧?modbus 标准规定帧间隔至少须 3.5 个字节时间,字节间隔不得大于 1.5 字节时间。因此,只要 3.5 字节时间内没有新收到数据,即可能接收到一帧。为确保数据完整,我们需加上 CRC 校验,这样便能判定数据帧的接收。

       接下来,我们设计一个收发状态机,以实现 3.5 字节时间的判定。T3.5 和 T1.5 字节时间的计算基于字节长度和波特率,这里以波特率 为例,进行计算。若使用其他单片机,实现方式相似,只需相应调整。

       应用层中,数据关联是关键。回顾 modbus 协议,标准将用户应用数据规划为四张表。我们以最常见的 0x、0x 命令为例,异动指标公式源码仅需使用后两种表。这两条命令以 位地址进行索引,与用户应用数据关联。我们设计一个数据表来实现这一关联。

       接下来,我们将数据表绘制成一张图来分析。首先设计一个索引枚举 E_IDXS,与 appDataTable 里的条目一一对应,appDataTable 类似字典,用于快速存取应用数据的下标。利用 T_APP_DATA_TABLE 结构体,通过 void 指针实现任意类型数据与长度的抽象。这里甚至可以放入自定义数据类型。实现方式是设计一个 modbus 寄存器表结构体,其中包含地址、索引和数据类型三个数据成员。这样,modbus 寄存器表与应用数据便实现了关联。

       有了数据字典映射管理,根据寄存器表进行索引,实现内存读写操作。为此,我们需要实现两个读写接口,供 modbus 应用层访问:GetDataFromReg 函数负责从寄存器表中通过查字典获取对应的应用数据内存地址,并将数据复制到 pBuf 所指向的缓冲区。StoreDataToReg 函数则负责接收报文,查询寄存器表中的数据索引和数据类型,实现数据搬运。

       在应用层,需要注意 modbus 报文中字节序的规则,如地址 对应 进制的 0x4E,报文中先传 0x4E,后传 0x。

       链路层中,帧校验本需实现,但由于 单片机资源有限,接收采用逐字节中断方式,因此将其移至应用层处理。主要思路是判断 layer2 是否接收报文,然后校验该报文是ar相册app源码否正确,若正确则进行校验,并转入相应的命令处理。

       在数据校验部分,除了 CRC- 校验外,还需检查当前请求是否为设备支持的命令,并验证是否针对该设备。本文未涉及广播报文。CRC- 校验算法遵循标准给出的算法。

       总结,本文提供了一个整体思路,用于实现 modbus-RTU 协议。代码可能不甚严谨,有兴趣的朋友可以尝试实现其他命令或广播处理,本文可作为参考。

「干货」迪文串口屏ModBus开发流程

       本文将深入探讨迪文串口屏的ModBus开发流程,从协议栈获取到实际应用。

       首先,从迪文官方论坛获取ModBus协议栈的OS程序,以UART5-/波特率的示例程序为例。下载并解压后,关键文件包括DWINOS-xx.bin和_xx.bin,前者存入SD卡的DWIN_SET目录,屏幕断电插卡再上电,屏幕会自动更新SD卡内容。_xx.bin文件内有测试指令,可使用J-Flash等工具查看,迪文论坛提供了图形化编辑工具,便于理解指令含义。

       在配置ModBus指令时,注意功能码的变量地址要求,如码控制单个线圈需在0X-0XF范围内,遵循手册规定。要读取从机数据,如地址为1,数据在输入寄存器,浮点型,配置时需指定启用标记、从机ID、功能码、寄存器地址等信息。然而,配置工具存在bug,生成的指令格式不正确,需要手动修改bin文件。

       完成指令配置后,通过串口工具下载到串口5,与ModBus Slave模拟器交互。设置模拟器寄存器后,屏幕上的指定变量会显示模拟器的数据,这是验证指令正确性的关键步骤。

免费串口调试助手 开源 C#

       工业控制类软件在Windows平台下,使用C#语言进行开发,既方便又快捷。在工控领域中,串口通讯是一种非常常见的需求。因此,我花费时间开发了一个通用的串口调试助手工具,并将工控调试中常用的功能集成在上面,以方便用户进行调试。源码已经在gitee上开源,界面采用wpf实现,源码地址为:

       接下来,我将简单介绍一下已实现的功能。

       程序功能主要分为以下四大块:

       1. 串口通讯

       2. TCP通讯

       3. 小工具

       4. 支持中英文双语切换

       5. 检查版本更新

       6. 曲线显示读取的值。

       一、串口通讯

       串口通讯详细功能:

       1. 支持手动刷新串口设备列表。

       2. 支持流控。

       3. 接收发送编码方式同时支持ASCII和HEX方式。

       4. 在ASCII模式下,可设置结束符,如回车换行等。

       5. 在HEX模式下,支持自动计算标准ModbusRTU的CRC。

       6. 发送支持循环发送。

       7. 接收区显示支持显示发送和显示接收,并可设置发送和接收的字符串颜色。

       8. 接收区显示支持显示发送和接收的时间,时间格式可自定义。

       9. 底部显示串口状态,总接收字节数和总发送字节数。各字节数可手动清零。

       . 接收区字符串可一键清空。

       . 记录发送历史,支持记录最新的条历史记录。

       . 可将接收区显示的字符实时保存到本地txt文档。

       . 可将读取到的值以实时曲线的形式显示出来。

       二、TCP通讯

       TCP通讯详细功能:

       1. 支持TCP Client/TCP Server。

       2. 在TCP Server模式下,可显示当前连接客户端列表。

       3. TCP通讯采取异步方式通讯。

       4. 支持串口通讯功能中的3-项。

       5. 不支持TCP连接断开的自动侦测。

       三、小工具

       包含的小工具介绍:

       1. 通用校验方法中包含常用的LRC、XOR、CheckSum、FCS、Modbus-CRC等校验的计算。

       2. 数据转换包含整数和小数与进制HEX的转换。

       3. 与base互转。

       4. 数据采集中常用的模拟量与工程量转换计算。

       5. ASCII码表。

       6. C#颜色对照表。

       7. 拾取屏幕颜色。该功能使用鼠标hook实现。通过hook技术可实现拦截或修改键盘鼠标等的操作,有这方面需求的可参考。

       四、检查更新

       1. 检查更新方式:

       利用gitee作为更新检查的服务器,将版本号和下载连接写在gitee项目文件中,实现自动检查更新并提供下载连接的功能。

       五、相关开源项目

       1. 跨平台(Linux/Windows)串口通讯源码开源连接:

       xuyuanbao/BaoYuanSerial: A GUI Serial Debug Tool for Linux/Microsoft Window (github.com)

Qt编写Modbus从机程序

       在之前的文章中,我们已经熟悉了如何使用MODSCAN软件和串口助手处理Modbus协议。今天,我们将利用之前分享的Qt串口助手源码,开发一个Modbus从机程序,使其能够与MODSCAN进行数据交互。我们的目标是实现功能码0x读取保持寄存器和0x写入单个寄存器的功能。

       当主机发送0x功能码时,程序需要读取并回应从机特定寄存器的内容。例如,如果请求读取寄存器-,其内容分别为 2B(十进制)和 , (十进制0和)。

       功能码0x用于向从机写入单个寄存器。比如,我们可以将十六进制 写入寄存器2。在0x功能码下,可以写入多个寄存器,如 0A和 到从寄存器2开始的两个位置。

       在调试中,如果主从机的寄存器地址设置不一致,可能会出现错误的数据包,如MODSIM接收到的数据包 C5 C8与 C0 F1。当地址设置一致时,响应的包将正确反映寄存器内容。

       Qt编写的Modbus从机程序需要解析接收到的串口数据,根据功能码进行响应。比如,当主机修改地址2的寄存器值为0xFF时,程序会接收并返回确认报文。注意,Modbus从机通常不主动发送数据,而是等待主机查询。

       通过这个例子,我们已经展示了基于Qt的Modbus从机程序的基本运作。更多功能码的处理和自定义串口交互,大家可以在之前的文章基础上进行深入学习。欢迎关注嵌入式从0到1,持续分享嵌入式知识。

单片机C语言怎么写Modbus通信程序?

       刚好我在弄crc校验。给你一段代码。我也是冲网上抄过来的。验证过了。

       unsigned short crc;

       static uchar code auchCRCHi[] = {

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x

       };

       // CRC 低位字节值表

       static uchar code auchCRCLo[] = {

        0x, 0xC0, 0xC1, 0x, 0xC3, 0x, 0x, 0xC2, 0xC6, 0x,

        0x, 0xC7, 0x, 0xC5, 0xC4, 0x, 0xCC, 0x0C, 0x0D, 0xCD,

        0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x,

        0x, 0xC8, 0xD8, 0x, 0x, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,

        0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x, 0xD4,

        0xD5, 0x, 0xD7, 0x, 0x, 0xD6, 0xD2, 0x, 0x, 0xD3,

        0x, 0xD1, 0xD0, 0x, 0xF0, 0x, 0x, 0xF1, 0x, 0xF3,

        0xF2, 0x, 0x, 0xF6, 0xF7, 0x, 0xF5, 0x, 0x, 0xF4,

        0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,

        0x3B, 0xFB, 0x, 0xF9, 0xF8, 0x, 0x, 0xE8, 0xE9, 0x,

        0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,

        0xEC, 0x2C, 0xE4, 0x, 0x, 0xE5, 0x, 0xE7, 0xE6, 0x,

        0x, 0xE2, 0xE3, 0x, 0xE1, 0x, 0x, 0xE0, 0xA0, 0x,

        0x, 0xA1, 0x, 0xA3, 0xA2, 0x, 0x, 0xA6, 0xA7, 0x,

        0xA5, 0x, 0x, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,

        0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x, 0xA9, 0xA8, 0x,

        0x, 0xB8, 0xB9, 0x, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,

        0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x, 0x, 0xB5,

        0x, 0xB7, 0xB6, 0x, 0x, 0xB2, 0xB3, 0x, 0xB1, 0x,

        0x, 0xB0, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x9C, 0x5C,

        0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x4B, 0x8B,

        0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x,

        0x, 0x, 0x, 0x, 0x, 0x

       };

       //CRC校验的函数

       unsigned short CRC(unsigned char *puchMsg, unsigned short usDataLen)

       {

        unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */

        unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */

        unsigned uIndex ; /* CRC循环中的索引 */

        while (usDataLen--) /* 传输消息缓冲区 */

        {

        uIndex = uchCRCHi ^ *puchMsg++ ; /* 计算CRC */

        uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;

        uchCRCLo = auchCRCLo[uIndex] ;

        }

        return (uchCRCHi << 8 | uchCRCLo) ;

       }

       调用方式:dd=CRC(tmp,x);

串口调试工具——Modbus Slave使用

       一、Modbus Slave使用指南

       Modbus Slave是一款模拟器,适用于构建个从设备/地址域的场景。该工具支持OLE自动化功能,与Excel报表集成,用于模拟Modbus从站设备,接收主站指令,回送数据包,帮助Modbus通讯设备开发者进行协议测试和调试。

       1、安装与注册

       安装过程简单,双击运行ModbusSlave快捷方式即可。破解方法:在"Connection->Connect"中打开注册窗口,复制ModbusPoll序列号,粘贴至注册栏后点击"OK"完成破解。安装和破解流程与ModbusPoll类似。

       2、主窗口

       启动后,主窗口显示"未连接"状态。如需测试"输出保持寄存器",可直接跳至步骤3进行连接。

       3、参数设置

       点击"Setup->Slave Definition.. F2"进入设置界面。设置内容包括:

       Slave:从站地址,对应主界面ID值,默认1。

       Function:寄存器功能码选择,四种选项对应特定功能。

       Address:寄存器起始地址,默认从1开始。

       Length:寄存器连续数量,默认个。

       设置后,模拟窗口显示定义的寄存器列表,包含ID、功能码。点击寄存器可修改值或状态。

       4、显示设置

       默认以Signed方式显示进制无符号二进制数,范围-至。通过"Display"菜单选择其他显示方式。默认使用PLC地址,若需调整起始地址为0,选择"Protocol Addresses(Base 0)"。一般使用默认设置即可。

       5、连接

       点击"Connection->Connect.. F3"启动连接。配置界面包括端口、模式、流控制等参数,默认设置为串口1、波特率、数据位8、校验位无、停止位1。确认设置后点击"OK"完成连接。

       6、寄存器值改变

       双击主窗口寄存器地址,弹出修改对话框。输入值后确认,范围为-至。勾选"Auto increment"后,值每秒增加1。

       7、查看通信数据帧

       点击"Display->Communication…",打开监视窗口,查看收发数据帧。窗口显示序号、接收和发送数据帧。

       8、断开连接

       点击"Disconnect F4"断开连接。连接状态变为"未连接"。

       通过上述步骤,用户可以高效地进行Modbus通讯协议的模拟和测试。