恭喜,你发布的帖子
发布于 2024-10-17 10:06:08
25楼
1200和1500的FB块中的output在其背景数据块中有存储,所以其可以在块内进行读取操作。因为FB的OUTPUT引脚除工艺对象外都是副本传递方式,读取的值为程序内部形参的最新值,无法读取该输出变量对应实参的最新值(这个也是和inout参数的重要区别之一);
由于其有背景数据块保持其值,即使在程序内第一次读取,且读取前还未对其值进行赋值,也不会存在不可预测的值,其会读取该形参的默认值(起始值),在非首次读取时,会读取该形参的最新值。
FC的output,没有背景数据块存储其值,并且在接口定义参数时,output参数不能赋默认值(起始值),所以在程序中还未对该Output参数赋值的情况下,对副本方式传递的output参数进行读取操作,会读取到不可预测的值。实际上,在FC中读取output参数时,TIA会对该指令标黄提示该指令有风险,但是编译时不会报错,也不会有警告。
FC用指针方式传递的output参数,其实质已经变为Inout参数类型了。虽然TIA依然会对其标为黄色,但是在程序内部和inout参数类型一样使用,完全可以进行读写操作。这时TIA编程建议:将该参数定义为inout参数以提高程序的可读性和规范性。
赞同你的说法。
FB中,output是有独立的背景数据块对应的,和static没什么区别,实际当成static使用也可以。在博图v19里读output也不再标黄。FB的各个变量区,input output inout static 本质相同,但是博图为他们做了功能区分,在外部调用时做了接口的映射,这个映射可以理解为梯形图的输出线圈。
如果你不遵循博图为你设置的功能区分,程序同样可以运行,最多出现双线圈情况,双线圈也不是bug,只要你理解机制就能使用。
博图本来设置的标准中,FB的背景块不要在外部使用,内部也遵循input只读 output只写 static只在fb内使用,但实际项目中至少static经常被人在外部读写,比如上位机。
FC会有一些区别,FC是没有背景数据来存储相关变量的,实际output和temp变量是一样的,如果你先读后写,读的就是初始0,博图中临时变量不同于200中不可预测,已经为你设置了初始值0或false。FC中你可以按照博图的标准来使用,input只读,output只写 temp先写后读,你不遵循同样没问题,只产生类似临时变量使用的问题。
博图的很多使用都很灵活,没有限制,这些软性标准是为了使程序标准化模块化,如果你没有完全理解,还是按照设定的标准来使用,这会更规范,程序可读性更好。
请填写推广理由:
分享
只看
楼主