CODESYS V3 – 快速学习 5/6
关于错误监控和控制灯光的编程当我们编程第一个网络时,我们引入了变量Error,用来报告错误和车库门的停止。这个变量可以如下编程:
当传感器变量DriveOverload 设置为真的时候,或者开关车库门的时间超过了20 秒的时候,就会有错误发生。为了重现上述的情景,我们需要在一个新网络中插入一个OR 的操作符。这个OR 的操作符的输出端设置为变量Error。可以通过鼠标单击输出端,并且点击工具条中的“Set /Reset’”按钮,直到一个S 出现在输出管脚上。这样的话,连在管脚上的变量就可以通过点击“Set / Reset”按钮来复位。
该功能块的第一个输入将分配为传感器变量DriveOverload。
为了能够检测开关门的最大时间跨度是否被超过了,我们需要一个时间监控机制。恰好我们从工具箱引入了功能块TON(Timer On Delay 延时通),并且将它初始化命名为Monitor。
一个布尔为“真”的量连接到该模块的输入端,在过了一定预置时间(PT)后,布尔量“真”就被写入到 Q 输出端。但是,如果在预置的时间段之内,输入端 IN 转换到“假”,那么输出仍旧保持“假”。
一旦我们的车库门开始移动,例如开或者关(执行变量DoorUp /DoorDown 代表这两个动作 ),TON功能块就开始工作。在正常的操作中,两个传感器变量DoorOpen或者DoorClosed中的一个将在10-20 秒内结束门的运动。执行部件变量设成“假”,定时器模块的输出也保持“假”,没有错误报告。如果整个流程占用的时间超过了20 秒,TON 模块的输出Q 就会变为“真”,并且报错。TON 功能块的第二个输出ET(消逝时间),是用来报告从定时器开始工作所消逝的时间。由于在我们的实例中,我们不需要这个输出,我们可以通过鼠标左键单击输出管脚选中,按Del 键将这个管脚删除即可。既然时间监控机制应用于两个执行部件变量,我们将在这两个执行部件变量和TON 功能块中间插入一个OR 操作符。
输入预设的时间量的时候,必须按照IEC 61131- 3 的格式:“T#”需要作为时间规范的前缀。用户可以通过按控制按钮Actuation 来复位错误。为了实现我们的应用,我们必须创建一个新网络。一种方式是从工具箱的的常规菜单来拖出实现,另一种是在最后一个网络左边的内容菜单,点击右键,选择“插入网络(下方)”。一旦我们创建了新网络,我们现在就能输入一个新任务到这个网络里。有三种方式来输入这个新任务:从工具箱的常规菜单中拖出,鼠标右键打开智能选择菜单,或者使用快捷键“Ctrl+A”。
变量Actuation 写到任务的输入端,它的值分配给变量Error。但是在这个案例中,变量Error必须可以重置,所以我们必须在输出端设置“Reset”R (从工具条中拖出,或者使用鼠标右键,或者使用组合键 “Ctrl+M”)。应用程序的最后一个网络是负责开灯的。如同以上所写,当车库门打开或者关闭的同时,车库门的灯会自动打开,持续一段时间后关闭,比如10 秒钟。这就意味着,我们需要另外一个定时功能块。因为我们在一定的时间段之后,我们需要关闭布尔信号,因此我们需要功能块TOF(Timer Off Delay 延时断)。把TOF 功能块拖入网络后,我们必须把该功能块实例化,命名为“T1”。在我们的例子当中,ET 管脚仍然没有用,可以直接删除了。在TOF 功能块的输出端赋值变量lighting,将上述的时延10s 按照IEC 61131- 3 的格式填写到输入端PT。输入端IN 可插入OR 运算符,可以通过工具箱拖拽,也可用鼠标右键选取,也可使用组合键“Ctrl+B”。执行部件变量DoorUp 和DoorDown 直接与OR 运算符的两个输入端相连。第二个输出端ET 代表已经消逝的时间,在本例子当中没有什么作用,可以鼠标单击选中,直接按Del 键把这个管脚删除。我们现在也完成了车库门驱动无故障操作的灯光控制。
为了能在同样的网络里实现我们的错误情景,我们必须在变量Lighting之前放置OR操作符。这个 OR 操作符使得为现存网络增加一个新线程的可能性,这个网络主要负责错误发生的处理。另外一个线程仅在无故障操作的时候需要。所以,我们现在需要在 OR 操作符的每一个输入端连接一个 AND 操作符。第一个 AND 可以插入到现存的现场中,正常的操作下,控制灯光之前。第二个 AND 的输入分配给一个取反的变量 Error。结果就是,如果没有错误发生,整个线程将仅仅影响输出灯光控制。
在我们的负责错误的步骤中的 AND 操作符的第二个输入也分配给变量 Error,但是这次不用取反符号。结果是,如果错误确实发生,整个过程将仅仅输出灯光控制。在负责错误的线程中的 AND 操作符的第一个输入需要灯光闪烁,所以我们串接了两个 TON 功能块。左边TON 功能块的输出连接着右边 TON 功能块的输入,右边功能块的输出依次连接着我们的AND 操作符的第一个输入。两个 TON 的预定时为 1s,ET 管脚删除。当然,我们必须实例化两个模块为 T2 和 T3。左 边 TON 的输入管脚 IN 是右边 TON 的输出管脚的值。要实现这种方法,可以在左边的第一个输入管脚处输入右边 TON 功能块的实例名 T3.,CODESYS就知道了我们现在想使用功能块 TON 数据结构中的一个变量,智能输入窗口就会列出 T3 所有的变量供我们选择。
在正常工作或者错误操作下的,控制灯管的网络已经完成。这也意味着我们成功的编写了我们的应用程序。
CODESYS V3 – 快速学习 6/6
测试应用程序
现在我们完成了整个车库门应用程序的编写,我们需要做些测试来确保每个功能都是正确的。但是我们没有一个真正的带有车库门驱动以及所有传感器和执行部件,我们只能人工仿真这个应用程序。CODESYS 提供了一整套完善的、综合的调试功能来帮助我们测试应用程序。
首先,我们登录控制器,下载应用程序。这个过程中,CODESYS 使用集成的编译器,将图形 FBD 代码翻译成真正的机器代码,这些可以运行在多种不同的 CPU 和操作系统之上。而示例中运行在 PC 上的软 PLC 是我们在编程之前就在工程配置当中配置好的(参见单元2 中工程配置)。当然,我们可以将我们的应用程序运行在任何可以使用 CODESYS 编程的设备和控制器上。我们可以从菜单“在线”选取命令“登录应用程序 [名称] ”。CODESYS开始检查应用程序是否已经运行在目标设备(软 PLC)上了;如果没有应用程序在运行,那么会跳出一个对话框,“设备上没有应用程序,你想创建并且下载应用程序吗?”如果你确认了这个对话框,CODESYS 就编译这个应用程序并且下载到目标设备上。在编程窗口的底部的左手边进度条会显示程序代码的编译下载状态。
• 我们创建的应用程序的 FBD 编辑器的代码部分从编辑模式变为了在线模式,所有变量的当前值都会显示出来。
• 所有编辑器的变量声明部分都变为了在线模式。现在我们不能再编辑变量声明部分,但是所有的变量值都可以显示,也可以被改变(这种功能可以用来测试我们的应用程序 )。
• 在左手边的设备树当中,被编程的设备前边出现一个绿色的符号,而在我们的例子中,显示为“Device (CODESYS SP WinV3)”,显示对设备的连接已经建立。整个字段变为绿色的高亮显示。
• 设备下面的已经下载成功的应用程序也是绿色高亮显示。“应用”字样后边的[停止]显示应用程序还没有开始启动。• 整个开发环境的底部的状态条中红色 “STOP”也是显示应用程序没有启动,同时显示“程序下载”。
如同上面显示,建立一个连接仍旧不行,还需要检查通信设置,工程配置的最后提到了如何进行配置。如果我们在应用程序代码中有一些语法错误,以至于不能编译通过时,CODESYS将发布以下消息“存在编译错误,你打算不下载此程序就直接登录吗?”通过点击“否”按钮来关闭消息窗口。我们试着来纠正这些错误。CODESYS检测到的所有的错误和这些错误的位置都会列表在消息窗口当中(通常在我们屏幕的最低位置)。现在最好按照错误列表的提示一步一步地去浏览错误。如果我们按“F4”键,CODESYS 就从错误消息跳到应用程序代码中出错的地方。
我们可以把所有发生的错误代码检查一遍并且校正过来。例如典型的错误,FBD 功能块的输入管脚仍然开放着,没有赋给输入值。一旦我们已经纠正了这个检测到的错误,我们则可以通过按 F4 键跳到下一个有错误的地方。纠正了检测到的错误之后,再按 F11 键来重新测试应用程序。这样,应用程序就已经编译好了,但是本地代码并没有下载到控制器当中。如果没有其它错误被发现的话,消息窗口将出现以下信息:
“编译完成 – 0 个错误,0 个警告”。
通过点击菜单栏“在线”中的“登录到Application”选项,或者点击工具栏中按钮来再次登入控制器。然后,按“F5”键,或者点击菜单“在线/启动Application ”。现在设备树中Application 后面的字显示为[运行],屏幕底部的状态栏中红色“停止”变为绿色“运行”。在应用程序代码中,例如在POU PLC_PRG 中,所有的布尔变量设置为假。只有最后一个网络当中的错误监控的闪烁信号每秒都从真变到假。为了能够测试应用程序的功能,我们必须在全局变量的声明表中改变全局变量:驱动、DoorOpen、DoorClosed、以及 DriveOverload 变量。这些的实现可以是在我们的变量表“仿真信号”中直接操作我们的程序。
通过点击栏目“准备值”,我们可以改变布尔变量的值。
注意:
这样依次将单一值写入到控制器中,并不是最好的方式。最好是能在一个控制循环内,同时将多个值写入到控制器当中,这样可以避免机器设备或者流程的损坏。这就是为什么:
为了将“真”值写入到 Actuation 中,必须先点击命令“在线 / 写入值”或者使用快键“Ctrl+F7”。一旦变量 Actuation 被写入值,车库门开始关闭,因为在第一次下载后,应用程序所有的变量值都被设置为“假”或者“0”(如果没有声明其它初始化的值)。
由于车库门正在关闭,DoorDown 的值被应用程序设置为“真”。我们的灯光及对应的变量为Lighting. 正如我们所愿,当车库门在运行当中,灯光就会打开。为了能够跟随可编程的每一个单步,我们现在手动复位Actuation 为“假”,然后仿真传感器变量DoorClosed 被设置为“真”(然后回到“假”)。执行部件变量 DoorDown 被程序设置为“假”,门关闭。10秒钟后,灯光自动关闭,变量Lighting 设置为“假”。通过再次按控制钮,例如,设置变量Actuation 为“真”,我们可以测试开门的整个步骤。涉及的变量就是开门所需变量DoorUp和DoorOpen。
如果我们通过仿真传感器变量DoorClosed 或者DoorOpen,一直没有对程序的开始或者结束进行操作,在程序开始后,经过预置的20 秒后,应用程序就可以辨识错误。结果就是,执行部件DoorDown 或者DoorUp 被设置为“假”,灯光开始闪烁,变量Lighting 从“真”变到“假”。再次按动控制按钮(Actuation 为真),错误被通知,灯光停止闪烁,我们已经回到了我们的初始状态。错误DrivOverload 可以通过手动设置为“真” 同时门开或者关来进行测试。车库门再次停止,错误显示灯光开始闪烁。
下载整个应用程序的 CODESYS V3 的工程文件CODESYS V3 工程文件可以使用CODESYS V3 来打开,点击菜单命令“文件/ 工程文件存档 / 解压存档”。
提示:
我们的示例程序可以在CODESYSV3.3(或者更高版本)当中执行。
对于MS Internet Explorer 的用户:
下载后请对文档重新命名:可以将文件的扩展名改回到*.projective.
对于Mozilla Firefox 的用户:
请不要在浏览器内打开文件,选择“目标另存为……”。我们准备了两个不同版本的工程文件:
1. 原始版:就是快速学习的例子中所引入的,同时您也可以从YouTube 视频网站下载。
2. 带有集成的车库仿真版本。
除了车库门控制程序的代码,这个工程中还包括了仿真模块。集成的可视化模块使它变得更容易测试。
小提示:
在可视化编程环境中,你可以通过点击轮子来移动汽车。我们认为仿真和可视化是非常基础性的,它为您的创造力留下了必要的空间。
祝您好运!
页:
[1]