APP下载

PLC程序在不同品牌机型间的移植方法

2021-05-28胡贞斌

科学技术创新 2021年14期
关键词:编译器施耐德西门子

胡贞斌

(上海电器科学研究所(集团)有限公司,上海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.

猜你喜欢

编译器施耐德西门子
灵感的形状
施耐德电气(中国)有限公司
西门子(中国)有限公司
面向理想性能空间的跨架构编译分析方法
运行速度大突破华为《方舟编译器》详解
浅谈西门子LOGO在空调新风机控制系统中的应用
50MW级SGT-800型西门子燃气轮机的性能验证
优化编译器的设计
2009施耐德电气智慧家居高端研讨会
基于ARM嵌入式平台的x86译码SOC架构设计