-
多个变量附相同的值_相同功能带定时器的PLC程序怎么简化?
2021-01-10 06:11:20如果逐条把程序写下去,工作量会非常大,那么我们应该如何简化相同功能带定时器的PLC程序呢?简化方法我们以西门子1200为例,使用FB功能块和多重背景功能...第一步 建立”电磁阀控制”功能块FB1,设定INPUT/OUTPUT变...点击蓝字
关注我们
有时做梯形图会遇上几十个类似程序往下运行,它们都有各自独立的I,Q,T。如果逐条把程序写下去,工作量会非常大,那么我们应该如何简化相同功能带定时器的PLC程序呢?
简化方法
我们以西门子1200为例,使用FB功能块和多重背景功能块,并对定时器使用多重背景数据块进行简化(如果有人能做成循环的,就更加完美了)。
第一步
建立”电磁阀控制”功能块FB1,设定INPUT/OUTPUT变量接口参数,在静态变量中设定定时器参数TOF,类型为IEC_TIMER,写入控制程序。
插入TOF定时器时,需设置背景数据块为多重背景数据块,接口名称为之前设定的TOF。
第二步
再建一个”多重背景数据”功能块FB2,在静态变量设定要使用到的多个设备参数“电磁阀1”“电磁阀2”“电磁阀3”……数据类型为“电磁阀控制FB1”。
第三步
将FB1功能块拖入到程序中,使用几个设备(近似重复的程序段)就用几个FB1,分别设定为使用多重背景,接口类型分别选择“电磁阀1”“电磁阀2”“电磁阀3”……并输入实参。
结果如下:
第四步
在OB1中调用FB2,将FB2拖入主程序中,建立FB2背景数据块FB2_DB后保存。这样就完成了。
方法优点
1.程序做成了功能块,修改起来极为方便,只需改修单个功能块就行,不必逐条修改成百上千条类似的语句。当子程序较长时,优势更加明显;
2.排列整齐,输入输出接口清晰,也便于接口数据的输入、检查和修正;
3.避免无数条重复程序部分写错;
4.对于1200、1500而言,定时器使用多重背景数据块可以节约数据块的数量,避免使用过多的DB块,解放内存。
来源:工控论坛,留言处大家可以补充文章解释不对或欠缺的部分,这样下一个看到的人会学到更多,你知道的正是大家需要的。。。
往期推荐
【PLC编程实例】小型冷库恒温控制的PLC设计
【西门子案例】S7-1200PLC 可变延时跑马灯案例
图解 | 西门子S7-1500与触摸屏在线仿真
【案例详解】西门子200SMART实用定位程序案例详解,附源程序!
如何创建一个FB块,并进行加密封装成库文件
【案例】威纶通触摸屏通过建立过程画面来认识元件(附源程序)
伺服电机如何选择脉冲、模拟量、通讯三种控制方式?
-
java方法体的变量内存分配
2016-08-17 17:49:18java方法体的变量作为返回值的原理 在读《代码大全》时看到,...java为什么可以返回任意类型,因为java控制了引用类型不允许在栈内存中创建,java在栈的内存分配上设定了栈只存放基本类型的变量数据和引用类型的引用java方法体的变量作为返回值的原理
在读《代码大全》时看到,c语言在方法中不要返回指向局部变量的指针,想到了java中是可以返回任意类型,没有限制,这是怎么实现的。经过深入了解,c语言是可以返回局部变量指针,但是这个指针地址必须不是指向栈内存。java为什么可以返回任意类型,因为java控制了引用类型不允许在栈内存中创建,java在栈的内存分配上设定了栈只存放基本类型的变量数据和引用类型的引用。1.java方法的返回类型
1.void 无返回值;
2.基本类型 byte、short、int、long、float、double、boolean、char;3.引用类型 String、Enum、类等;
由于void没有返回值,不需要考虑,需要讨论的是返回值是基本类型和引用类型的实现原理。
2.java运行时的数据存储
1.寄存器(register) 存取速度最快,编译器根据需求进行分配,我们在程序中无法控制;2.栈(stack) 存取速度比较快,存放基本类型的变量数据和引用类型的引用;(注意引用类型本身不存放在栈中)3.堆(heap) 存取速度较慢,运行时动态分配内存,存放对象实例,New的对象实例、数组等;4.静态存储(static storage) 存储static关键字修饰的数据;
5.常量池(Constant Pool Table) 存放各种字面量和符号引用;
方法返回值的的数据存储基本使用基本类型-栈(stack)和引用类型-堆(heap) 。3.java方法返回值的原理
public int isNotEmpty(String s){ if(null!=s && s.length()>0) return 1; return 0; }
返回类型当时值类型,假如需要执行这个方法时,JVM线程的栈中会创建一个栈帧,把这个方法的局部变量表、操作数栈、动态链接、方法出口等信息存储到栈帧中,isNotEmpty方法的执行就是栈帧在虚拟机栈中从入栈到出栈的过程,方法执行完毕后,释放掉栈帧占用的内存,返回值消失。public static void main(String[] args){ int a=isNotEmpty(null); }
现在调用isNotEmpty方法并把返回值赋值给一个整形变量,这时在执行到方法的出口时,方法会把返回的值复制一份,put到main函数的栈中,isNotEmpty方法执行完毕后,释放掉栈帧占用的内存,然后进行赋值运算。public static void main(String[] args){ int arr[]=getArray(); } public int[] getArray(){ int a[]=new int[]{1,2}; return a; }
如果这时返回类型是引用类型,是怎么实现的,int a[]在getArray方法执行时,在堆中申请内存空间存储数据,然后数组a指向该内存地址,在getArray方法的栈帧中存放的是数组a地址,这时这个地址相当于值类型了,在getArray方法执行到方法的出口时,把地址的值复制一份,put到main函数的栈中,方法执行完毕后,释放掉栈帧占用的内存,这时数组a消失,但是数组a在堆中申请的空间并没有被GC回收,执行赋值操作后,数组arr的地址就指向了数组a申请的空间。这就实现了返回引用类型。
-
cad边长提取lisp_用lisp怎么提取cad中文字-内容-*通用符匹配(值 :设定)生成excel文件...
2020-12-21 06:43:24(defunC:WZ(/nss&kwLff%k%k1%k2%k3%k4%k5%k6);批量选择文字到记事本(setvar"cmdecho"0);...关闭变量(setvar"blipmode"0);;关闭控制点(vl-load-com);;加载vlax扩展函数(setqn0ss'());;取得一个空表(princ"\n请...(defun C:WZ ( / n ss &kw L ff %k %k1 %k2 %k3 %k4 %k5 %k6);批量选择文字到记事本
(setvar "cmdecho" 0) ;;关闭变量
(setvar "blipmode" 0);;关闭控制点
(vl-load-com) ;;加载vlax扩展函数
(setq n 0 ss '()) ;;取得一个空表
(princ "\n请选择文字")
(setq &kw (ssget '((0 . "TEXT,MTEXT") (1 . "*K*"))));选择文字,文字内容有字母K
(if (/= &kw nil);;如果有选择了文字
(progn
(setq L (sslength &kw)
ff (open "d://文字到表格.xls" "w");建立文本;W会把文本里面的内容清除
);;建立的文本在D盘就可以看到
(repeat L
(setq &kw1 (entget (ssname &kw n))
%k1 (cdr (assoc 10 &kw1)) ;;取得文字坐标
%k2 (cdr (assoc 1 &kw1)) ;;取得文字内容
ss (cons (list %k1 %k2) ss);;加入选择集
n (+ n 1)
)
)
(setq ss (vl-sort ss (function (lambda (x y)(
(setq ss (vl-sort ss (function (lambda (x y)(> (cadr (car x)) (cadr (car y)))))));;Y排序
(setq &kw1 (nth 0 ss)
%k1 (car (car &kw1));;取得第一个文字X坐标
%k2 (cadr (car &kw1));;取得Y坐标
%k3 (cadr &kw1);;取得文字内容
n 1
)
(repeat (- L 1)
(setq &kw2 (nth n ss);;取得第二个文字
%k4 (car (car &kw2));;取得X坐标
%k5 (cadr (car &kw2));;取得Y坐标
%k6 (cadr &kw2);;取得内容
%k (- %k2 %k5);;Y高度比较
n (+ n 1)
)
(if (> %k 20)
(progn
(princ %k3 ff);用princ写入的话,就是这个格式
(princ "\n" ff);这个格式就换行
(setq %k1 %k4 %k2 %k5 %k3 %k6)
)
)
(if (and (<= %k 20) (
(progn
(princ %k3 ff)
(princ "\t" ff);这个格式就是在同一行下一个内容
(setq %k1 %k4 %k2 %k5 %k3 %k6)
)
)
(if (and (<= %k 20) (> %k1 %k4))
(progn
(princ %k6 ff)
(princ "\t" ff)
)
)
)
(princ %k3 ff)
(close ff);;关闭文本(结束后必须关闭)
)
)
(prin1);;结束
)
(prompt "\n《C:WZ》文字写入表格")
(prin1)
;以上复制记事本以(.lsp)为后缀命名。这个程序就是一个写入表格的示范
-
多重引用块分解程序_PLC编程小知识:相同功能带定时器的PLC程序怎么简化?
2020-12-24 13:42:57有时做梯形图会遇上几十个类似程序往下运行,它们都有各自独立的I,Q,T。如果逐条把程序写下去,工作量会非常大,那么我们...第一步建立”电磁阀控制”功能块FB1,设定INPUT/OUTPUT变量接口参数,在静态变量中设定...有时做梯形图会遇上几十个类似程序往下运行,它们都有各自独立的I,Q,T。如果逐条把程序写下去,工作量会非常大,那么我们应该如何简化相同功能带定时器的PLC程序呢?
简化方法
我们以西门子1200为例,使用FB功能块和多重背景功能块,并对定时器使用多重背景数据块进行简化(如果有人能做成循环的,就更加完美了)。
第一步
建立”电磁阀控制”功能块FB1,设定INPUT/OUTPUT变量接口参数,在静态变量中设定定时器参数TOF,类型为IEC_TIMER,写入控制程序。
插入TOF定时器时,需设置背景数据块为多重背景数据块,接口名称为之前设定的TOF。
第二步
再建一个”多重背景数据”功能块FB2,在静态变量设定要使用到的多个设备参数“电磁阀1”“电磁阀2”“电磁阀3”……数据类型为“电磁阀控制FB1”。
第三步
将FB1功能块拖入到程序中,使用几个设备(近似重复的程序段)就用几个FB1,分别设定为使用多重背景,接口类型分别选择“电磁阀1”“电磁阀2”“电磁阀3”……并输入实参。
结果如下:
第四步
在OB1中调用FB2,将FB2拖入主程序中,建立FB2背景数据块FB2_DB后保存。这样就完成了。
方法优点
1.程序做成了功能块,修改起来极为方便,只需改修单个功能块就行,不必逐条修改成百上千条类似的语句。当子程序较长时,优势更加明显;
2.排列整齐,输入输出接口清晰,也便于接口数据的输入、检查和修正;
3.避免无数条重复程序部分写错;
4.对于1200、1500而言,定时器使用多重背景数据块可以节约数据块的数量,避免使用过多的DB块,解放内存。
-
JVAV写贪吃蛇小游戏,用线程实现窗口重绘,然后用键盘指令改变小蛇的方向,请问怎么让小蛇只根据指令移动?
2019-06-05 13:05:29现在的程序能够实现通每隔200ms小蛇自动往前跑一格,通过键盘指令能够改变方向,但是我不想让它自动跑,只想实现给它指令它才移动,请问怎么实现? 这是蛇的活动类 ``` package com.tcs.cn; import java.awt.... -
工作小结之一2018.11.18
2018-11-18 14:36:27写代码要规范,变量名的设定和文件日志名的取法都是有讲究的,养成规范后不用考虑怎么命名不用混淆一些变量和其他名字; 还有代码的整理版本控制,如果有一个项目,一些通用的脚本或者经常要使用的工具文件,一般会分开放... -
如何确定h.264的码率
2010-10-12 17:17:00码率 = 编码产生的总比特数 * 帧频 / 编码总帧数码率控制机制就是使编码器编码产生的码流尽量符合你设定的码率。从上面的公式可以看出,当编码帧数和帧频确定后,码率控制要做的就是控制编码产生的比特数。 A:我... -
shell的一些简单用法
2017-06-02 18:09:00一 BASH的属性 BASH中会存储一些自身属性的参数,启用或关闭某一项功能 例如控制* ....固化设定 我们前面所学习的更改变量 属性等等都是在内存中修改 机器重新启动后就会恢复默认值 那么怎么固化这些设置 ... -
6.调试程序
2019-10-09 04:56:46变量数据类型,运算符,流程控制语句都掌握了的话,谁便写个小程序都是OK的,但是如果写出的程序和我们预期的不同,我们应该怎么找错呢? 当然如果是使用工具,文本编辑器就算了吧(不方便) 明显的错误编译器会提示,我们只... -
ASP.NET程序中常用的三十三种代码
2017-07-18 10:23:41如何设定全局变量 20.怎样作到HyperLinkColumn生成的连接后,点击连接,打开新窗口? 21.读取DataGrid控件TextBox值 23.在DataGrid中有3个模板列包含Textbox分别为 DG_ShuLiang (数量) DG_DanJian(单价) DG_JinE... -
Linux脚本(shell)编程(一) 简单入门HelloWorld
2011-01-09 19:50:00作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。shell是一种解释型编程语言,这些都不重要,重要的是怎么使用它。它是比较简单的一种语言,主要用于写一 -
疯狂JAVA讲义
2014-10-17 13:35:01学生提问:为什么选择设置用户变量,用户变量和系统变量有什么区别呢? 11 1.5 第一个Java程序 12 1.5.1 编辑Java源代码 12 1.5.2 编译Java程序 13 学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件... -
仿土巴兔源码仿土巴兔源码
2018-05-26 06:40:065)判断循环执行次数的几个变量:$first、$last、$item@iteration(从1开始)、$item@index(从0开始),可以使用if语句来控制在循环执行到特定次数时给一个特别的样式,在推荐位有多行时,可能对每行最后一个推荐内容要... -
c++ 面试题 总结
2009-09-16 08:44:40子类的空间里有父类的所有变量(static除外) 同一个函数只存在一个实体(inline除外) 子类覆盖它的函数不加virtual ,也能实现多态。 在子类的空间里,有父类的私有变量。私有变量不能直接访问。 ----------------... -
计费和客户管理软件boxbilling.zip
2019-07-19 03:15:26新闻公告系统,可以让你此刻是怎么回事,并告知您的客户,通知即将举行的活动。知识库允许定义频率最常见问题的答案。定制自定义客户区主题可以很容易地集成到BoxBilling。管理员和客户的意见和主题,也可以完全... -
你必须知道的495个C语言问题.pdf
2013-01-20 14:30:541.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中是什么意思? 1.12 ... -
[你必须知道的495个C语言问题]人民邮电出版社.扫描版.pdf
2011-10-01 21:39:521.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中是什么意思? 1.12 ... -
十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备
2008-12-05 08:41:03然后再下载一个.NET FRAMEWORK SDK,安装以后会在控制面板里面的管理工具里面多两个东西,这个不用理睬他,我们要使用的还是原来的INTERNET服务管理器。打开它按照ASP教程里面的调试方法建立一个目录,建立一个... -
你必须知道的495个C语言问题.[美]Steve Summit(带详细书签).pdf 压缩版
2018-04-08 02:26:501.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 34 存储类型 35 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 35 1.11 extern在函数声明中是什么... -
你必须知道的495个C语言问题(中文高清版)
2013-03-20 13:28:286.14 如何在运行时设定数组的大小?怎样才能避免固定大小的数组? 6.15 我如何声明大小和传入的数组一样的局部数组? 6.16 如何动态分配多维数组? 6.17 有个很好的窍门,如果我这样写:intrealarray[10];... -
C语言FAQ 常见问题列表
2010-10-28 16:41:29能否关掉填充, 或者控制结构域的对齐方式? o 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充? o 3.12 如何确定域在结构中的字节偏移? o 3.13 怎样在运行时用名字访问结构中的域? o 3.14 程序... -
[你必须知道的495个C语言问题]人民邮电出版社
2012-08-18 19:02:281.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 1.11 extern在函数声明中是什么意思?... -
你必须知道的495个C语言问题
2015-10-16 14:14:286.14 如何在运行时设定数组的大小?怎样才能避免固定大小的数组? 6.15 我如何声明大小和传入的数组一样的局部数组? 6.16 如何动态分配多维数组? 6.17 有个很好的窍门,如果我这样写:intrealarray[10];int*... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:091.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 5 存储类型 6 1.10 同一个静态(static)函数或变量的所有声明都必须包含static存储类型吗? 6 1.11 extern在函数声明中是什么...
-
libFuzzer视频教程
-
BootStrap.zip
-
spring AOP 原理和介绍
-
jQuery 效果 - 淡入淡出
-
织梦电子商务协会部门单位类织梦模板(带手机端)
-
Dev 下拉框BarManager
-
【Python-随到随学】FLask第二周
-
MySQL 四类管理日志(详解及高阶配置)
-
精通编译Makefile,Nina, 从底层uboot到Android
-
PowerBI重要外部工具详解
-
nginx 更改配置client_max_body_size nginx.conf 修改默认限制上传附件大小
-
js 实现拖拽(面向对象方式实现)
-
实验1-源码
-
OPPO 新款MTK 原厂资料下载地址 (A73 A79 A83 A1 R15 A7X A3)等 秒账户
-
NFS 网络文件系统
-
物联网基础篇:快速玩转MQTT
-
pycharm 删除所有注释
-
织梦家禽畜牧养殖类网站织梦模板(带手机端)
-
NFS 实现高可用(DRBD + heartbeat)
-
2021-03-01