恭喜,你发布的帖子
发布于 2023-04-12 00:11:55
7楼
楼主,仔细看我的提问
1、程序没有CRC校验错误反馈。不是说你的程序没有CRC校验,我说的是没有CRC校验错误反馈。
2、当执行功能15时,也就是写数字量输出时,比如向从站写12个位,那个第二个字节的高4位会置0吗?
3、程序里没有Modbus正在忙于其它请求反馈。也就是官方指令的错误6.
4、实现指令轮询很简单,我是用户,我没法用你的指令实现写优先,掉站等功能
1、如果是CRC校验错误,直接就扔了该条信息,因为不确定该条信息是从站回应的。
不过,这个CRC错误,可以开放出来,错误码定为16。
2、这个库程序,只负责通讯的,不包括数据如何处理。12个位,字节内其它4位置0,由用户程序自己处理;
3、从站忙是从站响应的,这个如果从站有错误码6,你可以看到。从站忙到 无响应,那是超时错误。
4、优先策略,是主程序的事。你可以让所有的REP=0,也就是不自动循环轮询。要通讯的参数块的REQ=1,它就进入通讯,完了自动复位REQ,等待下一次置位。
5、掉站。我记得 芳季 说过,那一个站掉了,程序还能无事一样运行。
超时时间是每个通讯单独设置的,当然可以统一为100ms之类的。让掉站影响最小,可为每一个通讯具体计算一个合适的超时时间。
每个参数块内有两个计数器,分别为通讯成功 和通讯 失败。掉站可以由主程序来监控判断。
总之一点,这个库程序不做全部的事,但是开放一些必要的数据接口供主程序进一步处理。
请填写推广理由:
分享
只看
楼主