回 庄小p 的帖子
庄小p:为什么我下载的从站程序是错误的?请问可以重新发吗? (2016-12-25 10:06) images/back.gif从网盘下载
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1285 请教网盘上的程序 可以用232串口吗,开发板用的是用串口1吗,波特率是不是115200 请教网盘上的程序 可以用232串口吗,开发板用的是用串口1吗,波特率是不是115200, 没搞明白线圈寄存器是啥玩意,难道还要接外设吗 好东西 比FREEMODBUS 的简单,稳定性如何
回 zerone 的帖子
zerone:比FREEMODBUS 的简单,稳定性如何 (2017-08-06 15:16) images/back.gif杠杠的,项目中一直在用。 感谢分享 好东西 代码写得一般 这么写思路不好
功能实现了还好,学生学习还是可以的。
回 jalonfun 的帖子
jalonfun:代码写得一般 这么写思路不好功能实现了还好,学生学习还是可以的。 (2017-11-17 14:48) images/back.gif
非也,经过实战的才是健壮的。
我认为写的挺好的,项目上用,效果也顶呱呱,公司那边的几款产品都是用的这个,已经经过实战验证。我们的发的很多代码基本都经过项目验证,并不是实现了功能就出来忽悠,那样的代码的是不负责的。 :lolModbusTCP/IP啥时出 我用Modbus虚拟设备,用的0x03读命令,1秒读一次,一次读21个寄存器,总是读几次后超时。 风动影动 发表于 2018-6-19 11:35
我用Modbus虚拟设备,用的0x03读命令,1秒读一次,一次读21个寄存器,总是读几次后超时。
推荐直接两个板子测试,并将两个板子的串口调试功能都打开。 所有的功能码都实现了吗?比如0x2B功能 zerone 发表于 2018-7-17 12:01
所有的功能码都实现了吗?比如0x2B功能
常用的都加上了,自己加新的也比较方便,熟悉下代码就行。 我经历了好多 void bsp_StartHardTimer(uint8_t _CC, uint32_t _uiTimeOut, void * _pCallBack)
{
uint32_t cnt_now;
uint32_t cnt_tar;
/*
Ö´ÐÐÏÂÃæÕâ¸öÓï¾ä£¬Ê±³¤ = 18us (ͨ¹ýÂß¼­·ÖÎöÒDzâÁ¿IO·­×ª)
bsp_StartTimer2(3, 500, (void *)test1);
*/
if (_uiTimeOut < 5)
{
;
}
else
{
_uiTimeOut -= 5;
}
cnt_now = TIM_GetCounter(TIM_HARD); /* ¶ÁÈ¡µ±Ç°µÄ¼ÆÊýÆ÷Öµ */
cnt_tar = cnt_now + _uiTimeOut; /* ¼ÆË㲶»ñµÄ¼ÆÊýÆ÷Öµ */
if (_CC == 1)
{
s_TIM_CallBack1 = (void (*)(void))_pCallBack;
TIM_SetCompare1(TIM_HARD, cnt_tar); /* ÉèÖò¶»ñ±È½Ï¼ÆÊýÆ÷CC1 */
TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC1);
TIM_ITConfig(TIM_HARD, TIM_IT_CC1, ENABLE); /* ʹÄÜCC1ÖÐ¶Ï */
}
else if (_CC == 2)
{
s_TIM_CallBack2 = (void (*)(void))_pCallBack;
TIM_SetCompare2(TIM_HARD, cnt_tar); /* ÉèÖò¶»ñ±È½Ï¼ÆÊýÆ÷CC2 */
TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC2);
TIM_ITConfig(TIM_HARD, TIM_IT_CC2, ENABLE); /* ʹÄÜCC2ÖÐ¶Ï */
}
else if (_CC == 3)
{
s_TIM_CallBack3 = (void (*)(void))_pCallBack;
TIM_SetCompare3(TIM_HARD, cnt_tar); /* ÉèÖò¶»ñ±È½Ï¼ÆÊýÆ÷CC3 */
TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC3);
TIM_ITConfig(TIM_HARD, TIM_IT_CC3, ENABLE); /* ʹÄÜCC3ÖÐ¶Ï */
}
else if (_CC == 4)
{
s_TIM_CallBack4 = (void (*)(void))_pCallBack;
TIM_SetCompare4(TIM_HARD, cnt_tar); /* ÉèÖò¶»ñ±È½Ï¼ÆÊýÆ÷CC4 */
TIM_ClearITPendingBit(TIM_HARD, TIM_IT_CC4);
TIM_ITConfig(TIM_HARD, TIM_IT_CC4, ENABLE); /* ʹÄÜCC4ÖÐ¶Ï */
}
else
{
return;
}
}
为什么用捕获中断呢?
A薰依 发表于 2018-8-29 17:01
为什么用捕获中断呢?
这种方式可以方便的实现单次定时。修改CCR寄存器的值就可以实现新的中断,非常方便。 :):)谢谢!!! 非常感谢,专业,专注。 大赞啊!!!! 哇,非常感谢。东西很全面 很好:loveliness: 将modbus移入RXT系统中失败了,弄了好多天没弄好,如何把modbus 程序中的三个系统中断替换掉,没整明白 yxr201314 发表于 2018-11-29 16:39
将modbus移入RXT系统中失败了,弄了好多天没弄好,如何把modbus 程序中的三个系统中断替换掉,没整明白
这里有移植好的
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17330&extra=page%3D1 请问下硬汉哥,如何实现一个MODBUS协议栈实现多个串口进行协议通讯。
比如,使用了串口1 串口2,都使用主站。协议栈本身内部的处理不用管,那么实现针对不同设备呢?是通过修改收发的API吗? 王海靖 发表于 2018-12-27 15:31
请问下硬汉哥,如何实现一个MODBUS协议栈实现多个串口进行协议通讯。
比如,使用了串口1 串口2,都使用主 ...
不好意思,忘了及时回复了。
可以重新封装一套API,实现新的例化。
或者对API做重入支持,这个好像麻烦一些。 eric2013 发表于 2019-1-9 01:32
不好意思,忘了及时回复了。
可以重新封装一套API,实现新的例化。
这个可能得研究freemodebus的源码了,挺复杂的。最简单的应该也是封装一层API,工作量还是不小。 请问一下,我目前在调试从机,用开发板测试,发送 05H :0x 01 05 01 01 00 01 5C 36 命令,显示的是这样的
串口也没有信息打印出来:
两个串口都是没有问题的,打印信息都是正常的,请问一下可能是什么原因?
stm32的每一个地址是4个字节,modbus协议地址两个字节,怎么对应起来?
TiAmo 发表于 2019-6-17 10:58
stm32的每一个地址是4个字节,modbus协议地址两个字节,怎么对应起来?
你可以自定义。 终于恢复了~~~ 我是新手有个事情不是很明白.nrf24l01能不能用这个模块代替串口 非常支持。希望做得更好 最近用这个有点点不方便,能否在“读寄存器值”的旁边加上16进制和10进制的显示选项? caicaptain2 发表于 2019-9-9 08:23
最近用这个有点点不方便,能否在“读寄存器值”的旁边加上16进制和10进制的显示选项?
这个可以有。
eric2013 发表于 2019-9-9 09:31
这个可以有。
能否让armfly的工程师尽快升级个版本? caicaptain2 发表于 2019-9-9 14:36
能否让armfly的工程师尽快升级个版本?
会为H7-TOOL配套一个新版,届时使用即可。暂时他们没有时间升级这个。