自主可控的PLC编程软件:kVPAC/Beremiz操作实践

本部分反映了在Beremiz开发环境中工作的基本方法,这些方法是创建应用程序时所必需的。

目标平台的应用程序是使用特定配置构建项目的结果。

Beremiz中的项目是源文件所在的命名文件夹。 该文件夹必须为空并且没有写保护。 如果文件夹中已经有文件,则会发出相应的错误。
以下文件和文件夹将保存在创建的文件夹中:

  • “Beremiz.xml”-此XML文件保存与项目有关的Beremiz开发环境特定的设置;
  • “src”文件夹,其中存储生成的ST和C代码以及生成的可执行二进制固件文件。
  • 创建一个新项目

    使用主菜单“文件”-“新建”(请参见图100 ),或使用控制面板上的“新建”按钮创建一个新项目。

    图100- 使用主菜单创建一个新项目

    然后将出现一个对话框(参见图101 ),您需要在其中选择将要存储此项目的文件夹。

    图101- 新项目的文件夹选择对话框

    在出现的对话框中,将提示您配置项目的主程序模块(请参见图102 )。 此对话框中包含三个字段:

  • “POU名称”;
  • “POU的类型”;
  • “语言”。
  • 图102- 添加主程序模块的对话框

    默认分配的软件模块的名称可以替换为与此软件模块的用途相对应的任何名称。

    主软件模块的类型为“程序”,稍后您可以向项目中添加其他软件模块,功能和功能块。

    在“语言”字段中,从列表中选择IEC 61131-3标准的一种语言(IL,ST,LD,FBD,SFC),将在其上实现此附加程序模块的算法和逻辑。

    单击“确定”时,具有所选参数的主程序模块将添加到项目中,默认情况下将配置项目资源:一项间隔20毫秒的循环执行任务,以及主程序的一个实例。 当您单击取消时,将创建一个没有任何设置的空项目。

    作为创建新项目过程的描述的一部分,“第一步”项目被选为IDE Beremiz测试项目标准集中的基础。 该项目中的主程序模块分别用FBD语言编写,在需要选择FBD语言的对话框中,以后可以更改主程序模块的语言。

    项目设置

    创建项目后的下一步是对其进行配置,包括设置全局变量,设置编译和布局参数以及填写有关项目的数据。

    当选择(双击鼠标左键)项目树的根元素时,项目设置面板将被调出,默认情况下,在创建项目后,该树的根元素被称为“未命名”( 见图103 )。

    图103- 项目设置面板

    该面板具有三个选项卡:

  • 配置变量;
  • 项目属性;
  • 配置。
  • 项目配置变量

    组态变量允许“程序”和“功能块”类型的程序模块使用将在项目的全局范围内定义的通用变量。

    在下面的图104中 ,在变量和常量面板中,我们使用“添加变量”按钮添加类型INT的配置常量”ResetCounterValue”,其初始值为17(请参见表3)。

    图 104-声明配置变量

    项目构建设置和与目标设备的连接

    要使用书面的应用程序,必须对其进行汇编(编译和链接),即 获取可执行文件并将其传输到目标设备以进行调试或仅执行。 在这方面,主要设置为:“执行系统URI”-目标设备的地址,以及目标平台-目标设备的平台体系结构(请参见图105 )。

    图105- 项目配置

    通常,“执行系统的URI”以下格式表示:

    <连接器类型>)/ <串行连接端口地址>:<比特率>

    根据连接到目标设备的服务类型选择连接器的类型。 例如,要在使用Soft PLC的本地计算机上调试应用程序,目标设备是Beremiz服务,并且连接器类型应为LOCAL。 要在本地计算机外部调试应用程序,请使用PYRO库,在这种情况下,“目标设备的URI”以以下格式指定:

    PYRO:// <目标设备IP地址>:<端口>

    如果项目中使用了其他库,则应通过单击要添加到“库”子菜单中库旁边的“复选框”,将它们添加到项目配置中。

    项目信息

    创建新项目时,项目信息设置中的所有必填字段均填充有默认值。 建议用相关信息替换默认设置(请参阅:图106 ),这使您可以方便地区分项目。

    图106- 填写项目数据

    项目信息中的大多数数据是可选的,但必须完成,这些字段在每个项目的命名提示中进行了标记。 在指定项目设置后,通常需要向项目中添加必要的软件模块(功能,功能块和程序),使用IEC 61131-3标准的文本和图形语言来实现其算法和工作逻辑。

    软件模块

    使用项目树的弹出菜单添加软件模块(程序,功能,功能块),在弹出菜单中必须选择“功能”,“功能块”或“程序”项。 接下来,将出现“创建新的POU”对话框。

    第一步项目是用FBD编写的主要软件模块,该模块使用以5种不同的IEC 61131-3语言编写的5个功能块。 每个功能块都是一个计数器,该计数器将输出值递增1,直到将True设置为Reset为止。 值的增量在主程序的每个循环中发生。 您可以通过在资源面板中更改主程序实例的任务持续时间来调整周期间隔。

    必须将程序program0,功能和5个功能块添加到创建的项目中:CounterST,CounterLD,CounterFBD,CounterSFC,CounterIL。 如果在项目创建期间未添加主程序模块program0,则应手动添加。 下面分别描述每个软件模块的添加。

    程序

    以下是将以FBD编写的程序添加到项目的示例。
    该软件模块的逻辑和算法如下:

  • 定义了BOOL类型的Reset变量,该变量负责重置五个计数器中的每个计数器,
  • 定义了INT类型的五个变量Cnt1..Cnt5,它们存储了五个计数器中的每个计数器的值,
  • 以及五个功能块,分别表示五种语言IEC 61131-3的增量计数器。
  • 程序启动时,默认情况下,Reset变量的初始值设置为False。
  • 计数器将从默认值开始增加(对于INT类型,它为0)。 要重置计数器,必须将Reset变量强制设置为True,然后返回False。
  • 将为变量Cnt1..Cnt5分配配置常量ResetCounterValue的初始值,因此将重置计数器值,并且倒数将从17开始。
  • 首先,通过选择“程序”项,使用项目树的菜单将程序添加到项目中(参见图107 ):

    图107- 将程序添加到项目

    在出现的对话框中(参见图108 ),选择FBD语言和POU类型的“程序”。

    图108- 将程序添加到项目的对话框

    图110- 没有链接的FBD语言程序

    在功能块与输入和输出变量之间添加链接。

    图111 -FBD语言的主要软件模块

    功能块

    通过单击项目树的弹出菜单中的“功能块”项,可以添加自定义功能块。
    在对话框(请参见图112 )中,在”POU名称”字段中指定功能块的名称,在”POU类型”字段中选择“功能块”,在“语言”字段中选择用于编写块操作算法的语言。

    图 112-用于创建新功能块的对话框

    ST语言功能块

    创建一个名称为”CounterST”的功能块(请参见图113 ),其中ST语言的工具将实现一个计数器,该计数器采用BOOL类型的Reset变量并返回Out计数器的值。

    图113- 添加自定义功能块的对话框

    与功能不同,功能块可以用IEC 61131-3的任何语言(包括SFC)进行描述。 图114以ST语言显示了此功能块的实现。

    图114 -ST语言的用户功能块说明

    “Out”的返回值为INT类型,类别为”Output”。 添加的局部变量”Cnt”和外部配置变量”ResetCounterValue”的类型为INT,输入变量”Reset”的类型为BOOL。 已实现的功能块在功能和功能块库的面板中可用,并且可以在“程序”和“功能块”类型的程序模块中使用。 图115显示了用FBD编写的主软件模块中创建的CounterST功能块的使用。

    图 115-在主程序模块中使用创建的CounterST功能块

    所有计数器共有的BOOL类型的”Reset”变量连接到”Reset”输入,执行结果放在INT类型的变量”Cnt1″中。 应该注意的是,当您尝试从项目中删除一个功能或功能块(参见图116 )时,这些已添加的程序模块已经在使用中,将会产生错误。

    图116- 删除功能块时的错误消息

    就输入,输出和局部变量的集合而言,其他语言的实现完全相同。 下面将介绍IEC 61131-3其余四种语言中的功能块示例。

    FBD功能块

    我们添加类型INT的返回值”Out”和类”Output”,类型INT的局部变量”Cnt”,类型INT的外部配置变量”ResetCounterValue”以及类型为BOOL的输入变量”Reset”。

    图119- 创建变量的对话框

    为了使”Cnt”变量能够同时分配一个值并将此值传递给Out变量,请设置”Input / Output”变量的类。 可以通过右键单击变量块,在弹出菜单中选择“输入/输出”(请参见图120 ),或用鼠标左键双击该块并在“类”下拉列表中选择“输入/输出”选项来完成此操作。 “(请参阅图121 )。

    图120- 为变量块选择连接器

    “ADD”功能位于功能和功能块库的“数学”选项卡中,指示在输入”IN1″和”IN2″上相加2至20个输入值(在我们的示例中为2个),将计算结果返回到输出”OUT” 。

    “SEL”功能代表“选择两个值之一”,位于“选择操作”选项卡中。 它包含三个输入变量”G”,”IN0″,”IN1″和一个输出”OUT”。 如果”G”为0(或FALSE),则为输出变量”OUT”分配值”IN0″。 如果”G”为1(或TRUE),则为输出变量”OUT”分配值”IN1″。

    图 122-无连接的FBD图

    下一步是将变量的输出与函数的输入连接。 我们将数字文字1与ADD函数的输入”IN1″相连,并将ADD函数的输出”OUT”与SEL函数的输入”IN0″相连。 依次,SEL功能的输出”OUT”连接到变量Cnt的输入连接器,变量Cnt的输出连接器连接到变量”Out”的输入。 通过在块连接器上按下鼠标左键来连接块,将创建一条通讯线,该通讯线必须延伸到要连接的单元的连接器上(参见图123 )。

    图123 -FBD图中的连接块

    接下来,我们将控制计数器重置的”Reset”变量连接到”SEL”功能的”G”输入,将配置变量”ResetCounterValue”连接到”IN1″输入。 因此,更改”Reset”变量的值,我们通过”SEL”值选择功能控制”Cnt”变量的值。 仍然需要在变量”Cnt”和ADD加法功能的输入”IN2″之间添加连接,从而确保在一个PLC周期内计数器值增加1。

    图124展示了使用FBD语言获得的计数器算法的实现。

    图124 -FBD语言功能块

    该功能块在功能和功能块库的面板中可用,并且可以在“程序”和“功能块”类型的程序模块中使用。 图125显示了用FBD编写的主软件模块中创建的CounterFBD功能块的使用。

    图125- 在主软件模块中使用创建的CounterFBD功能块

    SFC功能块

    创建一个称为”CounterSFC”的功能块,其中SFC工具将实现一个计数器,该计数器采用BOOL类型的”Reset”变量并返回”Out”计数器的值。

    在变量和常量面板中添加INT类型和类INT的返回值”Out”,INT类型的局部变量”Cnt”,INT类型的外部配置变量”ResetCounterValue”以及BOOL类型的输入变量”Reset”。

    单击“创建初始步骤”按钮,添加图的初始步骤,在对话框中,我们将默认步骤的名称更改为“开始”,连接器仅需“退出”( 见图126 )。

    图126- 添加初始步骤

    遵循该算法,可能有两种状态-计数器递增,并且计数器复位。 添加具有两个分支的替代分支。 根据IEC 61131-3,替代分支的每个分支必须以过渡结尾。 转换条件将是”Reset”变量的状态:对于第一个分支,表达式为”NOT Reset”,对于第二个分支,值为”Reset”(请参见:图127 )。

    图127- 添加替代分支

    在第一种状态下,添加带有动作”Count”的步骤(请参见图128 ),在ST语言的动作中,我们将计数器的增量描述为一,并将值分配给变量”Out”( 见图129 )。

    图128- 添加带有动作连接器的步骤

    图129- 添加计数器增量操作

    在第二个分支中,我们添加一个带有”ResetCounter”操作的步骤,在该操作中,我们描述了将变量”Cnt”分配给变量”ResetCounterValue”的值,并将值”Out”分配给变量”Cnt”的值(请参见:图130 )。

    图130- 添加计数器重置操作

    第一个分支负责递增计数器,第二个分支负责复位(请参见图131 )。

    图131- 操作步骤

    要退出该状态,请在第一个分支中添加一个条件为“重置”的过渡,并在第二个分支中添加一个条件为“不重置”的过渡(请参见图132 )。

    图132- 有条件转换到退出状态

    接下来,使用替代合并合并分支。 为了使程序能够循环执行,在合并后,我们向初始“开始”步骤添加了无条件转换。 S133中的最终计数器实现如图133所示。

    图133- 用SFC语言实现计数器

    该功能块在功能和功能块库的面板中可用,并且可以在“程序”和“功能块”类型的程序模块中使用。 图134显示了在以FBD编写的主软件模块中使用创建的CounterSFC功能块。

    图 134-在主软件模块中使用创建的CounterSFC功能块

    IL中的功能块

    创建一个称为”CounterIL”的功能块,IL工具将在其中实现一个采用BOOL类型的Reset并返回Out计数器的计数器。

    在变量和常量面板中添加INT类型和类INT的返回值”Out”,INT类型的局部变量”Cnt”,INT类型的外部配置变量”ResetCounterValue”以及BOOL类型的输入变量”Reset”。

    我们将编写有关重置计数器和保存结果的说明。 我们将重置计数器的指令称为”ResetCnt”,它将把ResetCounterValue操作数加载到电池中:

    ResetCnt:
    ( *重置计数器 *)
    LD ResetCounterValue

    我们将保存结果的指令称为”QuitFb”,它将保存操作数的值”Cnt”和”Out”:

    QuitFb:
    ( *保存结果 *)
    ST Cnt
    ST Out

    将操作数“重置”的值加载到电池中。 如果操作数的值为”True”,请转到ResetCnt计数器的复位指令;如果值为”False”,则操作数的值应增加一。

    LD Reset
    JMPC ResetCnt
    ( *增量计数器 *)
    LD Cnt
    ADD 1
    JMP QuitFb
    ResetCnt:
    ( *重置计数器 *)
    LD ResetCounterValue
    QuitFb:
    ( *保存结果 *)
    ST Cnt
    ST Out

    IL中的最终计数器实现如图135所示。

    图135 -IL计数器实现

    该功能块在功能和功能块库的面板中可用,并且可以在“程序”和“功能块”类型的程序模块中使用。 图136显示了在以FBD编写的主软件模块中使用创建的CounterIL功能块。

    图136- 在主软件模块中使用CounterIL功能块

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2020年9月3日
    下一篇 2020年9月3日

    相关推荐