科学技术创新2021.14
当前工业控制现场,可编制程序控制器PLC 大行其道,各种品牌百花齐放。控制过程中许多程序功能相同,
可继承与复用,但由于控制器PLC 的更换,编程人员不得不多次翻译式的重新编写与调试。由于编程人员业务水平及编程思路的差异,使得同样功能存在不同程序表达,阻滞了程序标准化与知识延续的发展,隔断了优秀程序算法的继承,同时也给维护者带来程序识读障碍,造成时间浪费。
为解决此类问题,对程序功能块在不同品牌PLC 控制器机型间的移植实现方法的需求变得尤为迫切。
1程序移植方法的提出1.1程序移植定义与特征
程序移植的定义“软件工程中,程序往往被视为有生命的机体,将源代码从一种环境下放到另一种环境下运行也可以称
之为移植。”1
程序移植需具备如下几个特征:
1.1.1源代码具备可复制性;
1.1.2源代码具备通用可识性,更换环境后可运行。1.2程序移植方法的提出
根据IEC61131-3对PLC 编程语言的规定,PLC 控制器适用图形与文本两类语言。
梯形图LD 、功能块图FBD 及顺序功能SFC 三种编程语言均强调图形的绘制,复制性欠佳,故使用图形语言编制的程序在不同品牌PLC 间不可移植。
指令表IL 编程语言属于文本语言,代码具备可复制性,但是IL 为类汇编语言,为程序执行效率计,程序编程对PLC 硬件地址依赖性很强,程序移植的通用可识性欠佳。
结构文本ST 为类PASCAL 的语言,所使用的语句与关键词符合高级语言的规定,
多种PLC 机型均可识别并运行,故ST 语言同时满足程序移植的复制性与通用可识性的特征。
据此提出使用结构文本ST 编程语言编制程序功能块实现PLC 程序在不同品牌机型中移植的方法。
2程序移植方法的实现2.1方法实验机型的选择
当下工业现场工作中的PLC 机型多数均支持IEC61131-3标准,现选用过程控制中出现频次较高的美国A
B ControlLogix1756-L71、法国施耐德M580系列CPUeP582020、德国西门子S7-300系列CPU315作为程序移植方法实现的研究
对象。2.2程序移植实现过程
本文以模拟量线性转换功能块的复制展现PLC 程序移植过程。
模拟量线性转换的算法公式为:
其中:
Y :仪表所表示的物理量真实值;
X :仪表所对应的PLC 模拟量输入模块通道转换的数字值;Metermax :仪表所对应的物理量量程最大值;Metermin :仪表所对应的物理量量程最小值;
Inputmax :PLC 模拟量模块模数转换可转换数字量最大值;Inputmin :PLC 模拟量模块模数转换可转换数字量最小值;2.2.1程序变量定义
2.2.2功能程序表述
2.2.2.1首先根据ST 语言语法使用文本文件创建程序,如下:
方舟编译器支持机型
VAR_INPUT
AI_Input :Int;
//模拟端口输入值,
对应公式中的X r_MeterMax :Real;
//仪表最大值(物理值量程)
PLC 程序在不同品牌机型间的移植方法
胡贞斌(上海电器科学研究所(集团)有限公司,上海200063)
摘要:当下的工业控制现场,可编程控制PLC 种类繁多,编程与使用方式各异,为节省编程调试时间与知识共享计,本文结合IEC 61131-3标准,对PLC 控制器所使用的梯形图(LD )、功能块图(FBD )、顺序功能图(SFC )、指令表(IL )、结构文本(ST )等编程语言进行对比,获得结构文本(ST )编程语言存在程序移植的可行性,通过对结构文本(ST )编程语言在AB (罗克韦尔)、施耐德、西
门子(TIA 系列)三种品牌PLC 控制器机型中使用的异同比较,得出一种利用结构文本(ST )编程语言编制程序功能块在多种品牌PLC 控制器间转移的应用方法。
关键词:PLC 控制器;多品牌;程序移植;结构文本语言(ST )中图分类号:TP311.54
文献标识码:A
文章编号:2096-4390(2021)14-0088-03
序号 功能类型 变量名称 数值类型 说明
1 输入 AI_Input INT 模拟端口输入值,对应公式中的X
2 输入 r_MeterMax Real 仪表最大值(物理值量程)
3 输入 r_MeterMin Real 仪表最小值(物理值量程)
4 输入 I_ModelMax INT 模块最大值(数字值量程)
5 输入 I_ModelMin INT 模块最小值(数字值量程)
6 输入 r_HH_Alarm_Set Real 超高报警限值
7 输入 r_LL_Alarm_Set Real 超低报警限值
8 输入 r_H_Alarm_Set Real 高报警限值
9 输入 r_L_Alarm_set Real 低报警限值
10 输出 r_MeterValue Real 仪表实际物理值,对应公式中的Y
11 输出 b_HH_Alarm Bool 超高报警 12 输出 b_LL_Alarm Bool 超低报警 13 输出 b_H_Alarm Bool 高报警 14 输出 b_L_Alarm Bool 低报警 15 输出 b_Max_Aalrm Bool 仪表上溢报警 16 输出
b_Min_Alarm
Bool
仪表下溢报警
88--
2021.14科学技术创新
r_Metermin:Real;//仪表最小值(物理值量程)
I_ModelMax:Int;//模块最大值(数字值量程)
I_ModelMin:Int;//模块最小值(数字值量程)
r_HH_Alarm_Set:Real;//超高报警限值
r_LL_Alarm_set:Real;//超低报警限值
r_H_Alarm_Set:Real;//高报警限值
r_L_Alarm_Set:Real;//低报警限值
END_VAR
VAR_OUTPUT
r_MeterValue:Real;//仪表换算值
b_HH_Alarm:Bool;//超高报警
b_LL_Alarm:Bool;//超低报警
b_H_Alarm:Bool;//仪表超高报警
b_L_Alarm:Bool;//仪表超低报警
b_Max_Alarm:Bool;//仪表上溢报警
b_Min_Alarm:Bool;//仪表下溢报警
END_VAR
BEGIN
(*模拟量线性转换程序*)
(*###版本V0.0#2014-11-18Copyright for Huzhenbin###*) (*##输入采集值上溢报警##*)
IF AI_Input>I_ModelMax THEN
r_MeterValue:=r_MeterMax;
b_Min_Alarm:=0;
b_Max_Alarm:=1;
END_IF;
(*##输入模拟值转换##*)
IF AI_Input<=I_ModelMax AND AI_Input>= I_ModelMin THEN
b_Max_Alarm:=0;
b_Min_Alarm:=0;
(*##数值转换:Y=(Metermax-Metermin)*X/ (Inputmax-Inputmin)+(Inputmax*Metermin-Inputmin*Metermax)/ (Inputmax-Inputmin);##*)
r_MeterValue:=(r_MeterMax-r_Metermin)* INT_TO_REAL(AI_Input)/INT_TO_REAL(I_ModelMax-I_ModelMin)+(INT_TO_REAL(I_ModelMax)*r_Metermin-INT_TO_REAL(I_ModelMin)*r_MeterMax)/INT_TO_REAL (I_ModelMax-I_ModelMin);
END_IF;
(*##输入采集值下溢报警###*)
IF AI_Input<I_ModelMin THEN
r_MeterValue:=r_Metermin;
b_Max_Alarm:=0;
b_Min_Alarm:=1;
END_IF;
(*##仪表超高限报警##*)
IF r_MeterValue>r_HH_Alarm_Set THEN
b_HH_Alarm:=1;
ELSE
b_HH_Alarm:=0;
END_IF;
(*##仪表高限报警##*)
IF r_MeterValue>r_H_Alarm_Set THEN
b_H_Alarm:=1;
ELSE
b_H_Alarm:=0;
END_IF;
(*##仪表超低限报警##*)
IF r_MeterValue<r_LL_Alarm_set THEN
b_LL_Alarm:=1;
ELSE
b_LL_Alarm:=0;
END_IF;
(*##仪表低限报警##*)
IF r_MeterValue<r_L_Alarm_Set THEN
b_L_Alarm:=1;
ELSE
b_L_Alarm:=0;
END_IF;
2.2.2.2西门子PLC S7-300CPU315的程序表述
将上述文本起始增加“FUNCTION"Analog":Void{ S7_Optimized_Access:='FALSE'}VERSION:0.1”在文件结尾增加“END_FUNCTION”,以ANSI编码保存为“*.SCL”文件。
在西门子编程软件TIA Portal中以“外部源文件”导入,使用“从源生成块”功能,编写的ST程序成功导入,可运行。
导入成功的文件有如下特点:
西门子PLC编译器对局部变量的引用采用“#”作为前缀;
为保证导入中文注释可读,文件应以ANSI编码保存。
2.2.2.3施耐德M580eP5802020的程序表达与导入
施耐德M580系列使用Unity Pro XL软件编程,软件导入文件支持“*.xdb”类型,其可使用文本文件编辑,但是其在变量描述部分为XML的描述语言,不符合ST语言的结构,对于创建的ST结构文本程序改动较大,故在程序移植过程中选用变量在编程软件中定义,程序逻辑语句复制粘贴的方式进行。
创建步骤如下:
(1)创建DFB并命名;
(2)将上述各变量在输入、输出相应位置定义;
(3)在DFB段中增加程序并选择语言为ST;
(4)将上述ST程序Begin以下复制进程序段中;
(5)编译执行;
编译过程中发现,施耐德PLC编译器对于“//”的单行注释
89
--
科学技术创新2021.14
认为是非法的。
2.2.2.4AB ControlLogix1756-L71CPU的程序表述
AB ControlLogix1756-L71CPU使用RSLogix5000软件进行编程,其对于程序导入文件类型为“*.L5X”,可使用文本文件编辑,但是其对于变量定义及程序均使用XML结构描述,如使用已编写好的结构文本程序更改,工作量大且无法保证正确,故AB PLC采用与施耐德PLC类似的编程方式,在编译器内定义变
量,逻辑程序通过文本复制方式粘贴进入编译运行。
创建步骤如下:
(1)新建“Add-OnInstructions”并选择语言为“StructuredText”;
(2)在新建的Add-OnInstructions功能块内参数与本地变量中根据输入输出类型创建程序变量;
(3)在“Logic”中将上述ST程序Begin以下复制进程序段中;
(4)编译运行。
从程序复制编译后可见,AB PLC由于数据结构的关系,其对数据类型是隐形强制转换,故在程序中出现“INT_To_Real”函数在AB PLC中无法识别,将函数去除后程序编译运行正常。
3程序移植方法总结
3.1程序移植中存在问题与解决
3.1.1存在问题
针对上述AB、施耐德及西门子(TIA系列)三种品牌PLC控制器在结构文本支持上的相异点,功能程序块在此三种PLC控制器间移植存在问题如下:
3.1.1.1Bool的表达方式
AB PLC对Bool量的结果表示为“0”与“1”,“True”与“False”的表示方法被编译器认为是非法的,但是在施耐德与西门子(TIA系列)PLC中两种表示方法均被接受。
3.1.1.2变量的引用方式
AB与施耐德PLC在结构文本中对变量的引用是直接字符表达方式,而西门子(TIA系列)在结构文本中对于全局变量使用引号“""”对于局部变量加“#”前缀表示。
3.1.1.3浮点数书写方式
AB与西门子(TIA系列)PLC控制器,浮点数可以写成整数形式,编译器可根据变量定义的类型自主转换,而施耐德PLC 则必须写成浮点数形式。
3.1.1.4单行注释的使用
在AB与西门子(TIA系列)PLC中,“//”的单行注释语句可以使用,而在施耐德PLC中“//”注释语句被编译器认为是非法的。
3.1.2解决方法
为实现程序功能块在AB、施耐德及西门子(TIA系列)三种品牌PLC控制器间的移植,对上述问题提出如下解决办法:
3.1.2.1BOOL变量赋值避免“True”与“False”的使用,在编程中保持“0”与“1”的数值表达方式,提高程序的通用性。
3.1.2.2功能程序块根据IEC6113-3标准规定的结构化文本格式使用文本文件编程,在西门子等对标准支持比较高的PLC 机型中通过导入方式完成,由编译器自主增加变量引用前缀。
3.1.2.3浮点数标准化书写,根据实际使用的小数位书写浮点数。
3.1.2.4编程过程中使用“(*…*)”对单行语句进行注释。
3.2程序移植方法的总结
根据上述对AB、施耐德、西门子(TIA系列)三种品牌PLC 的移植试验、异同比较及解决方法提出,可知使用结构化文本ST编程语言编制程序功能块在不同品牌机型中移植方法,程序编写需具备如下几个条件:
3.2.1变量命名的标准化
程序变量的命名应遵守匈牙利变量命名法,即变量名由字母、数字、符号组成,并以变量类型的字母开头,变量名长度小于31字符,避免“#”符号的使用。
3.2.2程序注释的标准化
程序注释应遵守IEC61131-3对注释的规定,使用“(*…*)”格式。
3.2.3赋值方式的统一化
程序中对BOOL量的赋值应使用“0”与“1”的数值化赋值,避免“True”、“False”的使用。
3.2.4特型函数引用的外置化
在实际编程过程中应避免对有品牌特征的函的使用,尽量使用通用的方法实现。如果是在编程中实现无法规避的函数,需在通用功能程序块外完成转换,加强程序块的通用性。
4结论
笔者使用结构化文本语言实现了模拟量线性转换、电机设备的手动控制、多台水泵组合自动运行等功能程序块在施耐德(Unity)、AB(RSLogix)、西门子(TIA)中的互相移植,实现功能程序的标准化,在排水泵站与污水处理厂等多个工程中应用,为笔者在工程调试中节省了时间。
通过笔者的工程实践证实,使用结构化文本ST编程语言编制程序功能块实现PLC程序在不同品牌机型中移植是一种可行的方法。
注释
1度百科“移植(科学术语)的解释”baike.baidu/ item/%E7%A7%BB%E6%A4%8D/4669209?fr=aladdin.
参考文献
[1]彭瑜,何衍庆.IEC61131-3编程语方及应用基础[M].北京:机械工业出版社,2009.
[2]百度百科.科学术语:移植[EB/OL].baike.baidu/item/ %E7%A7%BB%E6%A4%8D/4669209?fr=aladdin.
90 --