【S7-200 Smart开源标准化编程】modbus rtu再次封装_不用编程的modbus

已锁定

不欲勿施

  • 帖子

    843
  • 精华

    14
  • 被关注

    273

论坛等级:奇侠

注册时间:2009-03-27

钻石 钻石 如何晋级?

【S7-200 Smart开源标准化编程】modbus rtu再次封装_不用编程的modbus

7421

42

2022-11-17 12:34:37

star star

       之前发过终极封装的帖子,帖子里也说是最后的封装,可是还是不能达到我认为的完美程序。程序里有太多的位逻辑,还有跳转,这很不优雅,呵呵,况且还有一个BUG。还有坛友讽刺我的程序的时序啊,空间啊啥的,说我利欲熏心乱扯一通,还有用论坛里新号在帖子下面黑我是培训学校做广告什么的。反对我的我没收到你半毛钱,支持我的也是自愿自发的,我的程序是开源的,程序上的问题可以指出具体哪里不妥,能把程序看懂,跟得上编程思路对自身编程也是一种提高。我也有其它收费的程序,但我觉得这程序比我收费的程序更有价值。另外我不靠收费程序生活。看不惯我的,欢迎拿出漂亮的程序来PK我。之前给一个坛友悬赏1万半个月做出相同级别的modbus程序,对方也没能做出来,自己连程序都没有,却在总结编程思路。还有在技术上较真不过,说我是草包的。当然,人有千差万别,我也可能是个奇葩,但不妨碍搞技术。上来就人身攻击的就别怪被问侯家人。

       我心里功能完整的modbus rtu通信程序是这样的:

       1、读轮询。掉了站的读要跳过

       2、写优先。掉了站的写同样跳过

       3、掉站跳过和恢复。

       4、PLC上电后,要先从 从站 读回写操作的那些数据,并且写到老值区。掉了的从站记录通信状态,后期写操作时跳过,并且老值区覆盖新值区。这样是安全方面的考虑。

       5、进行掉站恢复后同样进行一次4的操作。

       6、写操作完成后,若成功则新值替换老值,不成功则老值替换新值。

       7、掉了站的写操作,老值替换新值。

       也许会有坛友说4、5功能没啥用,我只能说这是因为项目经验少。这几个功能互相之间也会打架,比如正在掉站恢复后的读回写操作数据的动作,此刻出现了写操作的请求,这是个问题。但程序里已经解决。

       假如应用中会出现同一时刻(同一扫描周期)的多个写操作,那么请把高优先级的写任务写在小序号(其实没序号)的写操作任务里。因为写操作的检查是从小序号开始的,其实是按顺序检查,先检查到的先执行。

       我推的程序不可以是半成品,不是用来交流的,必须是能在项目上应用的程序,所以要完善程序。这次封装,基本上是重新构建的,程序里更少的位逻辑,不再有跳转操作,更没有置位和复位。推荐在数据块里对参数赋值,这样可以减少程序块的占用。

       数据块里的指针赋值是一大麻烦,要么是很大的双整数,要么是十六进制数,很不方便。这次这里的改进就是输入简单的双整数,比始填4700是希望指向VB4700的指针,封装的子程序在第一个扫描周期会将4700这些双整数变成指针。当然,此数据块中输入十六进制数和很大的双整数值的指针数值也可以,是兼容的。

       


       标准化确实是有人喜欢有人反感,尤其做非标设备的可能更反感吧,都各有各的看法。我的看法是,标准化是为了更高的工作效率,比如我做的这个modbus rtu封装,只要在数据块里填上参数就可以很好的进行通信了,这样就不必每次遇到这个通信都重新编程。辛苦一人,方便大家。这不香吗?反对的人心里在想什么?

       我接下来会发一个不完整的项目应用,有人会说不符合我的风格,没办法,是因为项目最后没能做完,但做了大部分,是可以参考的。

       我通常是把焦点放在技术上的,不喜欢技术以外的胡扯。如果真能指出程序上的问题,我虚心接受,指不出问题还要装大明白的,就别怪我怼你。在使用程序时,若是有错误发生,回帖告知我一下,我检查程序。

最新程序移步到新帖下载:

S7-200 Smart开源标准化编程】modbus tcp封装

程序里有rtu和tcp两款子程序,选择使用

——————————————————————————————————————————————

       就知道下面会有人说我的程序如何如何的,就是那个长篇大论可以编出来烂程序的那个,也是我悬赏一万元也没能把自己的程序封装到一个子程序里的那个。我说了我的程序不是用来交流的而是用来实际应用的,我的这个封装的程序已经在一些小伙伴上的项目上使用了,效果非常好,事实胜于雄辨,同时给我发了不少小红包。

我偶尔到在上面的群里做直播,讲讲程序啥的,无偿的。我的这个程序都被人搬到某鱼上去卖钱了。

现在讲一讲程序里是如何实现掉站跳过功能的,方法很简单。我的程序说是跳过掉过的站,不如说是跳过错误不等于0的通信任务更贴切,并不是检查从站号来跳过的。认为我的程序是检查站号来跳站的,自然是没读懂我的程序。

我上面提到了4、5功能没有项目应用经验的是无法体会的。

掉站恢复功能是在十几秒甚至几十秒这个级别上的,所以用sm0.5会有什么问题呢。

我没必要把我的编程思想让其它人完全接受。不理解我编程上的某些做法很正常,因为大家都不是我。那些看不惯我的,没准在自己的编程中使用我的编程技巧。看不懂别人的程序不是别人的错,是自己理解不到位而以。

我发布的程序不会轻易的在一个帖子里发布多个版本,除非我想重新构建。不像有些人发布许多版确还是不能应用到项目中去程序,还美其名曰交流用的,在我看来不能应用到项目上的程序更是烂程序。

——————————————————————————————————————————————

往期帖子回顾:

S7-200 Smart开源标准化编程】之基础----突破子程序的限制,让子程序像FB一样工作

https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1730780&b_id=64&s_id=0&num=0#anch


【S7-200 Smart开源标准化编程】之三------IO对象与动作及最新例程

https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1732419&b_id=64&s_id=0&num=0#anch


本帖就做为之二的进化帖吧。看程序的话,还是以最新发的程序。

---------------------------------------------------

程序增加了新功能:

在一个从站的轮询通信任务超时后(也就是错误等于3),相同从站的轮询通信任务的错误都会改成3,同时读写操作的0和1会变成10和11,这样这些通信任务就退出轮询了,等到恢复从站的时间到了,读写操作的10和11会变成0和1。

如果想要人工的将某个轮询内的通信任务退出轮询,将其读写操作的0和1改变为0、1、10、11、以外的任意数值,这条通信任务就退出轮询了。

还是去我的其它帖子下载最新程序。

---------------------------------------------------

双口测试的程序发上来供参考

双口modbus rtu测试.smart.zip


【S7-200 Smart开源标准化编程】modbus rtu再次封装_不用编程的modbus 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7558条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。