1.什么是全局变量和局部变量?
以西门子的S7-200为例,输入I、输出Q、变量存储器V、内部存储器位M、定时器T、计数器C等属于全局变量,可以在符号表中为全局变量定义符号名。
程序组织单元(Program Organizational Unit)简称为POU,包括主程序、子程序和中断程序。每个POU均有自己的64字节局部变量,局部变量用L(Local)来表示,局部变量只能在它所在的POU中使用。与此相反,全局变量可以在各POU中使用。
2.局部变量有哪些类型?
子程序可以使用下列局部变量:
1) TEMP (临时变量)是暂时保存在局部数据区中的变量。只有在执行该POU时,定义的临时变量才被使用,POU执行完后,不再保存临时变量的数值。主程序和中断程序的局部变量表中只有TEMP变量。
2) IN(输入参数)由调用它的POU提供的传入子程序的输入参数。
3) OUT(输出参数)是子程序的执行结果,它被返回给调用它的POU。
4) IN_OUT(输入_输出参数)的初始值由调用它的POU传送给子程序,并用同一变量将子程序的执行结果返回给调用它的POU。
主程序和中断程序的局部变量表中只有临时变量TEMP。
3.子程序的输入、输出参数有什么作用?
具有输入、输出参数和局部变量的子程序易于实现结构化编程,对于长期生产同类设备或生产线的厂家尤为有用。编程人员为设备的各部件或工艺功能编写了大量的通用的子程序。即使不知道子程序的内部代码,只要知道子程序的功能和输入、输出参数的意义,就可以用它们快速“组装”出满足不同的用户要求的控制程序。就好像可以用数字集成电路芯片组成复杂的数字电路一样。
如果子程序没有输入、输出参数,这种子程序没有明确的软件接口,使用起来很不方便。
4.局部变量有什么优点?
1) 子程序如果没有局部变量,它和调用它的程序之间只能通过全局变量来交换数据,子程序内部也只能使用全局变量。将它移植到别的项目时,需要对各POU使用的全局变量作统一安排,以保证不会出现地址冲突。当程序很复杂,子程序很多时,这种地址分配是很花时间的。
如果子程序有局部变量,并且在子程序中只使用局部变量,不使用全局变量,因为与其他POU没有地址冲突,不作任何改动,就可以将子程序移植到别的项目中去。
为了减少移植子程序的工作量,在子程序中应尽量避免使用全局变量和全局符号。
2) 如果使用局部变量表中的临时变量(TEMP),同一片物理存储器可以在不同的程序中重复使用。
对于一个 S7-1200 CPU 的 web 服务器有 30 个连接资源用于 web 服务连接,对于 S7-1500 CPU 有138 个 web 服务连接。一个浏览器页面所占用的连接数根据浏览器的种类和版本不同而不同。 如果以管理员身份登陆到服务器上,然后在没有注销的情况下直接关闭这个应用,那么连接仍然是被保留的。如果对 S7-1200 CPU 重复 7 到 8 次这个过程,或者对 S7-1500 CPU 重复 30 到 40次,那么就会占用到*大的连接数量,不能在进行更多的通信。 此时 S7-1200 CPU 会给出消息,指出登陆名和密码是无效的。而 S7-1500 CPU 不会给出任何消息,以至于会认为是登陆名和密码是错误的。 我们推荐重新启动计算机来作为补救措施。或者,当这个连接在 30 分钟以内没有再次使用就会自动释放出来,那么就可以再次登陆了。 |
说的简单一点,FB是有背景数据块的,而FC没有。如果你有几套一样的或者相似的参数要处理的话,用FB会方便一点。
例如,计算A同学和B同学的成绩,其实每个同学的成绩都是有数学,语文,英语组成,那么在计算每个同学的数据时都是三个科目成绩相加,算法是一样的,那么我们就可以做一个功能块,把这个算法写进去,在块里面定义变量数学,语文,英语,然后把算法写好,再去为A,B同学分别创建一个数据块,也就是FB的背景数据块,你会发现,你打开北京数据块后,里面的变量和FB里面的变量名称,个数是一样的,那么把数据块1,2分别分配给A,B的话,就可以把AB同学的成绩分别写到数据块里,然后由FB调用不通的数据块就可以计算A,B的成绩了,这样每组数据都有自己的数据块,不容易造成数据混乱如果用功能FC来做的话,也可以,但是你要自己去每个数据块里面定义变量,比较麻烦,或者也可以直接把所有同学的成绩的数据全写到一个块里面,但这样容易数据混乱
还有就是FB里面是有静态变量的,而FC没有,FC有return,FB没有至于这两的用法。
- SIEMENS/西门子6ES7221-1BF22-0XA8 2023-10-26
- SIEMENS/西门子6ES7221-1BH22-0XA8 2023-10-26
- 西门子6GK7243-1GX00-0XE0 2023-10-26
- 西门子6GK7243-1EX01-0XE0 2023-10-26
- 西门子6ES7241-1AA22-0XA0 2023-10-26
- 西门子6ES7253-1AA22-0XA0 2023-10-26
- 西门子6ES7277-0AA22-0XA0 2023-10-26
- 西门子6ES7235-0KD22-0XA8 2023-10-26
- 西门子6ES7232-0HD22-0XA0 2023-10-26
- 西门子6ES7232-0HB22-0XA8 2023-10-26