CODESYS Development System > 您的第一个CODESYS程序 |
数据安全:为了最大程度地降低数据安全漏洞的风险,我们建议采取以下组织措施和技术措施:
安装CODESYS
安装包括开发系统和CODESYS网关和CODESYS Control Win V3,它们的服务可以在Windows任务栏中访问。为了在计算机上模拟控制器,这三个程序是必需的。 |
在本教程中,您将编写一个简单的冰箱控制器。已经完成的工程RefrigeratorControl.project_archive可以在 CODESYS的工程目录中找到安装目录。除了您将在这里逐步创建的示例工程之外,完成的工程还包含一个完整的可视化操作和诊断。
工程:
冷却控制在应用程序的主程序中。信号管理在另一个POU中进行控制。在Standard库中提供了所需的标准功能块。 由于在这个示例工程中没有物理温度传感器和物理执行器连接,您还将编写一个程序来模拟温度的升高和降低。 这将允许您在联机模式下监视冰箱控制器的操作。
所有POU使用的变量都需要在全局变量列表中定义。
1. | 单击文件 ➔ 新工程。 | ||
2. | 在模板视图中,选择标准工程模板。 | ||
3. | 指定工程的名称和存储位置并且单击确定。
| ||
4. | 在设备列表框中,选择CODESYS Control Win V3。 | ||
5. | 在PLC_PRG列表框中,选择连续功能图 (CFC)并且单击确定。
|
在框架窗口的左侧,在设备视图中,您将会看到设备树的(设备视图)。之前选择的PLC设备以默认名称设备显示。
对于将要编程的应用程序的Application对象,已经存在于 PLC Logic对象下。
Application 已经包含主程序PLC_PRG和 库管理器对象。
库管理器已经包含库IoStandard和Standard。库IoStandard是I/O配置所必须的。库Standard包含IEC61131-3标准描述的所有函数和功能块。
任务配置对象位于具有MainTask的设备树的底部,该对象控制PLC_PRG的处理。例如,可以稍后将可视化对象插入任务配置下面。
除了库IoStandard和Standard之外,您还需要这个示例项目的库Util:
首先,声明要在整个应用程序中使用的变量。为此,请在应用下面创建全局变量列表:
1. | 选择Application然后在右键菜单中单击添加对象 ➔ 全局变量列表。将默认名称GVL更改为Glob_Var并且单击添加进行确认。
| ||
2. | 当文本视图打开时,它已经包含关键字VAR_GLOBAL和END_VAR。对于我们的示例,在编辑器的右侧栏中单击以激活表格视图。
| ||
3. | 在右键菜单中,单击插入。
| ||
4. | 在名称字段中指定rTempActual。 | ||
5. | 双击数据类型栏的字段。
| ||
6. | 单击并选择输入助手。
| ||
7. | 选择数据类型REAL并单击确定。 | ||
8. | 在初始化栏中输入一个数值(例如:8.0)。 |
以相同的方式声明以下变量:
名称 | 数据类型 | 初始化 | 注释 |
---|---|---|---|
rTempActual | REAL | 1.0 | 实际温度 |
rTempSet | REAL | 8.0 | 设定温度 |
xDoorOpen | BOOL | FALSE | 门的状态 |
timAlarmThreshold | TIME | T#30S | 压缩机运行后的一段时间内,信号声响起。 |
timDoorOpenThreshold | TIME | T#10S | 打开门一段时间后,信号声响起。 |
xCompressor | BOOL | FALSE | 控制信号 |
xSignal | BOOL | FALSE | 控制信号 |
xLamp | BOOL | FALSE | 状态消息 |
现在,您将在默认情况下创建的主POUPLC_PRG中描述应用程序的主要功能。当实际温度高于设定温度加上滞后时,压缩机被激活并冷却。当实际温度低于设定温度减去滞后时,压缩机关闭。
若要用CFC实现语言描述此功能,请执行以下步骤:
1. | 在设备树中双击PLC_PRG。
| ||
2. | 在工具箱视图中,选择输入元素并将其拖动到CFC编辑器中的某个点。
| ||
3. | 在CFC编辑器中,单击???输入。然后单击以打开输入帮助。在变量类别中,在应用 ➔ Glob_Var下选择变量rTempActual。这就是在此处如何引用全局变量rTempActual。
| ||
4. | 与第3步中一样,使用全局变量Glob_Var.rTempSet的名称创建另一个输入。 | ||
5. | 创建另一个输入,然后单击???并将其替换为名称rHysteresis。
| ||
6. | 在声明变量对话框中,将数据类型指定为REAL且初始值为1。单击确定。
| ||
7. | 在工具箱视图中,选择框元素并将其拖动到CFC编辑器中的某个点。
| ||
8. | 将???替换为ADD。
| ||
9. | 将Glob_Var.rTempSet输入连接到ADD POU。为此,请单击输入的输出引脚并将其拖动到ADDPOU的上方输入引脚。 | ||
10. | 以相同的方式,将输入rHysteresis连接到ADDPOU的下部输入。
| ||
11. | 若要在编辑器中移动元素,请单击元素中的空白区域或单击框架,以便选中该元素(红色边框、红色高亮)。 将元素拖动到所需位置。 | ||
12. | 在ADDPOU的右侧创建另一个POU。其目的是将Glob_Var.rTempActual与Glob_Var.rTempSet 和rHysteresis之和进行比较。将GT函数(大于)分配给POU。
| ||
13. | 将输入Glob_Var.rTempActual连接到GTPOU的上部输入。 | ||
14. | 将输出Glob_Var.rTempActual连接到GTPOU的下部输入。 | ||
15. | 现在,在GT POU的右侧创建一个功能块,根据输入条件(设置–重置)启动和停止冷却压缩机。在???字段中指定名称SR。按Enter键关闭POU(SR_0)上方的打开的输入字段。
| ||
16. | 用名称SR_0和数据类型SR声明变量。 单击确定。
| ||
17. | 将GTPOU右侧的输出引脚连接到SR_0POU的SET1输入端。
| ||
18. | 创建一个Output元素,并将其分配给全局变量Glob_Var.xCompressor。在Glob_Var.xCompressor和SR的输出引脚Q1之间拖动一条连接线。 |
现在指定压缩器应再次关闭的条件(在这种情况下,SR POU的RESET输入将获得TRUE信号)。为此,请制定与上述相反的条件。使用SUB(减)和LT(小于)POUs来执行此操作。
结果如下CFC图表:
在另一个POU中,您现在将实现警报蜂鸣器以及开关灯的信号管理。梯形图(LD)实现语言适用于此。
在各自的网络中处理以下每个信号:
1. | 在设备树中Application下面,使用Ladder Diagram (LD)实现语言创建Program类型的POU对象。 为程序指定名称Signals。
| ||
2. | 在网络中创建一个程序,以便在压缩机运行时间过长而未达到温度设定点时发出声音信号。为此,插入一个TON计时器POU。仅在指定时间后,它将布尔信号切换为TRUE。在ToolBox视图的功能块下选择一个 TON,然后将其拖动到空网格和出现的从此处开始框。 当字段变为绿色时,释放鼠标按钮。
| ||
3. | 按[ Enter ] 键。
| ||
4. | 单击确定确认对话框。 | ||
5. | 现在您可以编程,以便在冷却压缩机开始运行时激活功能块。 为此,请在POUGlob_Var.xCompressor的上部输入处命名关联。您已经在GVLGlob_Var中声明了此布尔变量。
| ||
6. | 插入要激活的信号。为此,将一个线圈从梯形图元素工具箱类别拖到TONPOU的输出Q上。指定线圈的名称Glob_Var.xSignal。 | ||
7. | 定义从POUTON_0激活到信号发出的时间段。此定义通过变量Glob_Var.timAlarmThreshold进行,为此,您可以在TON_0的输入PT插入该变量。 要执行此操作,请单击输入引脚右侧的细边框并输入变量名。 | ||
8. | 选择POUTON并且单击删除上下文菜单中未使用的FB调用参数。
| ||
9. | 在LD的第二个网络中,当门开得太长时,程序使信号间歇地发出声音。 在编辑器窗口中,单击第一个网络下面。在上下文菜单中,单击插入网络。
| ||
10. | 与第一个网络一样,实现一个POUTON用于信号的定时激活。这次是由输入IN上的全局变量Glob_Var.xDoorOpen触发的。在输入PT处,添加全局变量Glob_Var.timDoorOpenThreshold。 | ||
11. | 此外,从库Util,在该网络中POUTON的输出Q处添加一个POU BLINK并将其实例化为Blink_0。 | ||
12. | POUBLINK_0为信号发送Q以及Glob_Var.xSignal提供时钟。 首先,将两个Contact元素从工具箱视图拖动到POU的OUT输出。在输出Q之后直接将变量TON_1.Q分配给该触点,并将全局变量Glob_Var.xDoorOpen分配给第二个触点。 | ||
13. | 在两个触点之后插入一个线圈元素,并为其分配全局变量Glob_Var.xSignal。 | ||
14. | 为此,声明局部变量timSignalTime : TIME := T#1S;并在输入TIMELOW以及TIMEHIGH处插入此变量。对于TRUE,循环时间为1秒;对于FALSE,循环时间也为1秒。 | ||
15. | 选择POUTON并且单击删除上下文菜单中未使用的FB调用参数。
| ||
16. | 在LD的第三个网络中,编程使得只要门是打开的灯就亮起来。 为此,插入另一个网络。在左侧的网络中,插入一个触点GlobVar.xDoorOpen,它直接指向插入的线圈Glob_Var.xLamp。 | ||
17. | CODESYS对LD的网络进行连续处理。现在,在网络1的末尾安装一个跳转到网络3,以确保只执行网络1或网络2: 通过单击网络或具有网络编号的字段来选择网络3。在右键菜单中,单击插入标签。用DoorIsOpen:替换网络左上角的文本Label: 选择网络1。在工具箱视图的公用类别中,将跳转元素拖到网络中。将其放置在显示的添加输出或跳转到此处框中。
| ||
18. | 选择???并且单击。从可能的标签标识符中选择DoorIsOpen,然后单击确定进行确认。
|
LD程序现在如下所示:
由于该示例工程中的应用程序未链接到物理传感器和执行器,因此您还需要编写一个用于模拟温度升高和降低的程序。这将允许您在联机模式下监视冰箱控制器的操作。
您可以使用结构化文本创建模拟程序。
程序将升高温度,直到主程序PLC_PRG确定已超过设定温度。然后程序启动冷却压缩机。然后,模拟程序降低温度,直到主程序再次停用压缩机。
1. | 在应用程序下面,在ST实现语言中插入一个POU类型的程序。指定仿真的名称。 |
2. | 在ST编辑器中实现以下代码:
PROGRAM Simulation
VAR
TON_1: TON; //当压缩机被激活时,温度会延时下降
P_Cooling: IME:=T#500MS;
xReduceTemp: BOOL; //降温信号
TON_2: TON; //当压缩机启动时,温度会随着时间延迟而升高
P_Environment: TIME:=T#2S; //关门的延迟时间
P_EnvironmentDoorOpen: TIME:=T#1S; //开门延时时间
xRaiseTemp: BOOL; //温度升高信号
timTemp: TIME; //延迟时间
iCounter: INT;
END_VAR
iCounter := iCounter + 1; // 没有功能,仅用于演示目的。
// 在压缩机因温度过高而启动后,温度降低。
// 延迟P_Cooling后,每个周期温度降低0.1°C
IF Glob_VAR.xCompressor THEN
TON_1(IN:= Glob_Var.xCompressor, PT:= P_Cooling, Q=>xReduceTemp);
IF xReduceTemp THEN
Glob_Var.rTempActual := Glob_Var.rTempActual-0.1;
TON_1(IN:=FALSE);
END_IF
END_IF
//如果门是开着的,升温会更快;SEL 选择 P_EnvironmentDoorOpen
timTemp:=SEL(Glob_Var.xDoorOpen, P_Environment, P_EnvironmentDoorOpen);
//如果压缩机未运行,则冷却室会变热。
//延迟tTemp后,每个周期温度升高0.1°C
TON_2(IN:= TRUE, PT:= timTemp, Q=>xRaiseTemp);
IF xRaiseTemp THEN
Glob_Var.rTempActual := Glob_Var.rTempActual + 0.1;
TON_2(IN:=FALSE);
END_IF |
我们建议您使用可视化来方便操作和监视整个控制程序。 使用CODESYS创建的可视化将安装在本教程的完整示例工程中,该工程随标准CODESYS Visualization可视化安装(工程目录提供。您可以将该工程下载到控制器,然后启动它以查看它与可视化文件一起工作。启动时,Live_Visu以冰箱的表示形式开始,该表示形式无需输入任何数据即可复制模拟程序的操作。但是,可以通过单击开/关来打开和关闭门。 可以通过旋转控制的指针调整默认温度。 在本教程中,我们将不介绍可视化的创建。在CODESYS Visualization可视化帮助中计划了相应的教程。 |
当您输入代码时,CODESYS会立即通过在相关文本下面的红色波浪下划线提醒您出现语法错误。 按[ F11 ] 检查整个应用程序的语法。检查结果显示在消息视图中。如有必要,请单击视图 ➔ 消息以打开消息视图。然后您可以选择一条消息并按[ F4 ] 键跳到代码中的相应点。
之后,仅将无错误应用程序下载到控制器。
出于安全原因,在任何情况下都不应从因特网或不受信任的网络访问控制器! 特别是,TCP/IP编程端口(通常为 UDP-Ports 1740..1743和TCP-Ports 1217 + 11740或控制器特定的端口)不应在没有保护的情况下从因特网访问。如果需要因特网访问控制器,使用一个安全的机制是绝对必要的,如VPN和密码保护的控制器. 参见: 设备用户管理的处理 |
启动网关服务器:
程序GatewaySysTray作为CODESYS的标准安装。 您可以通过此程序与网关服务器通信。 当系统启动时,网关服务器作为服务自动启动。 检查Windows任务栏是否包含程序图标。 当网关服务器未运行时,图标如下:。在这种情况下,可以单击图标打开网关菜单,然后单击启动网关。
启动PLC:
程序CODESYSControlSysTray默认与CODESYS一起安装。您可以通过此程序与CODESYS控制服务通信。在CODESYSV3.5sp2及更高版本中,控制服务在启动系统时不再自动启动。这是为了防止未经授权的访问。 按如下方式启动PLC: 在Windows任务栏中,单击打开PLC菜单。 然后单击Start PLC。如果PLC正在运行,则图标变为。启动时出现的对话框表明启动的PLC允许编程访问。请注意上面的安全提示。
如果这是您与CODESYS V3的第一个通信配置,那么现在需要定义本地网关服务器。 如果已经定义了网关服务器,则它将显示在通讯设置选项卡上。 在这种情况下,您现在可以继续“ 定义通信通道”。 |
网关服务器随CODESYS安装一起提供。
在以下部分中,您可以查看各个POUs中变量值的“监视”,并且只能一次从 CODESYS在控制器上设置特定的变量值。
您可以在POU编辑器的联机视图或监视列表中看到应用程序变量的实际值。 在这里的示例中,我们将重点关注POU编辑器中的监视。
要求:应用程序正在控制器上运行。
1. | 在设备树中,双击对象PLC_PRG,Signals,Simulation,和Glob_Var 以打开编辑器的在线视图。 |
2. | 观察变量值在不同POU中的变化。 例如,您可以在GVLGlob_Var中看到由于仿真程序的处理,rTempActual和xCompressor的值是如何变化的。 |
控制器上变量值的一次性设置:
1. | 在GVLGlob_Var的在线视图中设置焦点。 | ||
2. | 若要设置新的指定值,请双击表达式rTempSet旁边的Prepared Value列(2)。
| ||
3. | 指定值9并退出输入字段。 | ||
4. | 若要指定打开的门,请在表达式xDoorOpen旁边的准备值字段中单击一次。指定值为TRUE。再单击三次,可以在TRUE, FALSE, 和空白之间切换准备值。 | ||
5. | 要将准备值TRUE仅一次写入变量,请按[ Ctrl ] +[ F7 ] 。
|
调试:为了排除故障,您需要检查代码中某些点的变量值。 您可以为执行定义断点,并启动语句的逐步执行。
要求:该应用程序已下载到控制器并正在运行。
1. | 双击Simulation以在编辑器中打开程序。 | ||
2. | 将光标放在代码行iCounter := iCoutner + 1; 中:然后按[ F9 ] 。
| ||
3. | 在内联监视或Simulation程序的声明部分中观察变量iCounter的值。
| ||
4. | 按[ F5 ] 重新开始处理。
| ||
5. | 按[ F8 ] 执行下一个处理步骤。
| ||
6. | 再次按[ F8 ] 执行下一个处理步骤。
| ||
7. | 要禁用断点并返回到正常处理,请将光标重新置于代码行中,然后按[ F9 ] 键。然后按[ F5 ] 键将应用程序设置为模式。 |