CODESYS开发教程3-IO控制

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

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

一、IO模块控制编程

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

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

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

程序如下:

PROGRAM main //变量声明部分

VAR

       IN           : ARRAY[0..15] OF BOOL;

       OUT       : ARRAY[0..15] OF BOOL;

       i             : INT :=0;

       j             : INT;

       delay      : INT;

       k            : INT;

END_VAR

//以下为程序部分

IF IN[1] OR (NOT IN[0]) THEN //停止

       i := 0;

       k := 0;

       FOR j:=0 TO 15 DO

              OUT[j]:=FALSE;

       END_FOR

       RETURN;

END_IF

IF IN[2] THEN

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

END_IF

IF IN[3] THEN

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

END_IF

IF IN[0] THEN //开始执行

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

              OUT[i] := FALSE;

              i := i + 1;

              IF i > 15 THEN //回到0

                     i := 0;

              END_IF

              k := 0;

       END_IF

       OUT[i] := 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]”,表示数组的第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[0]的“预备值”一栏,当其值变为“TRUE”时,按F7强制修改,这样模拟输入的程序开始信号。

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

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

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

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

2.连接控制器运行

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

四、结论

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

有没有发现,其实通过上面的流程一步一步的来,CODESYS也没有你想像中的那么难学吧^-^~~~总的来说,编程开发是个实践性很强的活动,先不要想太多,让程序能正常的跑起来,然后再去研究为什么,学习起来应该会容易很多!

------------------

原创不易,感兴趣的多支持

  • 14
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值