网站首页 > 技术文章 正文
本部分反映了在Beremiz开发环境中工作的基本方法,这些方法是创建应用程序时所必需的。
目标平台的应用程序是使用特定配置构建项目的结果。
Beremiz中的项目是源文件所在的命名文件夹。 该文件夹必须为空并且没有写保护。 如果文件夹中已经有文件,则会发出相应的错误。
以下文件和文件夹将保存在创建的文件夹中:
- “Beremiz.xml"-此XML文件保存与项目有关的Beremiz开发环境特定的设置;
- “Plc.xml"-在此XML文件中,保存了项目的完整说明:所有程序模块,资源,用户数据类型,项目数据,图形语言编辑器的设置IEC 61131-3;
- “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- 将程序添加到项目的对话框
在变量和常量面板中添加BOOL类型的Reset变量,该变量负责重置五个计数器中的每一个,以及五个INT类型的变量Cnt1..Cnt5,它们将存储五个计数器中的每一个的值。 接下来,您需要联系FBD语言编辑器。 为了编写用于执行该程序的算法和逻辑,我们需要计数器的功能块,其创建在6.3.2节中讨论。
为了便于编辑FBD图表,编辑器中存在拖放功能;可以通过拖放到编辑字段中,从功能库和功能块以及变量表中将必要的功能块和变量添加到编辑字段中。 在变量和常量面板中,在变量的“#"列上单击鼠标左键,然后将指针移至FBD图表的编辑区域,然后释放鼠标按钮(拖放)。
在图的编辑字段中传输5个Reset变量实例和所有Cnt1..Cnt5变量, 如图109所示:
图109- 在编辑字段中传递变量
从功能和功能块库中,我们添加了自定义功能块。 通过使用鼠标(拖放)将相应功能从功能和功能块库的面板转移到该程序模块图的FBD编辑区域,可以更方便地添加功能块的数据, 如图110所示:
图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功能块
创建一个名称为"CounterFBD"的功能块,FBD工具将在该功能块中实现一个计数器,该计数器采用BOOL类型的"Reset"变量,并返回"Out"计数器的值。 为了便于编辑FBD图表,编辑器具有拖放功能,可以通过拖放到编辑字段中将必要的功能块和变量从功能和功能块库以及变量表添加到编辑字段中(请参见图117 )。 在变量和常量面板中,在变量的“#"列上单击鼠标左键,然后将指针移至FBD图表的编辑区域,然后释放鼠标按钮(拖放)。
我们添加类型INT的返回值"Out"和类"Output",类型INT的局部变量"Cnt",类型INT的外部配置变量"ResetCounterValue"以及类型为BOOL的输入变量"Reset"。
图117- 将变量添加到编辑字段
传输到编辑字段的变量显示为带有输入和输出连接器的矩形块(请参见图118 )。
图118- 编辑字段中的变量块
将所有变量传送到编辑字段后,使用“创建新变量"按钮添加数值为"1"的数字文字;在用于创建变量的对话框中,在“表达式"字段中写入"1"(参见图119 )。 这样,设置了计数器的增量步长。
图119- 创建变量的对话框
为了使"Cnt"变量能够同时分配一个值并将此值传递给Out变量,请设置"Input / Output"变量的类。 可以通过右键单击变量块,在弹出菜单中选择“输入/输出"(请参见图120 ),或用鼠标左键双击该块并在“类"下拉列表中选择“输入/输出"选项来完成此操作。 “(请参阅图121 )。
图120- 为变量块选择连接器
图121- 用于编辑变量块属性的对话框
接下来,您需要联系FBD语言编辑器。 为了编写用于执行该程序的算法和逻辑,将添加两个功能:"ADD"和"SEL"。
"ADD"功能位于功能和功能块库的“数学"选项卡中,指示在输入"IN1"和"IN2"上相加2至20个输入值(在我们的示例中为2个),将计算结果返回到输出"OUT" 。
"SEL"功能代表“选择两个值之一",位于“选择操作"选项卡中。 它包含三个输入变量"G","IN0","IN1"和一个输出"OUT"。 如果"G"为0(或FALSE),则为输出变量"OUT"分配值"IN0"。 如果"G"为1(或TRUE),则为输出变量"OUT"分配值"IN1"。
通过使用鼠标(拖放)将相应功能从功能库和功能块面板移至功能块图的FBD编辑区域,可以更加方便地添加这些功能。 以上步骤的结果应该是没有连接的FBD图(请参见图122 )。
图 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"。
为了易于编辑SFC图表,编辑器具有拖放功能,可以通过拖放到编辑字段中将必要的功能块和变量从功能和功能块库以及变量表添加到编辑字段中(请参见图117 )。 在变量和常量面板中,在变量的“#"列上单击鼠标左键,然后将指针移至SFC图表的编辑区域,然后释放鼠标按钮(拖放)。
单击“创建初始步骤"按钮,添加图的初始步骤,在对话框中,我们将默认步骤的名称更改为“开始",连接器仅需“退出"( 见图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"。
为了方便起见,在IL编辑器中编辑代码具有拖放功能,可以通过将变量拖放到编辑字段中来从变量表中将必需的变量添加到编辑字段中(请参见图116 )。 在变量和常量面板中,在变量的“#"列上单击鼠标左键,然后将指针移至编辑区域并释放鼠标按钮(拖放)。
我们将编写有关重置计数器和保存结果的说明。 我们将重置计数器的指令称为"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功能块
LD功能块
创建一个称为"CounterLD"的功能块,其中LD工具将实现一个计数器,该计数器采用BOOL类型的"Reset"变量并返回"Out"计数器的值。
在变量和常量面板中添加INT类型和类INT的返回值"Out",INT类型的局部变量"Cnt",INT类型的外部配置变量"ResetCounterValue"以及BOOL类型的输入变量"Reset"。
为了便于编辑LD图,编辑器具有拖放功能,可以通过拖放到编辑字段中将必要的功能块和变量从功能和功能块库以及变量表添加到编辑字段中(请参见图117 )。 在变量和常量面板中,在变量的“#"列上单击鼠标左键,然后将指针移至LD图表的编辑区域,然后释放鼠标按钮(拖放)。
添加电源总线,将与"Reset"变量关联的触点连接到它(请参见图137 )。
图137- 添加触点的对话框
当"Reset"变量的值更改为True时,结果设计将发送信号以重置计数器(请参见图138 )
图138- 与Reset变量关联的触点
接下来,使用“创建新变量"按钮添加数字文字,其值为"1",在“表达式"字段中用于创建变量的对话框中,输入"1"( 见图139 )。 这样,设置了计数器的增量步长。
图139- 创建变量的对话框
传输到编辑字段的变量显示为带有输入和输出连接器的矩形块(请参见图140 )。
图140- 编辑字段中的变量块
为了使"Cnt"变量能够同时分配一个值并将此值传递给Out变量,请设置"Input / Output"变量的类。 您可以通过在变量块上单击鼠标右键,在弹出菜单中选择“输入/输出"(请参见图141 ),或用鼠标左键双击该块并在“类"下拉列表中选择“输入/输出"选项来执行此操作。 "(请参见图142 )。
图141- 为变量块选择连接器
图142- 用于编辑变量块属性的对话框
为了编写用于执行该程序的算法和逻辑,将添加两个功能:"ADD"和"SEL"。
"ADD"功能位于功能和功能块库的“数学"选项卡中,指示在输入"IN1"和"IN2"上相加2至20个输入值(在我们的示例中为2个),将计算结果返回到输出"OUT" "。
"SEL"功能代表“选择两个值之一",位于“选择操作"选项卡中。 它包含三个输入变量"G","IN0","IN1"和一个输出"OUT"。 如果"G"为0(或FALSE),则为输出变量"OUT"分配值"IN0"。 如果"G"为1(或TRUE),则为输出变量"OUT"分配值"IN1"。
通过使用鼠标(拖放)将相应功能从功能库和功能块面板移至功能块图的FBD编辑区域,可以更加方便地添加这些功能。 以上步骤的结果应该是没有连接的LD图。
图143- 没有连接的LD图
下一步是将变量的输出与函数的输入连接。 我们将数字文字1与ADD函数的输入"IN1"相连,并将ADD函数的输出"OUT"与SEL函数的输入"IN0"相连。 依次,SEL功能的输出"OUT"连接到变量Cnt的输入连接器,变量Cnt的输出连接器连接到变量"Out"的输入。 按住块的连接器上的鼠标左键可以进行块的连接,将创建一条通讯线,必须将其延伸到所连接块的连接器上。
图144- 块的连接
接下来,将与控制计数器复位的“复位"变量关联的触点的信号连接到"SEL"功能的"G"输入,并将配置变量"ResetCounterValue"连接到"IN1"输入。 因此,更改"Reset"变量的值,我们通过"SEL"值选择功能控制"Cnt"变量的值。 仍然需要在变量"Cnt"和ADD加法功能的输入"IN2"之间添加连接,从而确保在一个PLC周期内计数器值增加1。
LD中计数器算法的最终实现如图145所示 。
图145 -LD功能块
该功能块在功能和功能块库的面板中可用,并且可以在“程序"和“功能块"类型的程序模块中使用。 在图。 图146示出了用FBD编写的主软件模块中所创建的counterFBD功能块的使用。
图146- 主程序模块中LD功能块的使用
功能
通过单击项目树的弹出菜单中的“功能"项,可以添加自定义功能块。 在对话框中的"POU名称"(POU Name)字段中指定函数的名称,在"POU Type"(POU Type)字段中选择"function",在"Language"(Language)字段中选择将编写函数算法的语言。
图147- 用于创建函数的对话框
让我们用ST语言创建"AverageVal"函数,该函数将计算循环中计数器的平均值。 由于计数器不以任何方式同步,因此平均值应为分数。 我们选择函数返回值的类型-对于分数,这是REAL类型。
图148- 选择函数返回值的类型
在用于编辑变量和常量的面板中,添加五个INT类型的类"Input"的变量"Cnt1" .."Cnt5"。 上面讨论的功能块的输出值将连接到这些输入。 添加类型为REAL的类"Local"的变量"InputsNumber"。
然后,在ST语言编辑器中,编写该函数的算法和逻辑,如图2所示。 149:
图149- 函数算法和逻辑的定义
要将INT类型转换为REAL类型,我们使用功能和功能块库中的INT_TO_REAL函数;它将输入IN处的INT类型的值转换为输出OUT(INT:IN)=>(REAL:OUT)处的REAL类型的值。
向主软件模块添加功能。 在“自定义POU"部分的功能和功能块库的面板上,选择"AverageVal"功能,然后使用鼠标指针(按住鼠标左键)将该功能(拖放)转移到程序模块program0图的FBD编辑区域。
图150- 向FBD添加自定义功能图
将五个计数器的值连接到函数的输入。 要保存函数计算结果,请创建变量"AVCnt"。 图151显示了在以FBD编写的主软件模块中使用创建的功能"AverageVal"。
图151- 在主软件模块中使用功能
资源
根据IEC 61131-3,每个项目必须至少具有一个资源,并在其中至少定义了一个实例。 实例是与“程序"类型的程序模块和一个特定任务关联的元素。 默认情况下,Beremiz开发环境为新项目创建一种资源。
全局资源变量
使用“添加变量"或“添加变量"按钮,可以在变量面板和所选资源的常量中类似于项目的全局变量声明资源的全局变量(请参见表3)。
图152- 在项目中声明全局变量的示例
在资源级别使用这些全局变量也类似于在程序模块中使用项目配置变量。 要在程序模块中使用资源的全局变量,请向模块添加“外部"类的变量,其名称应与上面为资源声明的全局变量相同。
任务和资源实例
要创建实例,您在项目中必须至少有一个“程序"类型的程序模块,并且在资源编辑面板中至少要定义一个任务。
使用“添加"按钮添加任务(此按钮类似于变量和常量面板上的“添加"按钮)后,您必须指定其唯一名称(“名称"字段)并选择任务执行的类型(“运行"字段,请参见图153) ):
- “循环"-在“时间间隔"字段中指定的指定时间间隔后执行“程序"类型的程序模块;
- “中断"-一旦在项目级别或在“源"字段中指定的资源级别定义的BOOL类型的全局变量的TRUE值出现,即执行“程序"类型的程序模块。
图153- 选择任务执行的类型
如果选择执行类型“循环",则必须在“间隔"字段中指定将执行此任务的间隔。 在“时间间隔"(Interval)字段上双击鼠标左键,将显示"..."按钮。
图154- 以循环执行模式添加任务
按下此按钮将打开“编辑持续时间"对话框,您可以在其中使用微秒,毫秒,秒,分钟,小时和天指定时间。
图155- 用于编辑任务持续时间的对话框
使用“确定"按钮完成时间输入后,将关闭对话框,并将此时间间隔添加到要添加的任务的“间隔"字段中。
图156- 添加的执行间隔
如果在“源"(Source)字段中选择“中断"(Interrupt)执行类型,则必须指定在项目级别或资源级别全局定义的BOOL类型变量。 在图157中 ,选择了在此资源中定义的"globalFlag"变量。
图157- 选择BOOL类型的变量作为启动任务的中断源
该字段中定义的变量的值为TRUE时,任务将被执行一次。 “优先级"字段允许您指定任务的优先级;默认情况下,所有任务的优先级均为0。应注意,必须在资源中至少定义一个执行类型为“循环"的任务,否则调试控制台中将出现编译错误。 定义任务后,即可在实例中使用它们。 使用“添加"按钮以相同的方式创建实例。 您必须选择唯一的实例名称,然后在“类型"字段中指定“程序"类型的程序模块,并在“任务"字段中指定任务之一。 例如,在项目中定义了两个“程序"类型的程序模块:"program0"和"program1"。
图158- 包含两个“程序"类型的程序模块的项目
因此,在“类型"(Type)字段中创建实例时,这两个程序模块都将可用(请参见图159)。
图159- 为实例选择类型为“程序"的程序模块
同样,从列表中选择一个任务,其中将显示先前定义的任务。
图160- 为实例选择任务
在每个项目中,必须在资源中至少定义一个实例,否则,将在调试控制台中发出编译错误。
数据类型
通过在已创建的包含“程序"类型的程序模块-"program0"的程序的项目中选择项目树菜单(参见图161 )中的“数据类型"项,可以添加数据类型。
图161- 选择菜单项以在项目树中添加自定义数据类型
将创建一个由11个元素组成的INT数组。 项目树中将出现名称为"datatype0"的添加数据类型的编辑面板。 在“用于创建新类型的机制"字段中,选择“数组"并指定类型INT, 如图162所示:
图162- 选择数组的基本类型
使用“添加"按钮(请参见表10),为数组创建一个字段,其尺寸为适当的格式。
图163- 设置数组的尺寸
执行完上述操作后,类型"datatype0"可用于定义程序模块中的变量以及基本数据类型。
图164- 在程序模块的变量和常量面板中选择添加的数据类型
汇编并转移到应用程序的目标设备中
创建项目的基本元素之后的下一步是程序集(编译和布局),将生成的可执行文件传输到目标设备以及对该应用程序进行调试。
使用工具栏上的相应按钮来构建项目。 为了成功完成此操作,每个项目必须至少具有一个资源(如上所述,创建项目时,默认情况下将创建一个资源)。 资源必须定义至少一个循环类型的任务和至少一个实例。 因此,该项目必须包含至少一个“程序"类型的程序模块,其主体为: 算法及其执行逻辑不能为空(否则会出现编译错误)。
向目标设备传输和调试应用程序的能力取决于目标设备上运行的Beremiz开发环境的服务器部分的存在。
Beremiz开发环境提供以下调试功能:
- 使用调试面板查看和更改所有项目变量的值;
- 以视觉方式跟踪图形语言中程序的执行情况,并更改特定语言的各种图形元素的值;
- 在图形中显示变量值。
下面将更详细地描述应用程序的汇编,与目标设备的连接以及可执行文件的传输及其调试。
构建应用程序
在将项目传送到PLC之前,必须先进行构建。 您可以在项目设置窗口的“配置"选项卡上为构建配置目标平台。
要构建项目,请单击“在构建目录中构建项目"按钮(请参见表2)。 构建结果显示在程序窗口底部的控制台中,构建错误以红色突出显示。 在First_steps项目的示例中,构建后,控制台中会显示一条消息,表示构建成功。
图165- 构建结果显示在控制台中。
可以通过单击“清除项目组合目录"按钮清除项目组合目录来重新构建项目(请参见表2)。 以ST语言生成的项目代码和已编译的二进制PLC固件文件将被删除。 之后,单击“在构建目录中构建项目"按钮,该项目将被重新构建。
启动服务器端进行调试
Beremiz开发环境的服务器端位于Beremiz_service.py文件的Python脚本中,这是将可执行文件传输到目标设备并对其进行调试所必需的。 该文件由带有默认参数的以下命令从命令行启动(请参阅表13):
$ python Beremiz_service.py
另外,在启动时,可以指示表13中所示的参数。
表13-用于启动Beremiz环境的服务器端的命令行选项
参数
手术
-i 用于客户端访问的IP地址指示,默认为127.0.0.1(localhost)
-p 端口号,默认为3000
-h 输出到控制台帮助以使用此服务器
-a 自动启动目标设备(0-关闭,1-开启),默认为0。
-x 启用/禁用任务栏图标(0-禁用,1-启用),默认为0。
-t 基于Twisted库的Web界面(0-禁用,1-启用),默认值为0。它允许您通过浏览器监视程序的状态。 地址:http:// <目标设备的IP地址>:<8009>。 8009是默认端口。
在指定用于启动Beremiz服务器端的命令的所有参数之后,您可以输入目录地址,目标设备文件系统上的文件将存储在该目录中。 默认情况下,该目录是为Beremiz_service服务的当前运行实例创建的临时文件夹。
通常,在使用操作系统打开目标设备后,此脚本会自动运行。
连接到目标设备并传输可执行文件
启动Beremiz开发环境的服务器端脚本后,可以连接到目标设备。 在项目设置面板中,指定目标设备的URI:
PYRO:// <IP地址>:<端口号>
图166显示了目标设备LOCAL的URI地址://,这是本地计算机上的软PLC地址,红色的“连接到目标PLC"按钮(请参阅表2)用于连接目标设备。
图166- 连接到目标设备
如果连接成功,调试控制台将显示相应的消息,并显示应用程序状态。
图167- 连接到目标设备后的调试控制台
应用程序状态可以如下:
- "PLC空"-没有应用程序;
- "PLC已启动"-目标设备上有一个应用程序,它会运行;
- "PLC已停止"-目标设备上的应用程序已启动,但已停止。
使用按钮在目标设备上传输,启动和停止应用程序(请参见表2),可以传输,启动和停止应用程序的可执行文件。 相应的消息将显示在调试控制台中(在传输,启动和停止应用程序之后), 如图168所示:
图168- 应用程序传输,启动和停止后的调试控制台
调试应用程序
与目标设备建立连接并启动应用程序以执行后,Beremiz开发环境使您可以监视和更改组成项目的可变程序模块的值。
在应用程序中保留变量
SoftPLC实现对在应用程序中定义了剩磁属性(保留变量)的变量的支持。 连接到Beremiz开发环境的服务器端时,将创建一个临时文件夹以存储加载到SoftPLC的应用程序,保留变量以二进制文件的形式存储在该临时文件夹中,该二进制文件包含项目的哈希值,以二进制格式保留变量的值以及一个控件。使用CRC32算法计算的文件数量。
启动调试器
将编译后的程序转移到SoftPLC后,单击“运行PLC"按钮开始调试(请参见表2)。 变量取其初始值,然后开始在PLC中执行程序。 调试器正在运行。
调试文本语言
使用调试器意味着使用加载到PLC中的程序实例。 功能块,函数和变量也只有在启动程序执行后才能使用它们自己的实例进行调试。 开发环境主窗口的左下角是一个项目实例面板。 地址栏包含资源的地址,该资源中定义的程序,全局变量和功能块的实例显示在下面。
图169- 项目实例面板
通过“父实例"按钮执行到父实例及其全局变量的转换(请参见表11)。
面板顶部地址栏对面的“调试实例"按钮(参见表11)将开始对所选资源(程序或功能块)进行调试。 为了启用块或变量实例的调试,请在面板中单击该元素对面的按钮。 调试面板显示添加的变量的当前值。
图170- 调试器面板
在调试面板上显示变量后,为了设置值,请单击“强制值"按钮。
图 171-在调试面板中强制变量
在出现的对话框中,输入变量的值(请参见图172 )。 对于对话框中的布尔变量,有一个“切换值"按钮,该按钮将变量的值更改为相反的值。 更改变量的值后,变量表及其“调试器"选项卡中的值将以蓝色突出显示。
图172- 值设置对话框
强制使用变量的值,可以设置一个不可变的值,该值将无法通过执行的程序进行重新定义。 设置该值后,可以将其释放,从而允许程序更改变量的值。 要释放变量,请单击“自由值"按钮。
图 173-释放变量的值
调试图形语言
在应用程序的调试过程中,其中部分程序模块是用图形语言编写的,可以在图表上看到所有值的更改,并直接在其上进行必要的更改。 如前所述,如果您按一种图形语言编写的程序的实例按调试模式的开始按钮( 图175中红色突出显示),则将打开带有调试模式的图表面板的选项卡。
图175- 项目实例面板
这些选项卡完全重复其中编辑程序或功能块的图形图的那些选项卡,除了无法在调试器的选项卡中进行任何更改外,并且元素之间的链接根据通过此链接传输的变量的值以不同的颜色突出显示。
图176- 调试后的FBD图表示例
未用颜色突出显示的行表示布尔值False或非布尔类型的变量(INT,DINT,WORD,REAL,TIME等)。 传达常数表达式的橙色连接。 传输布尔True值的关系以浅绿色突出显示。 以浅蓝色和深蓝色突出显示的链接将传输由用户直接设置的值,“真"对应于浅蓝色,“假"对应于深蓝色。
调试FBD图表
在FBD图表的调试模式下,可以为功能块设置变量的输入和输出值(使用通过右键单击连接而调用的弹出菜单),以及通常在图表元素的输入和输出处查看所有其他值。
图177- 调试FBD图表
调试模式下更改的值以蓝色突出显示。 从弹出菜单中选择“释放值"后,该值将返回由于本节中模块的逻辑和算法而获得的值,并且图中的连接变为原始颜色。
调试LD图表
调试LD图表类似于调试FBD图表。 要调用弹出菜单(请参见图196),您可以在其中设置触点或线圈的所需值,您需要按鼠标右键。
图178- 调试LD图的示例
将出现一个对话框(请参见图179 ),您需要在其中输入BOOL类型的值:TRUE-接触"ON",FALSE-接触"OFF"。
图179- 触点状态切换对话框
调试SFC图表
调试SFC图表类似于调试FBD和LD图表。 使用弹出菜单(请参见图180 ),可以设置步骤和过渡的活动。
图180- 调试SFC图表的示例
图181显示了如何设置值(选择“强制值"后,将出现一个对话框),对于"ResetCounter"步骤为TRUE。
图 181-"ResetCounter"步骤的状态更改
在使用调试模式将步长值设置为TRUE之后,该步长将以蓝色突出显示。 从图182中可以看到,因为 ResetCounter步骤变为活动状态,与其相关联的操作块也变为活动状态(以绿色突出显示),并且其中的操作处于这种状态,在这种情况下,为Cnt变量分配ResetCounterValue配置变量的值,向Out变量分配值Cnt变量:
Cnt:= ResetCounterValue;
输出:= Cnt;
开始被执行。
图182- 强制执行动作块
由于此动作的限定符为N,因此只要该步骤处于活动状态,它将被执行。
变量值变化图
Beremiz开发环境还允许您在调试模式下以图形形式显示变量值的变化。 要显示带有图形的面板,请双击项目实例面板中变量对面的“调试实例"按钮。
变量变化图的出现面板允许您跟踪特定变量的值随时间变化的方式。
图183- 变量变化图
在此面板上,您可以设置图表的更新间隔和显示比例,以及移动图表的位置。
猜你喜欢
- 2024-11-27 「重磅」Xilinx下载文件破解及LUT在线可编程研究
- 2024-11-27 2020年4月Redis面试题和答案整理
- 2024-11-27 分析Redis key,value的size
- 2024-11-27 面试官:说说 Redis 的缓存雪崩、缓存穿透和缓存击穿问题
- 2024-11-27 Redis内存管理:配置与版本事项
- 2024-11-27 Kubernetes全栈架构师(Docker基础)--学习笔记
- 2024-11-27 串口通讯继电器-modbus通信上位机调试软件工具项目开发案例
- 2024-11-27 GCKontrol模型的自动创建
- 2024-11-27 推荐:工业数字化系统开发用到的串口调试小助手
- 2024-11-27 读完这46道Redis面试题之后,你就会觉得自己的Redis白学了
- 11-27echarts图形报表的入门案例
- 11-27Echarts仿电梯运行图
- 11-27微信小程序开发之wepy 引入echarts统计图方法 亲测可用
- 11-27yarn安装echarts教程
- 11-27微信小程序使用 ECharts
- 11-274、echarts 如何画图?(必会)
- 11-27JavaScript 前端数据可视化——ECharts.js
- 11-27vue+echarts使用
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)