PLC程序在不同品牌机型间的移植方法
2021-05-28胡贞斌
胡贞斌
(上海电器科学研究所(集团)有限公司,上海200063)
当前工业控制现场,可编制程序控制器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标准,现选用过程控制中出现频次较高的美国AB ControlLogix1756-L71、法国施耐德M580 系列CPUeP582020、德国西门子S7-300 系列CPU315 作为程序移植方法实现的研究对象。
2.2 程序移植实现过程
本文以模拟量线性转换功能块的复制展现PLC 程序移植过程。
模拟量线性转换的算法公式为:
其中:
Y:仪表所表示的物理量真实值;
X:仪表所对应的PLC 模拟量输入模块通道转换的数字值;
Metermax:仪表所对应的物理量量程最大值;
Metermin:仪表所对应的物理量量程最小值;
Inputmax:PLC 模拟量模块模数转换可转换数字量最大值;
Inputmin:PLC 模拟量模块模数转换可转换数字量最小值;
2.2.1 程序变量定义
序号 功能类型 变量名称 数值类型 说明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 仪表下溢报警
2.2.2 功能程序表述
2.2.2.1 首先根据ST 语言语法使用文本文件创建程序,如下:
2.2.2.2 西门子PLC S7-300 CPU315 的程序表述
将上述文本起始增加“FUNCTION "Analog" : Void{S7_Optimized_Access := 'FALSE' }VERSION : 0.1”在文件结尾增加“END_FUNCTION”,以ANSI 编码保存为“*.SCL”文件。
在西门子编程软件TIA Portal 中以“外部源文件”导入,使用“从源生成块”功能,编写的ST 程序成功导入,可运行。
导入成功的文件有如下特点:
西门子PLC 编译器对局部变量的引用采用“#”作为前缀;
为保证导入中文注释可读,文件应以ANSI 编码保存。
2.2.2.3 施耐德M580 eP580 2020 的程序表达与导入
施耐德M580 系列使用Unity Pro XL 软件编程,软件导入文件支持“*.xdb”类型,其可使用文本文件编辑,但是其在变量描述部分为XML 的描述语言,不符合ST 语言的结构,对于创建的ST 结构文本程序改动较大,故在程序移植过程中选用变量在编程软件中定义,程序逻辑语句复制粘贴的方式进行。
创建步骤如下:
(1)创建DFB 并命名;
(2)将上述各变量在输入、输出相应位置定义;
(3)在DFB 段中增加程序并选择语言为ST;
(4)将上述ST 程序Begin 以下复制进程序段中;
(5)编译执行;
编译过程中发现,施耐德PLC 编译器对于“//”的单行注释认为是非法的。
2.2.2.4 AB ControlLogix1756-L71 CPU 的程序表述
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.1 Bool 的表达方式
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.1 BOOL 变量赋值避免“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 程序注释的标准化
程序注释应遵守IEC 61131-3 对注释的规定,使用“(*…*)”格式。
3.2.3 赋值方式的统一化
程序中对BOOL 量的赋值应使用“0”与“1”的数值化赋值,避免“True”、“False”的使用。
3.2.4 特型函数引用的外置化
在实际编程过程中应避免对有品牌特征的函的使用,尽量使用通用的方法实现。如果是在编程中实现无法规避的函数,需在通用功能程序块外完成转换,加强程序块的通用性。
4 结论
笔者使用结构化文本语言实现了模拟量线性转换、电机设备的手动控制、多台水泵组合自动运行等功能程序块在施耐德(Unity)、AB(RSLogix)、西门子(TIA)中的互相移植,实现功能程序的标准化,在排水泵站与污水处理厂等多个工程中应用,为笔者在工程调试中节省了时间。
通过笔者的工程实践证实,使用结构化文本ST 编程语言编制程序功能块实现PLC 程序在不同品牌机型中移植是一种可行的方法。
注释
1百度百科“移植(科学术语)的解释”https://baike.baidu.com/item/%E7%A7%BB%E6%A4%8D/4669209?fr=aladdin.