蓝色港湾 发表于 2023-4-12 22:54:16

CODESYS开发教程3-IO控制


今天继续我们的小白教程,老鸟就不要在这浪费时间了。

前面一期我们以合信的控制器为例,讲了如何实现控制器设备的安装和相关模块的添加。这一期我们以合信的控制器为例,主要讲如何与实际设备没有连接,并展示一下具有IO控制功能的程序开发,让大家对控制器的使用有一个实际的感受。

一、IO模块控制编程

下面我们用这个控制器来做一个跑马灯的程序,主要是为了方便演示。在实际控制设备的过程中,实现的流程和功能跟这个程序其实差别不大。

与第一期类似,首先需要通过在“Application”上点右键选择“添加对象”添加必要的模块,即任务配置和POU,POU的名字仍然用main,类型还是选择程序。然后在“任务配置àTask”中添加对main程序的调用,添加后如下图所示:



首先定义几个BOOL量的数组,用来代表IO模块的输入输出。其中IN作为跑马灯程序的启动键,IN作为跑马灯程序的停止键,IN表示跑马灯的定时周期为1秒,IN表示跑马灯的定时周期为0.2秒。启动信号给出后对OUT定时依次进行置位和复位。停止信号给出后程序停止运行。

程序如下:

PROGRAM main //变量声明部分

VAR

       IN         : ARRAY OF BOOL;

       OUT       : ARRAY OF BOOL;

       i             : INT :=0;

       j             : INT;

       delay      : INT;

       k            : INT;

END_VAR

//以下为程序部分

IF IN OR (NOT IN) THEN //停止

       i := 0;

       k := 0;

       FOR j:=0 TO 15 DO

            OUT:=FALSE;

       END_FOR

       RETURN;

END_IF

IF IN THEN

       delay := 1000; //定时时间1000ms

END_IF

IF IN THEN

       delay := 200; //定时时间200ms

END_IF

IF IN THEN //开始执行

       IF k = delay / 20 THEN //定时时间到

            OUT := FALSE;

            i := i + 1;

            IF i > 15 THEN //回到0

                     i := 0;

            END_IF

            k := 0;

       END_IF

       OUT := TRUE;

       k := k+1;

END_IF

二、IO模块配置

功能实现后,需要将内部代表IO操作的变量跟IO模块设备的端口对应起来,以保证程序中能够读到输入模块DIT_16_16DI对应端口的信号,并将输出信号送到输出模块DQR_16_16DQ对应的端口。

双击设备树中的输入模块DIT_16_16DI,在打开的窗口中选择“Internal I/O映射”,然后在右边窗口中选择Bit0对应的变量,双击下图椭圆红框中的空白处会出现“…”,点击这个省略号会弹出下图窗口。在该窗口中选择“ApplicationàmainàIN”,即前面在main程序中定义的代表输入的BOOL数组。



完成后还需要在其后增加“”,表示数组的第0个BOOL量对应输入模块的第0位输入。其余的输入按照同样的方式一一对应,输入信号对应完成后如下图所示:



同样的方式可以把BOOL数组OUT对应到输出模块DQR_16_16DQ的相应端口上。

这样就完成了main程序中的IO变量与设备实际端口的对应连接。当输入端口的信号变化时,可以从IN读取。当需要改变输出时,只需要向OUT对应的位置写入状态即可。程序内更新的周期与调用main程序的任务周期一样,这里设置是20ms。

三、控制器配置及连接

1.检查网关

首先在系统托盘处确认CODESYS的网关是否已经运行,这个是CODESYS开发环境连接控制器的接口。在装CODESYS的时候该模块是默认安装的,但初始状态可能没有运行,这时候需要通过“Start Gateway”启动网关。



2.通信设置

需要将连接控制器的电脑的IP地址设置为与控制器在同一个网段。C35的IP地址段为192.168.0.x,则电脑的IP需要设置为192.168.0.x。

注意:不要把电脑的IP地址设置为和控制器IP地址一模一样,不然可能连不上。

设置完成后在设备树的控制器CTH3_C35_002S2上双击,可以打开控制器设置页面。在页面的“通讯设置à扫描网络”。如果搜索成功,则在Gateway-1下面会有对应的控制器。选中搜索到的设备并点击“设置活动路径”按钮,该操作会激活通讯设置,实现了编程环境与控制器的连接。



三、运行

1.仿真运行

本来是要直接连控制器的,哪知道不凑巧都出光了,现在手头没有,我也很无奈啊☹。咱们先弄个仿真运行测试一下程序。

首先按F11编译程序,在确认没有错误的情况下登录控制器(菜单栏“在线à登录到”),然后按F5启动程序。由于仿真模式下没有输入信号,我们可以打开输入模块DIT_16_16DI,在,点击IN的“预备值”一栏,当其值变为“TRUE”时,按F7强制修改,这样模拟输入的程序开始信号。



按F7设置后,IN的当前值会变为TRUE,这时跑马灯程序开始运行。打开输出模块DQR_16_16DQ,可以看到OUT对应的输出的“当前值”会循环变为TRUE。



当然,也可以在main程序的变量定义区看变量OUT的状态,因为OUT和输出模块是直接关联的。

用以上同样的方式可以改变IN和IN的状态来改变跑马灯的速度。然后通过IN来停止跑马灯的运行。这里需要注意的是,由于输入变量没有做互锁,所以出现矛盾状态时,以程序中实际检查到的状态为准运行。比如开始IN和停止IN同时置为TRUE时,由于程序开头是先检查IN状态再检查IN状态,而IF在条件判断中使用OR,当第一个条件为真时,后续的条件会忽略,所以程序会停止运行,并清除输出状态。

通常情况下,对于输入信号互斥的情况,需要考虑互锁,避免程序出现非正常的状态。

2.连接控制器运行

这部分先欠着,以后有控制器了再补~~~^o^。

四、结论

很遗憾写这个的时候手头没有控制器,所以做了一个仿真运行。在程序比较简单的时候,仿真运行能够很快帮你实现程序的流程和功能调试。由于没有输入信号,模拟的时候难免会与实际情况不符。当然,连接实际设备也有风险,万一逻辑错了设备可能会乱跑。

有没有发现,其实通过上面的流程一步一步的来,CODESYS也没有你想像中的那么难学吧^-^~~~总的来说,编程开发是个实践性很强的活动,先不要想太多,让程序能正常的跑起来,然后再去研究为什么,学习起来应该会容易很多!
————————————————
版权声明:本文为CSDN博主「--莫名--」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/halps/article/details/128275739
页: [1]
查看完整版本: CODESYS开发教程3-IO控制