CODESYS开发教程5-工程的基本组成

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

前面一期我们讲了如何配置和控制总线伺服运动。这一期本来准备介绍一下关键字和变量什么的,突然发现工程本身还有很多不清楚的地方,因此急急忙忙的写了这篇关于CODESYS工程的介绍。主要介绍一下CODESYS中一个工程的基本组成单元(以ST语言为例),让大家对一个CODESYS工程有一个基本的了解,起码看完了知道怎么去组织一个最小工程。

一、工程

工程是CODESYS项目的基本组织形式。需要注意的主要是工程相关的设置,位于菜单栏“工程”下面。

1.工程信息

可能会用到的就是当前程序兼容的CODESYS版本,在“摘要”栏,如下图红框所示。

2.工程设置

工程设置这块的内容比较多,但是大多数设置采用默认值即可。可能需要关注的选项有:

SoftMotion:选择运动控制库版本。

编译选项:选择编译器版本。下图中“允许标识符使用unicode字符”这个选项强烈建议勾上,这样就可以使用中文作为变量名,可以提高程序可读性。当然,也有不怎么方便的地方,因为关键字还是英文的,使用中文变量名需要频繁切换输入法~~~。

3.工程版本信息

这里需要关注的是当前工程使用的库版本、编译器版本以及SoftMotion版本。

二、工程的组成单元

工程的设备树下可以添加的组成单元总计有二十多种,绝大部分只能在Application下面添加。

CODESYS工程的组成单元非常多,下面是把最常用的列了一个表,没列上来的表明对于新手来说基本用不上。

单元名称

说明

必选

设备

程序运行的实体,通常为PLC或控制器

Application

应用程序

库管理器

添加或删除库文,类似C语言的包含文件

任务配置

管理在控制器上运行的所有任务

POU

添加程序块、函数、功能块等

全局变量列表

添加全局变量作用域

DUT

添加结构、枚举、联合等用户自定义类型

SoftMotion General Axis Pool

添加虚拟轴或编码器的设备树

1.设备

在“PLC逻辑”上点右键,选择“添加设备”,在弹出的串口中选择设备型号添加。

同一个工程下可以添加多个不同型号的设备,在连接对应的设备时,可以通过“工具栏”选择需要连接的控制器型号。

这些型号的类型与工程设备树下的型号是对应的。添加任意设备后,工程中会自动添加“PLC逻辑”和“SoftMotion General Axis Pool”。不同控制器会自动添加不同类型的设备单元,例如禾川控制器会添加“LocalDevice”,合信控制器会添加“Co_Trust LocalBus”。

2.Application

添加设备后,其设备树下会默认出现“PLC逻辑”和“Application”。一个“PLC逻辑”下可添加多个应用,方法是在“PLC逻辑”上点右键,选择“添加对象à应用”添加。

3.库管理器

库管理器列出了项目中使用的所有库,并提供有关库类型、版本、属性及其内容信息,如下图所示。通过红框中的“添加库”可以向工程中添加库文件。这里有一个小技巧,如果你不知道所用函数包含在哪个库文件内,可以点击“添加库”,在弹出页面中输入所用函数名称,通常排在第一的就是函数所在的库。

需要注意的是,由于不同版本的CODESYS有不同版本的库,而且中间还有几次比较大的调整。所以老版本的程序建议用对应的老版本的库,不要随意更新库文件,否则可能会出现找不到库文件报错的情况。如果是新建的工程,建议用与CODESYS版本匹配的库。遵循以上原则,能够减少很多莫名其妙的报错。

4.任务配置

任务配置在每一个“Application”中只能添加一个,但在任务配置下面可以添加多个任务(任务配置上点右键,选择“添加对象à任务”可以添加任务)。任务在CODESYS里面的功能类似于Windows编程中的多线程。

这部分内容在第一期教程里面讲过,这里就不重复了。

5.POU

POU是CODESYS项目中的项目组织单位,控制器程序的源代码需要在POU中编写。POU分为程序、功能块和函数三种类型。通过在“Application”上点右键,选择“添加对象àPOU”,在弹出的窗口中选择类型,可以将对象添加到应用程序或项目中。

程序的语言在下图的最下方红框中可以选择,这里选择是“结构化文本(ST)”。

(1)程序

程序是一个具有独立功能、可以独立执行的单元,执行后所有值都将保留,直到下一次执行。在设备树和POU视图中,程序具有后缀“PRG”。程序的编辑器由声明部分和实现部分组成。程序在其声明部分中以“Program name”开头。

(2)功能块

功能块也是一个能够实现独立功能的单元。与程序的区别在于它是作为类型来使用,需要定义并调用实例才能执行。在设备树或POU视图中,功能块POU具有(FB)后缀。功能块的输出变量和内部变量的值在执行后保持不变,直到下一次执行。这意味着对于具有相同输入变量的多个调用,函数块不必返回相同的输出值。

除了IEC 61131-3中描述的功能外,还可以使用CODESYS中的功能块实现以下面向对象编程功能:功能块的扩展、接口的实现、方法、属性。

(3)函数

函数在形式上与程序类似,但是函数没有内部状态信息,这意味着函数在下次调用之前不会保存其变量的值。具有相同输入变量值的函数调用总是提供相同的输出值。因此,函数不能使用全局变量和地址!

6.全局变量列表

全局变量列表用于声明、编辑和显示全局变量。在“Application”上点右键,选择“添加对象à全局变量列表”可以将全局变量添加到当前应用程序中。类似方式可以为整个工程添加全局变量。如果在设备树中的应用程序下插入GVL,则变量在此应用程序中有效。如果在POU视图中添加GVL,则变量对整个项目有效。

全局变量列表(GVL)的名称可以作为列表中定义的变量的名称空间标识符。这样可以在不同的全局变量列表中使用同名的变量,并且仍然可以唯一地访问特定的变量。使用方法是点(.)在变量名前加上全局变量列表的名称。

7.DUT

数据单元类型(DUT,Data Unit Type)声明用户定义的数据类型。

(1)结构(STRUCT)

结构是将具有不同数据类型的多个变量组合成的一个逻辑单元。结构中声明的变量一般称为成员。结构还有一个扩展(EXTENDS)功能,能够将现有结构扩展更多成员。现有结构的成员在新结构中自动可用。

(2)枚举

枚举用于声明将多个整数常量组合成一个逻辑单元。枚举中声明的常量也称为枚举值。

(3)别名(ALIAS)

别名用于为基类型、数据类型或函数块声明另一个名称。

(4)联合(UNION)

联合将多个数据类型基本不同的成员组合成一个逻辑单元。联合中所有成员都具有相同的偏移量,因此它们占用相同的内存。联合的内存需求由其“最大”组件的内存需求决定。

三、后记

说句心里话,学习任何东西的基础知识都是很枯燥的,写的时候我都觉得很痛苦,大家看的时候估计也不怎么愉快^o^。但是这些东西是绕不过去的,怎么样都要过一遍。好在需要了解的东西也不是很多,大家勉为其难的看看吧。

另外我想说的是,在没有做这个教程之前,编程环境的很多东西我也没用过,对CODESYS的文档也没有看得这么仔细。所以大家如果碰到不明白的地方,直接跳过就好了,因为真的不影响使用。

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

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

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值