Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Modbus
首次使用small modbus告捷
发布于 2022-01-01 09:58:34 浏览:3701
订阅该版
1.消灭本坛small modbus零贴。 2.本帖目的是交流small modbus,力所能及的解答small modbus的相关的提问。 3.small modbus的特点。虽说是small但是功能强大,支持多从机多主机,支持modbus rtu、modbus tcp;与rtthread配匹配较好,移植使用非常快、实在是太简单了。程序结果清晰,风格较好;实际使用上了多从机modbus_rtu_slave,经过经过了较为严格的测试。 4.small modbus的开源地址:https://github.com/cazure/small_modbus 5.使用small modbus的时候也发现了一些问题,想跟原作者cazure探讨。 6本人只在本帖力所能及的解答small modbus的相关的提问,请不要另行开贴。
查看更多
18
个回答
默认排序
按发布时间排序
bblythe2016
2022-01-01
这家伙很懒,什么也没写!
新年第一帖子。扔掉了用了10年之久的freemodbus,原因是问题点多、不稳定、功能也弱了。也看了本坛的其他所有的modbus。最终选择了samll modubs。 再说说freemodbus,它历史悠久,也应该到了产品末期了。
张世争
2022-01-01
学以致用
初步看了一下,比libmodbus简洁,依赖少。
文武斌
2022-06-20
这家伙很懒,什么也没写!
哈哈哈,感谢大家认可和使用这个软件包,有什么问题可以直接在这个帖子下讨论,我看到就会回答的
axw_fae
2023-12-29
这家伙很懒,什么也没写!
近期在调适 modbus tcp 时发现些问题,希望原作者能看见,并且看是否為我的问题。 1. small_modbus_port_rtthread.c 中有一句 ``` "#ifdef SMALL_MODBUS_RTTHREAD_USE_DEVICE" ``` 应该要修改成 ``` "#if SMALL_MODBUS_RTTHREAD_USE_DEVICE" ``` 才对,因為 config_small_modbus.h 是定义為 0 或 1 , 所以不管是 0 或 1 都会加载,是错的 ------------ 2. test_modbus_tcp_slave. c 中 test_modbus_tcp_slave_callback 函数,addr 值并不会超过 10000 以上! 故 switch 中的命令,皆会产生错误。 ```c static int test_modbus_tcp_slave_callback(small_modbus_t *smb, int function_code, int addr, int num, void *read_write_data) { int rc = 0; if ((addr <= 0) || (addr >= 10000)) return rc; //地址映射,地址从0开始 switch (function_code) { case MODBUS_FC_READ_HOLDING_COILS: //读取保持线圈,1bit代表一个线圈 { // if ((0 <= addr) && (addr < 10000)) //地址映射,地址从0开始 { rc = vio_read_hold_coils(addr, num, read_write_data); // vio操作 } } break; case MODBUS_FC_READ_INPUTS_COILS: //读取只读线圈,1bit代表一个线圈 { // if ((10000 <= addr) && (addr < 20000)) //地址映射,地址从10000开始 { // addr = addr - 10000; rc = vio_read_input_coils(addr, num, read_write_data); // vio操作 } } break; case MODBUS_FC_READ_HOLDING_REGISTERS: //读取保持寄存器,16bit代表一个寄存器 { // if ((40000 <= addr) && (addr < 50000)) //地址映射,地址从40000开始 { // addr = addr - 40000; rc = vio_read_hold_regs(addr, num, read_write_data); // vio操作 } } break; case MODBUS_FC_READ_INPUT_REGISTERS: //读取输入寄存器,16bit代表一个寄存器 { // if ((30000 <= addr) && (addr < 40000)) //地址映射,地址从30000开始 { // addr = addr - 30000; rc = vio_read_input_regs(addr, num, read_write_data); // vio操作 } } break; case MODBUS_FC_WRITE_SINGLE_COIL: //写单个线圈,1bit代表一个线圈 case MODBUS_FC_WRITE_MULTIPLE_COILS: //写线圈,1bit代表一个线圈 { if ((0 <= addr) && (addr < 10000)) //地址映射,地址从0开始 { rc = vio_write_hold_coils(addr, num, read_write_data); // vio操作 } } break; case MODBUS_FC_WRITE_SINGLE_REGISTER: //写单个寄存器,16bit代表一个寄存器 case MODBUS_FC_WRITE_MULTIPLE_REGISTERS: //写寄存器,16bit代表一个寄存器 { // if ((40000 <= addr) && (addr < 50000)) //地址映射,地址从40000开始 { // addr = addr - 40000; rc = vio_write_hold_regs(addr, num, read_write_data); // vio操作 } } break; } if (rc < 0) { // MODBUS_PRINTF("callback fail %d\n",rc); } return rc; } ``` 3. test_modbus_tcp_slave. c 中 `"#ifdef RT_USING_POSIX"` 这一个宏新版的 RT 已弃用了, 这一个判断可以去掉 我在修改上面的问题点后,运行好使,并且正常 ------------ 环境為 rt studio sdk 4.1.1 small modbus 為 rt studio 软件包的 lastest 版本 (不知為 v.1.0.0 还是 v1.2.0 )
xddl00
2022-01-16
这家伙很懒,什么也没写!
哪位大神能说说怎么实现“1台设备2个串口使用modbus_rtu_slave”?
HelloWenWen
2022-02-09
这家伙很懒,什么也没写!
有更多的移植教程和架构讲解吗
moonzhu
2022-03-04
这家伙很懒,什么也没写!
移植到stm32f103,出现一个问题,每发送两次读请求,返回一次数据,很头疼
认清自我
2022-03-11
这家伙很懒,什么也没写!
串口采用DMA接收,测试modbus主机历程,串口的数据modbus主机缓冲区一直获取不到,串口DMA接收中断正常进入。 ```c #define BSP_USING_GPIO #define BSP_USING_UART #define BSP_USING_UART1 #define BSP_USING_UART2 #define BSP_UART2_RX_USING_DMA static void test_modbus_rtu_master_thread(void *param) { int rc = 0; small_modbus_t *smb_master = param; rs485_rts_pin = rt_pin_get("PE.0"); //根据mcu平台修改引脚号 rt_pin_mode(rs485_rts_pin, PIN_MODE_OUTPUT); rt_pin_write(rs485_rts_pin, PIN_LOW); smb_master->timeout_frame = 2000; modbus_init(smb_master, MODBUS_CORE_RTU, modbus_port_rtdevice_create(UART_DEVICE_NAME)); // init modbus RTU mode struct serial_configure serial_config; serial_config.baud_rate = BAUD_RATE_9600; serial_config.data_bits = DATA_BITS_8; serial_config.stop_bits = STOP_BITS_1; serial_config.bufsz = RT_SERIAL_RB_BUFSZ; serial_config.parity = PARITY_NONE; modbus_rtu_set_serial_config(smb_master, &serial_config); // config serial modbus_rtu_set_serial_rts(smb_master, uart_rts); modbus_rtu_set_oflag(smb_master, RT_DEVICE_FLAG_DMA_RX); //修改了此处的接收方式。其它地方未动,仿真也看到串口接收中断正常进入,接收到的数据长度也正确。就是缓冲区一直没数据. // modbus_rtu_set_oflag(smb_master,RT_DEVICE_FLAG_DMA_RX); modbus_connect(smb_master); MODBUS_PRINTF("modbus master\n"); rt_sem_init(&(send_modbus_sem), "sendsem", 0, RT_IPC_FLAG_FIFO); while (1) { #ifdef MASTER_SEM_POLL master_sem_poll(smb_master); //主机信号量触发读写 #else master_poll(smb_master); //主机轮询从机示例代码,该操作比较费时 #endif } // modbus_disconnect(smb_master); //如果while中没有break应该不会运行到这里 } ```
翌雨芩风
2022-05-20
这家伙很懒,什么也没写!
楼主:我在使用SMALL RTU 做从机时,程序卡死在 modbus_connect(&modbus_rtu_slave); 经调试进去发现是初始化USART错误导致,调试发现,转到初始化时的参数错误,请求是何原因!谢谢回复!! 如下图 ![1.png](https://oss-club.rt-thread.org/uploads/20220607/0337b29b954d720e9a7f9615503a28dc.png.webp) ![2.png](https://oss-club.rt-thread.org/uploads/20220607/32f6061309a5c56e0fce74d5e0d39721.png)
392439401
2022-08-10
这家伙很懒,什么也没写!
大佬求解答,这个small modbus库,可以把头尾外有脏数据的Modbus数据解析出来么
撰写答案
登录
注册新账号
关注者
4
被浏览
3.7k
关于作者
bblythe2016
这家伙很懒,什么也没写!
提问
19
回答
15
被采纳
0
关注TA
发私信
相关问题
1
ModbusRTU协议栈漏发送最后一个字节
2
3.0 增加freemodbus,编译不过
3
RT_THREAD上面的串口MODBUSRTU为啥没功能码?
4
关于 freemodbus 里存在的一点问题分享
5
请教如何使用组件里的FreeMODBUS
6
求一个FreeModbus的从机测试程序
7
FreeModbus的从机调试说明(含测试程序)
8
rtt_freemodbus
9
freemodbus怎么配置到uart
10
FreeModeBus从机调试问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-Thread中的time溢出问题,时间戳溢出,解决方法
2
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
3
SystemView线程名字不显示
4
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
5
免费申请 | FRDM-MCXA156评测活动发布!
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
8
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
chenyaxing
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
3
次点赞
YZRD
1
篇文章
2
次点赞
Days
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部