恭喜,你发布的帖子
发布于 2022-09-22 09:38:07
70楼
程序已经是最终版本,我问几个问题:
1、在PLC上电启动后,若从站的通信状态良好,那么楼主的程序里的写操作是做什么样的动作?是直接把数据写给从站还是把从站上写寄存器里的数值读回来?有没有什么安全方面的考虑?
2、在PLC上电启动后,若从站的通信状态还没好,那么楼主的程序里的写操作是做什么样的动作?这时上位机改变了参数后,这参数又是怎么变化的?从站的通信状态又变好了,那么楼主的程序里的写操作是做什么样的动作?有没有什么安全方面的考虑?
3、程序里写操作支持哪些功能号,功能5、15,功能6、16都支持吗?
4、我未仔细研读程序,但可以看出每次扫描都进行写操作新旧参数的比较,这应该没必要,只要在每次读或写操作后进行检查即可。
5、能不能把两个子程序搞成一个子程序,这样楼主的才能完美的说取代我的程序。
感谢奇侠的回复,再最后回复一次您的疑问.
(1)在PLC上电启动后,若从站的通信状态良好,那么楼主的程序里的写操作是做什么样的动作?是直接把数据写给从站还是把从站上写寄存器里的数值读回来?有没有什么安全方面的考虑?
答:没理解:
A:有的从站(非标的)某个数据约定好只写,怎么读;即使按您说的写"老数据"直接用本例程现实数据区后面的历史数据区不行吗,还要再去回读?通讯程序(非逻辑程序)怎么能左右要写什么数据呢?触摸屏写给SmartPLC变频数据,难道SmartPLC的逻辑程序(非通讯程序)检测到掉站又恢复后的第一次写就不加判断/不分青红皂白的直接将触摸屏的频率及启动等数据写给变频器从站,让变频器启动了?从站如果没有断线保护,错误机制,心跳超时,......怎么都解决不了您"关心"的安全隐患.
B:如果您指的是回读数据地址Data_Ptr里面的内容,通讯程序只负责投递写数据区的数据.至于上电刚启动该写什么数据:那是用户的逻辑程序部分决定的,逻辑程序要考虑初始化时/出错时的瞬间应该向写数据区赋什么值,这可能和通讯程序关系不大.
C:ModbusRTU应用例程都是通讯程序,只负责数据投递;逻辑程序部分才会考虑初始化时/正常运行时/出现错误时该写什么数据,和通讯程序关系不大
(2)、在PLC上电启动后,若从站的通信状态还没好,那么楼主的程序里的写操作是做什么样的动作?
这时上位机改变了参数后,这参数又是怎么变化的?从站的通信状态又变好了,
那么楼主的程序里的写操作是做什么样的动作?有没有什么安全方面的考虑?
答:帖子的例程里都考虑了,从站没好,就跳站并重新置位#从变才写,并定期尝试再写安全数据;这个重新置位#从变才写是很有逻辑性的,非常必要的,因为掉站没写成功重新置位#从变才写=1就报证恢复后该写任务立马就有机会把掉站瞬间已经重新赋值的/安全的数据写到从站里去了,写的数据恰恰不是之前没写成功的数据,而是安全的数据;至于此时该写什么数据才是安全的应结合具体从站说明定义,并且由逻辑程序而非通讯程序决定.请参见(1)-C
(3) 、程序里写操作支持哪些功能号,功能5、15,功能6、16都支持吗?
答:这和通讯程序有什么关系,您是说西门子的库没做好?帖子中Ch_Write寄存器的分界线也基本是无任何约束的一个二分点而已,丝毫没改变官方例程的完整性.
(4)、我未仔细研读程序,但可以看出每次扫描都进行写操作新旧参数的比较,
这应该没必要,只要在每次读或写操作后进行检查即可。
答:您没细读,就说没必要,可能草率了,您再细读下想想;您说只在操作后检查有一定的道理;但持续检查也没错,实时性更好后续排序可能也是需要的.
(5)、能不能把两个子程序搞成一个子程序,这样楼主的才能完美的说取代我的程序。
答:分开简单的体现”函数指针”作为参数传递的过程,是一种不错的思路,易读性稍好,至于能不能合并帖子里有介绍.本贴例程无法取代您的程序的,因为每个人的劳动成果/思考方式/编程风格都是独一无二的,即使有点瑕疵,都应值得尊重,没法被取代,自己更是没想去取代任何事物.
(6) 楼主千万不要说什么错漏难免,你可是号称:引用:在你的文学/数学/编程等功底不一定高过我。在长篇大论方面我确实不如你,可是在程序上确实不敢恭维。
答:”不一定高”是说您有可能比我高,有毛病吗?只要是符合论坛规则的”长篇大论”不算违规吧,每个人对自己程序的看法都不一样,自己没法左右,您说不太好,也有人觉得还行.不过您提醒不要过多的”长篇大论”是合理的,有空我删减一部分.说您兜售和搞笑水平比我高点:这是真真的,看您的命名以及帖子内容可以简单判断,这是有目共睹的.
请填写推广理由:
分享
只看
楼主