西门子工程师:S7-300、400 PLC 模拟量输入输出的量程转换控制
今天主要跟大家分享一个关于西门子S7-300、400PLC模拟量输入输出的量程转换控制,主要有一下内容:
一、模拟量输入、输出量程转换的概念
二、S7-300、400 PLC 模拟量输入、输出模板
1、需要使用的模板
2、涉及的信号类型
三、STEP 7 中模拟量输入、输出的编程
1、FC105、FC106 在哪里
2、FC105、FC106 功能描述
3、FC105、FC106 参数定义
4、FC105、 FC106例子程序
一、模拟量输入、输出量程转换的概念
实际的工程量,如压力、温度、流量、物位等要采用各种类型传感器进行测量。传感器将输出标准电压、电流、温度、或电阻信号供 PLC 采集,PLC 的模拟量输入模板将该电压、电流、温度、或电阻信号等模拟量转换成数字量——整形数(INTEGER)。在 PLC 程序内部要对相应的信号进行比较、运算时,常需将该信号转换成实际物理值(对应于传感器的量程)。而经程序运算后得到的结果要先转换成与实际工程量对应的整形数,再经模拟量输出模板转换成电压、电流信号去控制现场执行机构。这样就需要在程序中调用功能块完成量程转换。
如一个压力调节回路中,压力变送器输出 4-20mA DC 信号到 SM331 模拟量输入模板,
SM331 模板将该信号转换成 0-27648 的整形数,然后在程序中要调用 FC105 将该值转换成 0-10.0(MPa)的工程量(实数),经 PID 运算后得到的结果仍为实数,要用 FC106 转换为对应阀门开度 0-100%的整形数 0-27648 后,经 SM332 模拟量输出模板输出 4-20mA DC 信号到调节阀的执行机构。
二、S7-300、400 PLC 模拟量输入、输出模板
1、需要使用的模板
使用西门子 S7-300、400 PLC 进行模拟量输入、输出需要使用的模板:
S7-300系列 PLC:SM331 系列模拟量输入模板;SM332 系列模拟量输出模板;SM334、335系列模拟量输入、输出模板。
S7-400系列 PLC:SM431 系列模拟量输入模板;SM432 模拟量输出模板。
2、涉及的信号类型:电压,电流,温度,电阻。
三、STEP 7 中模拟量输入、输出的编程
1、FC105、FC106 在哪里
在编程界面下,在 Program elements 中的 Libraries 下的 Standard Library 下的 TI-S7
Converting Blocks 中就可以找到,见下图:
注意:请不要使用 S5-S7 Converting Blocks 下的 FC105, FC106,该路径下的功能是用于 S5输入输出模板的,在 S7 输入输出模板上无法使用。
2、FC105、FC106 功能描述
在编程界面下选中该功能块,按一下计算机键盘上的 F1 功能键,即可打开关于该功能块的在线帮助,包括该功能块的功能,管脚参数定义、例子程序等。建议用户使用STEP 7 在线帮助,可以提供全面的编程帮助。
FC105 功能描述
SCALE(FC105)功能将一个整形数 INTEGER(IN)转换成上限、下限之间的实际的工程值(LO_LIM and HI_LIM),结果写到 OUT。公式如下:
OUT = [ ((FLOAT (IN) – K1)/(K2–K1)) * (HI_LIM–LO_LIM)] + LO_LIM
常数 K1 和 K2 的值取决于输入值(IN)是双极性 BIPOLAR 还是单极性 UNIPOLAR。
双极性 BIPOLAR:即输入的整形数为 –27648 到 27648,此时 K1 = –27648.0 , K2 = +27648.0
单极性 UNIPOLAR:即输入的整形数为 0 到 27648,此时 K1 = 0.0 , K2 =+27648.0
如果输入的整形数大于 K2,输出 (OUT) 限位到 HI_LIM, 并返回错误代码。 如果输入的整形数小于 K1,输出限位到 LO_LIM,并返回错误代码。
反向定标的实现是通过定义 LO_LIM > HI_LIM 来实现的。反向定标后的输出值随着输入值的增大而减小。
FC106 功能描述
UNSCALE(FC106)功能将一个实数 REAL (IN) 转换成上限、下限之间的实际的工程值(LO_LIM and HI_LIM),数据类型为整形数。结果写到 OUT。公式如下:
OUT = [ ((IN–LO_LIM)/(HI_LIM–LO_LIM)) * (K2–K1) ] + K1
常数 K1 和 K2 的值取决于输入值(IN)是双极性 BIPOLAR 还是单极性 UNIPOLAR。
双极性 BIPOLAR:即输出的整形数为 –27648 到 27648,此时 K1 = –27648.0 , K2 = +27648.0
单极性 UNIPOLAR:即输出的整形数为 0 到 27648,此时 K1 = 0.0 , K2 =+27648.0
如果输入值在下限 LO_LIM 和上限 HI_LIM 的范围以外,输出 (OUT) 限位到与其相近的上限或下限值(视其单极性 UNIPOLAR 或双极性 BIPOLAR 而定),并返回错误代码。
3、FC105、FC106 参数定义
FC105 的参数定义
错误信息:
如输入的整形数大于 K2,则输出(OUT) 限位到 HI_LIM,并返回错误值。如输入的整形数小于K1,输出限位到 LO_LIM,并返回错误值。ENO 端的信号状态置为 0 且返回值 RET_VAL 为W#16#0008。
FC106 的参数定义
错误信息:
如果输入值在下限 LO_LIM 和上限 HI_LIM 的范围以外,输出 (OUT) 限位到与其相近的上限或下限值(视其单极性 UNIPOLAR 或双极性 BIPOLAR 而定),并返回错误代码。ENO 端的信号状态置为 0 且返回值 RET_VAL 为 W#16#0008。
4、FC105和FC106例子程序
FC105例子程序
如输入 I0.0 为 1,SCALE 功能被执行。下面的例子中,整形数 22 将被转换成 0.0 到 100.0 的实数并写到 OUT。输入是双极性 BIPOLAR,用 I2.0 来设置。
FC106例子程序
如输入 I0.0 为 1,UNSCALE 功能被执行。下面的例子中,实数 50.03978588 将被转换成 0.0到 100.0 的工程量,再转换成整形数并写到 OUT。输入是双极性 BIPOLAR,用 I2.0 来设置。
注意:通常在一个项目都有不只一个模拟量需要转换,FC105 和 FC106 在程序中都可多次调用,调用的方法同上述例子程序。
此次关于所要分享的内容就是这些啦!
以上,欢迎动动手分享及收藏!
0628 「万泉河」优雅的PLC程序一定是用EXCEL写出来的
0628 【万泉河】优雅的PLC程序一定是用EXCEL写出来的
我有一些认知盲区。
我一直以为,许多能谈得上PLC编程高手的同行, EXCEL的灵活运用肯定不在话下, 至少不会比办公室文员的小姑娘们水平差。
所以,以往我写文章,甚至写书,到接近EXCEL的时候就点到为止,不再多说了。
怕被人指责内容太水, 没有技术含量。
当然,同时也怕被其他行业的人看到,笑话咱们搞高大上的自动化程序,竟然连EXCEL的技巧都还掰扯不清。
所以, 我在《PLC标准化编程原理与方法》书中, 明确把EXCEL技能列在技能需求第二项, 重要程度8, 难度系数2。
因为EXCEL技能现在相当于通用技能, 而不是局限于PLC行业之内。 所以要提升技能, 或者获取答案的方法非常多,即便有解决不了的问题, 网上随便搜索一下, 分分钟可以搞定。
所以,我给标准化学员讲课时也从来不会涉及这个方面, 只需要论证出程序的整体结构, 告诉他们一句话, 这部分可以用EXCEL生成, 后面的操练就他们自己搞了。 而其实我给的资料里面,有时候会夹杂了我做项目时的EXCEL中间文件,他们或许可以借用我的EXCEL文件当模板, 自己做项目的时候可以用到。
但单独的培训交接, 是绝对不会有的。
所以,缺省我会认为,跟我学习的学员一定都具备了EXCEL的基本功。 当然每个人不一样, 如果他自己知道自己这方面有欠缺,自然会私下去补上。 不需要在我这儿添麻烦。
所以,我做的80工位双联开关的例子, 把程序脚本列在那里,在我看来,就足够优雅了,就自个儿去得意洋洋了。
比如SMART200的例子里面备注了一下:
后面79个工位调用用STL编写
//CALL L31_工位控制, GW01_SIG, LAMP, GW01_SAV
CALL L31_工位控制, GW02_SIG, LAMP, GW02_SAV
CALL L31_工位控制, GW03_SIG, LAMP, GW03_SAV
CALL L31_工位控制, GW04_SIG, LAMP, GW04_SAV
CALL L31_工位控制, GW05_SIG, LAMP, GW05_SAV
CALL L31_工位控制, GW06_SIG, LAMP, GW06_SAV
CALL L31_工位控制, GW07_SIG, LAMP, GW07_SAV
CALL L31_工位控制, GW08_SIG, LAMP, GW08_SAV
CALL L31_工位控制, GW09_SIG, LAMP, GW09_SAV
CALL L31_工位控制, GW10_SIG, LAMP, GW10_SAV
。。。。。。
而至于怎么写出来的, 这么简单的有规律的程序脚本, EXCEL分分钟可以搞定的呀!
昨天发表了文章《0627 【万泉河】程序算法的本质》,其中提到了我3年前写过的文章《201907 【万泉河】PLC编程中的循环语法使用》。
原本想得很好呢, 咱技术进步一步一个脚印,以前一篇文章的结论为基础, 发展理论到最新的认知。 没想到,在群里吵成一团, 一大票人对前一篇文章的观点压根不认同。 你不管怎么表达, 他都一口认定用循环总是最省事的,能节省编程工作量。
我就奇怪了, 你们只看到循环那几句指令省事了, 可前处理后处理的把IO映射到数组中的程序怎么写的, 怎么生成的, 那些不是工作量吗?
纠结了很久,才搞明白,很多人写程序原来都是从来不使用EXCEL的, 甚至许多EXCEL的技巧压根不晓得。难怪行业中总有那么多文章教程和视频在宣讲调用模拟量循环调用,当成提高编程效率的不二法门, 也难怪有人反而倒打一耙把我反对用循环,提倡减少用循环的文章当成流毒了。 感情是你们只会用程序软件的编辑器写程序, 从来不会用EXCEL写程序的呀!
好吧, 那我就从最水货的EXCEL技巧出发, 逐步演示用EXCEL生成PLC程序的方法吧!最终也做个80个模拟量调用的示例程序, 会与80工位双联开关程序合并到一个系列中。当然, 前提基础仍然是所有PLC平台均兼容的方法,所以不必在意我文章中演示是用的什么PLC平台。
把上述的STL程序生成的第一个实例的程序复制到EXCEL中,然后拖拽单元格右下角的小黑点拖到80行,并选择填充序列:
会发现, 程序中2个数字序列, 但EXCEL只给文本中的最后一个数字生成序列。 这怎么办?
方法是文本复制到AB两列,然后各自删掉头和尾,保证数字分到了两个列。然后这时候对这两个单元格同时拖拽80行,即生成了80行调用程序。
直接选中, 复制内容到程序中,直接可用。
当然,其实这样复制的内容中有表格分隔符,也可以另外生成一个C列, 里面的公式填入:
=A1&B1,同样拖拽到80行。 生成了80行结果。 或者在前面两列已经生成80行的情况下,直接双击黑点, 也可以。
由此得到了完整的80行程序调用。
然而, 这里80个工位编号完整整齐的从01递增到80, 是我为了例子生成便捷,刻意安排的。 而实际的工程项目中, 位号通常不连续。比如:GW1001 GW1002 GW1003 GW1004 GW1005 GW1006 GW1007 GW1008 GW1009 GW1010 GW2001 GW2002 GW2003 GW2004 GW2005 GW2006 GW3001 GW3002 GW3003 GW3004 GW3005 GW3006……总计80个。
首先把上述的位号数据复制到A列,这里是一行数据,可以先复制到一个行中,然后选择性粘贴,转置,把行排列的数据转置成了列。
程序调用的位号部分修改到AAAA,即:
CALL L31_工位控制, AAAA_SIG, LAMP, AAAA_SAV
复制到B列所有行。
C2中填入公式:
=SUBSTITUTE(B2,"AAAA",A2)
意思为把B列中的AAAA字符的部分替换为A2单元格的内容。
即得到了目标的程序, 拖拽到底, 则生成了所有程序:
然后模拟量转换程序的调用。
模拟量程序的特点是,输入的参数很多, 每一个模拟量的标定数据上下限,物理单位等都不一样,来自工艺统计的位号表,如:
工艺表中还必然另外存在一些数据信息列,我们不关心的,只需要隐藏即可,留下的内容都需要生成到程序中。 包括字符类型的注释和单位部分,我们也不愿意亲自手工二次录入,在PLC支持的情况下,可以直接做到FB的管脚上,最终不仅仅程序中直观可见, 字符数据还可以传到上位机中, 上位组态时也不必再包含这部分录入的工作量了。
那么, 程序模板会是:
"//#AAAA(IN_INT:=""AAAA"",
HI_LIM:=CCCC,LO_LIM:=BBBB,
INSTANCE:='DDDD',unit:='EEEE');"
其中除了信号名称AAAA需要替换之外,后面的BBBB,CCCC,DDDD,EEEE也分别替换为表格内的内容。
把模板所在的单元格起名字定义为AI_1500, 替换语法设置为:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AI_1500,"AAAA",B2),"BBBB",G2),"CCCC",H2),"DDDD",I2),"EEEE",F2),CHAR(10)," ")
最终生成了程序:
"AI_V019"(IN_INT:="AI_V019", HI_LIM:=100,LO_LIM:=0, INSTANCE:='DPT-R5',unit:='pa', QOUT=>"HMI".AI.AI_V019);
"AI_V020"(IN_INT:="AI_V020", HI_LIM:=500,LO_LIM:=0, INSTANCE:='DPT-F5',unit:='pa', QOUT=>"HMI".AI.AI_V020);
"AI_V021"(IN_INT:="AI_V021", HI_LIM:=55,LO_LIM:=-5, INSTANCE:='THT-R6-T',unit:='°C', QOUT=>"HMI".AI.AI_V021);
"AI_V022"(IN_INT:="AI_V022", HI_LIM:=100,LO_LIM:=0, INSTANCE:='THT-R6-RH',unit:='%', QOUT=>"HMI".AI.AI_V022);
"AI_V023"(IN_INT:="AI_V023", HI_LIM:=100,LO_LIM:=0, INSTANCE:='DPT-R6',unit:='pa', QOUT=>"HMI".AI.AI_V023);
把程序直接复制到PLC软件中,即可。
这里篇幅有限, 只复制了其中的前几行。 而实际项目中别说80个模拟量了,就是800个, 8000个, 只要工艺来的数据表格规范完整, 这些工作量都是秒成的。
比如如果有8000个的天量数据, 项目所控制的PLC CPU至少也几十个。那么只需要在数据表中标明CPU的标识, 程序生成后按标识复制到相应的CPU中即可。 啥循环都不需要做。
所有的宣传用循环语法处理模拟量的文章或者视频, 只在意了调用部分, 而参数的输入部分的工作量都忽略不计了。然而那才是工作量最大的, 最令人厌烦的。
模块参数的给定, 物理通道的给定等等,最方便的方式恰恰是通过FB调用的实例化时给定,因为可以在一行程序语句里面一次性完成。如果只为了循环调用的爽一下,留给数据整理部分的工作量反而增加了,而且分散到整个程序的多个角落去了。查错,维护都成了问题。
所有坚持使用循环语法调用模拟量程序的网友们,不妨尝试把我的程序改进到你们的模式,看看效率能不能再提高些。
本文中提及的数据表格,以及生成的例子程序,我会统一打包在一起, 方便下载和借用。
也会归档上传到“80工位双联开关”的群文件中。
当然这种程序方法也完全可以照猫画虎迁移到其它品牌平台,有兴趣者欢迎钻研一下, 完成后署名上传, 业界同行会记住你的名字你的贡献的。
相关问答
请问欧姆龙lO扩展模块怎么在pLc程序上编输入输出口?
只要在CX-programmer开发平台上的IO配置中,在对应机架的位置添加对应的模块即可。只要在CX-programmer开发平台上的IO配置中,在对应机架的位置添加对应的模块...
想自己编写STEP7模拟量4-20mA转换程序,寻求指导?
公式:(AI—K1)/(K2—K1)*(HI—LO)+LO。AI:模拟量输入K1:常量,如果PLC可以接收4-20ma信号为0,如果只能接受0-20ma信号为5530。K2:常量2764...
在线的各位知道吗,角铁法兰自动焊怎么使用?
[回答]角铁法兰自动焊超声波系统、电气配置以及操控部分均选用进口配件,并由伺服电机操控,使整机运行安稳,选用PLC程序操控,操作简单快捷,整机组织选用合...
触摸屏plc培训工作原理是什么?有人知道吗?
[回答]三菱PLC培训机分:主程序、主控程序、跳转程序、中断程序和子程序,1,主程序是一直扫描根据他的扫描周期循环、2主控程序是主控条件满足才执行内部的...
台达触摸屏老师提示initialplcstatusareafail是怎么回...
PLC初始状态区错误,不知道你用的什么型号PLC做下位?把触摸屏中系统控制区域长度设为0,在联机测试,若错误消失,说明你使用系统状态区的地址错误,手册上很详细哦...
PLC如何判断好坏?大家推荐一下
[回答]PLC用户通过对伺服驱动器的控制操作,伺服驱动器转换为对应的三相电输出进行控制。对伺服驱动器的控制操作方式,有三种的控制方式位置,速度和转矩控...
全自动缩颈机怎么用?
[回答]缩径机广泛用于煤矿锚杆螺纹部分局部缩径更可应用于螺丝生产厂家,缩径机生产效率高:每分钟可挤压5-10根锚杆,每台机每班可生产锚杆3000根左右。完全...
苏丹红是什么?苏丹红的检测方法是怎样的?-红网问答
“苏丹红”是一种化学染色剂,并非食品添加剂。它的化学成份中含有一种叫萘的化合物,该物质具有偶氮结构,由于这种化学结构的性质决定了它具有致癌性...
请问谁知道:plc电柜可以布置断路器吗?知道的请回答
[回答]plc电柜降温,里面温度高达60至70度,该设备不允许开孔散热,只能内部降温。加换热器水冷,或者加换热片外加风扇散热。plc电柜内元器件的作用是漏水保...
全自动洗衣粉包装机需要注意些什么?想知道
[回答]处理方法:袋包装机采用双级给料安装及无级变速叶片给料机构,强迫给料的方式,处理物料的加料难题。同时称重控制系统经过PLC程序控制,来控制计量的速...