广州大彩串口屏论坛_大彩开发者交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 51|回复: 0

【模块开源】ModbusRTU封装类-自动重试+任务回调

[复制链接]

64

主题

235

帖子

4040

积分

版主

大彩爱好者Q群14769485

Rank: 7Rank: 7Rank: 7

积分
4040
QQ
发表于 昨天 02:46 | 显示全部楼层 |阅读模式
本帖最后由 小逸老师 于 2025-5-16 02:48 编辑
本函数封装库与大彩的mb_read_coil_*不同的是,本库采用任务队列+任务回调方式,笼统点就是发送时填写一个函数名称作为任务回调,发送完毕后系统会自动接收处理数据并在在指定的重试指定次数内回调到你指定的函数中。可以开启或关闭是否处理非本函数库发送而接收到的Modbus指令。本库发送完毕后不会立即返回结构,结果将在指定的回调函数中触发。本库有超时+重试次数+crc校验+部分功能码字节长度校验,在重试次数中确保指令能“尽量”响应并返回。

e_modbus是一个重新封装的非实时类modbus操作函数库
作用是发送与确保接收成功,在发送过程中会进行指定的重试次数确保成功接收,如果几次重试都没成功会也会回调
注意事项:本库不适合需要百分比精度的请求,也不适合进行安全敏感通讯
使用方式:(本库需使用自由串口协议,故使用此库后屏幕将不能处理屏幕自带的modbus协议功能)
                --重要:优先在main.lua最顶部加入  uart_free_protocol = 1 --启用自由协议,否则main.lua的on_uart_recv_data串口回调事件中不能接收串口数据
                -- 1、使用dofile("e_modbus.lua")加载本库
                -- 2、启用1个顺循环无限重复定时器,并在该定时器的回调中填写 on_timer() 的时钟挂接事件(时钟周期建议20ms以内)
                -- 3、在屏幕的 on_uart_recv_data(packet) 回调函数中填写 emb_uart_recv_data(packet) 挂接本库的串口处理事件
                -- 4、使用 emb_send(回调函数,"任意类型备注,回调里将会回复这个",丛站号,功能码,起始寄存器,数据,重试次数) 函数发送,例如emb_send(call,"查询状态",4, 0x03,0x0004,0x0001,5)
                -- 5、定义一个call(是否成功,任意类型备注返回,站号,功能码,数据,是第几次重试才返回的)函数,例如function call(success, task_flag, slave, func, data, retry_count),call函数名称随意命名,但是需要和emb_send的回调函数名称一致。


关于接收精度:本库采用波特率+modbus协议标准帧间隔等等进行精度等待,如您有更好的建议欢迎回复。
扩展改造说明:本库采用分离式设计,默认含串口通讯方式,如果需要扩展tcp、udp等只需要将发送函数和接收函数在对应的通讯收发函数中改进即可。

BY:小逸老师,软件定制开发请联系我哦。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
大彩爱好者Q群14769485
点我下载→TFT【易模块】封装好的函数库
点我下载→TFT屏可中文lua编辑器【好用】
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|广州大彩串口屏论坛_大彩开发者交流论坛

GMT+8, 2025-5-17 23:41 , Processed in 0.050710 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表