恭喜,你发布的帖子
发布于 2021-11-16 15:08:36
27楼
认真研读后发现的一些问题
1、同一链路上多条指令如果没有做好轮询的话,你的这个指令能工作正常吗,是否会报错?
2、反馈到块外的错误信息极少,如超时,接收错误,接收信息的CRC错误,从站返回的错误
3、写多个线圈时,要将最后一个字节的不使用的高位置0,不做处理就发送出去是错误的,读取的数字量同样需要此操作。
4、两个指令间还是要有时间间隔的,因为串口上至少需要3.5个字符的间隔,程序没有体现出来
5、静态区见到有6个数据区,上限99字节,MODBUS RTU最大的数据量是120个字,显然是不够的。这又出来一个问题,如果程序中使用多条指令,那么PLC被使用的空间也是很可观的。
关于楼主之前帖子里的那个从站返回的数据帧分帧了,主要问题应该是从站的问题,不是PLC的问题。另外通过修改消息结束(通过字符间超时识别消息结束)的设置就可以解决问题。
程序确实没有封装过多功能,只是功能不全
总结:楼主分享的精神可嘉,看看就好,没法较真,还无法真正应用到实际项目中。
问题回答如下
1、同一链路上多条指令如果没有做好轮询的话,你的这个指令能工作正常吗,是否会报错?
不会报错。轮询是设备的功能与这个指令无关。使用上它的地位就和官方的Master指令一样。关于从多个设备的交互界面,到多个动态任务队列,再到通信通道的匹配执行,我有一套通用的稀缺公共资源的竞争与协调的完整调度架构,与此无关。这里不是提供完整解决方案,只是展示如何自己写协议指令而以。
2、反馈到块外的错误信息极少,如超时,接收错误,接收信息的CRC错误,从站返回的错误。
首先这个指令是给我自己用的。我所需要的错误提示,是那种能提示错误发生在某个代码段落的提示,比如501,601等,这比通常的那些指令错误提示对我更有意义。这样我就知道错误出现在哪个局部,这在调试非常便利定位错误。官方帮助里有的东西我无须重复做。
3、写多个线圈时,要将最后一个字节的不使用的高位置0,不做处理就发送出去是错误的,读取的数字量同样需要此操作。
多个线圈,我测试的时候不用,基本没怎么写。
4、两个指令间还是要有时间间隔的,因为串口上至少需要3.5个字符的间隔,程序没有体现出来。
帧的间隔在组态中设备,与通信协议无关。指令之外的问题不需要写在指令里面,调度框架能解决所有问题。
5、静态区见到有6个数据区,上限99字节,MODBUS RTU最大的数据量是120个字,显然是不够的。这又出来一个问题,如果程序中使用多条指令,那么PLC被使用的空间也是很可观的。
即使指令有多条,但实例只用一个。一个端口只需要一个Master实例。至于数据量自己改就得了,我自己用够了。
我用示波器分析线路报文的那个例子,靠帧结束条件解决不了。你还是没懂。那么我在代码中是如何对多帧进行校验的,你是没看还是没看懂。
这个指令是完全可以用的,我主要自己测试用,还有官方做不到的一些东西。之所以开源,只是为了向初学人展示一下完整的协议如何搭建。
每个人平时都是自己用,也不是商用卖钱,没必要考虑所谓的完整,自己够用随时调整即可。
开源社区的做法应该知道吧,大家自己参与完善,不是提供现成的商用产品。
既然有这么多想法,建议你把自己做的指令也向论坛免费开源。热烈欢迎!
另一个开源的主要目的,也是看见居然有人在论坛里拿自由口做的东西出来卖钱。所以抵制这种风气。
串口协议本身很简单。协议格式是固定死的,指令用法也是固定死的,CRC16算法也是固定的,就是字节码牌的游戏。本质上没啥技术含量,就是做功课搬砖的问题。
这个指令我自己平时不用,就是玩一玩。UDP那个,也是玩一玩。但都好用。
这个指令不包含任何与调度有关的元素。那是每个人自己的项目风格的问题,不干扰。
真正面向开放动态工艺的通用调度架构,我还没打算开源。是完全的平行调度,只要拽几个设备FB实例进去就OK了,可以在HMI上参数化配置通信通道。
请填写推广理由:
分享
只看
楼主