Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modbus-Master错误提出,疑问,建议 #55

Open
wk4397922 opened this issue Feb 25, 2021 · 1 comment
Open

Modbus-Master错误提出,疑问,建议 #55

wk4397922 opened this issue Feb 25, 2021 · 1 comment

Comments

@wk4397922
Copy link

wk4397922 commented Feb 25, 2021

库版本:2020-5-11版

错误提出:

  1. vMBMasterCBRequestScuuess函数单词错误success
  2. mb_m.c中没有实现eMBMasterRegisterCB函数

疑问:

  1. 根据Modbus协议规范,主机广播后,从机不用应答; 而在eMBMasterPoll函数中的case EV_MASTER_EXECUTE分支中为何检测到主机为广播时,要为所有从机地址执行(对应功能码的注册函数)?
  2. vMBMasterSetCBRunInMasterMode和xMBMasterGetCBRunInMasterMode是否仅用于如下情况: 同一功能码对应的同一处理函数被同时注册到了主机库和从机库中,在执行该注册函数时,需要判断主调者的(主机/从机)身份?
  3. xMBMasterRunResTake和xMBMasterRunResRlease函数使用了Semaphore机制,是否仅用于如下情况: 在多个任务同时使用Modbus-Master库时,实现该库资源的锁,保证同一时刻仅有一个任务可以使用Master库

建议:

  1. 应该很少能遇到同一终端同时使用Master和Slave模式吧,是否可以将Master和Slave库分成两个独立的库,这样使用和分析时都更简洁
  2. 我看该版本库使用STM3210x单片机; STM32的UART_Rx_DMA有Idle中断,可以直接接收不定长bytes,同时STM32有UART_Tx_DMA. 因此(xMBMasterPortSerialPutByte/GetByte, xMBRTUReceiveFSM/TransmitFSM状态机)都可不用. 将UART_Tx_DMA和UART_Rx_DMA的buffer都指向ucRTUBuf帧缓冲后. 使能Tx_DMA即可发出帧. 在Rx_DMA中断中发出EV_MASTER_FRAME_RECEIVED事件,就可去驱动eMBMasterPoll处理接收到的帧

[email protected]
thanks

@armink
Copy link
Owner

armink commented Feb 25, 2021

感谢你的反馈,如果有错误欢迎提交 PR 哈。

对于你的疑问,这个库时间有些久远,我也记得不太清楚,一些细节建议参照 Modbus 规范进行对比确认。也可以在真机上进行验证,确认下自己的想法。

关于你的建议:

  • 第一条,其实却是存在即用主机也用从机的项目,同时主机和从机很多数据结构是可以共用的,所以放在一起可以保证内聚性
  • 第二条,对于产品中,是要保证一个软件组件,能在多个硬件平台上共用,所以会有些抽象的实现在里面,你也可以针对自己的平台进行优化

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants