admin 发表于 2023-9-22 23:14:45

Codesys基础笔记

前言:该笔记主要记录的事作者在学习codesys中所遇到的一些常见的问题和一些需要经常翻阅的基础知识内容,并非教程。一、 组件说明
[*](*)CODESYS Control Win V3-x64 SysTray
控制模拟PLC运行暂停状态的组件





2. (*)CODESYS Gateway V3网关控制中心以上两个应用程序和主程序是Codesys模拟运行时必备的两个程序。
==注意==:如果同时安装了Codesys 和 Eplan 两款软件可能会出现Control程序无法Start运行的情况,参照解决Codesys在电脑中软PLC启动不了问题​blog.csdn.net/weixin_44327767/article/details/122734326
二、通信连接连接PLC控制器需先注册用户,在线=>安全=>添加设备用户



此处连接PLC控制器时需要输入刚刚添加设备用户中设置的密码,显示激活则连接成功。三、在线修改 / 下载在线更改其实是将不一样的代码传输到控制器的ram(运行内存)中,当断电之后ram中的内容会清空。下载是将全部代码覆盖控制器rom(持久储存器)中,断电不影响。RAM-RamdomAccessMemory易挥发性随机存取存储器,高速存取,读写时间相等,且与地址无关,如计算机内存等。ROM-Read Only Memory只读存储器。断电后信息不丢失,如计算机启动用的BOS芯片。存取速度很低(较RAM而言)且不能改写。四、启动应用



五、任务配置
任务执行类型执行特点任务举例
循环在设定的每个时间间隔内执行对应的POU一次EtherCAT总线任务
CANopen总线任务
ModbusTCP通讯任务
普通任务循环
惯性滑行一旦开始执行,即反复循环执行,没有停歇间隔普通任务循环
事件在设定的Bool型变量状态由0变1的情况下触发执行一次软中断处理POU
状态在设定的Bool型变量的状态为1的情况下,反复循环执行,状态变为0则停止执行条件执行任务POU
六、数据类型1. 整值数据类型







实数的小数部分的是二进制表示的,用的是不断乘以的方式判断是否大于1来进行取值的操作(如下图),所以一般不要实数做等于比较


2. 时间类型
数据类型下限上限位数申明方式prefix 前缀
TIME0ms1193h 2m 47s 295ms32bitT#1m30st
LTIME0ns213503d 23h 34m 33s 709ms 551us 615ns64bitLTIME#50d20h10mlt
TIME_OF_DAY00:00:0023:59:5932bitTOD#10:38:54tod
DATE01.01.1970toapprox.06.02.210632bitD#2011-04-20date
DATE_AND_TIME64bitDT#2011-02-20-10:38:54dt
定义语法如下:   
定义语法如下:
    TIME_test1 : TIME := T#1M30S;
    TIME_test2 : DATE := D#2022-11-20;
时间常数的语法:#<时间声明>
3.字符串STRING和WSTRING变量类型STRING用于字符串,CODESYS默认为80个字节。STRING以ASCII(8位)解释,WSTRING以UNICODE(16位即UTF-16编码)解释。STRING 变量需要的内存一直是:​ STRING: 1字节/字符 + 额外1字节用于零终止​ WSTRING: 2字节/字符 + 额外2字节用于零终止一个STRING 或 WSTRING 最多可包含255个字节。区分两种类型字符串的书写方式:(不按照此方法书写可能会报错:无法强制转换)​ STRING类型用单引号:'string'​ WSTRING类型用双引号:"WSTRING字符串“”



注意:字符串的长度默认为80,但可以在声明中限制。这是通过类型的长度来实现4.扩展类型(指针操作)
[*]指针POINTER:变量地址
[*]地址操作符ADR:获取变量地址
[*]内容操作符^:传递指针指向的内容
iVar1 : INT;//变量1
iVar2 : INT;//变量2
piVar:POINTER TO INT;//指针

//将变量1的地证交给指指针
piVar := ADR(iVar1);
//通过内容操作符把指针内容交给变量2
iVar2 := piVar^;
七、CodeSys DUT
[*]结构体 STRUCT
结构体使用需要先申明,再实例化,再进行使用申明//结构体使用方法
TYPE STRUCT_VAR://结构体名称
STRUCT//申明该样式为结构体,后面几种类型主要决定样式的地方就在此处
    VAR1:BOOL;
    VAR2:INT;
    VAR3:ARRAY OF INT;
END_STRUCT
END_TYPE
注意:当我们定义了结构体还不能进行使用,它相当于一个数据类型,需要使用还需要进行实例化如下。实例化PROGRAM PLC_PRG//POU的函数体
VAR
    STRUCT1:STRUCT_VAR;//默认实例化,STRUCT1为该结构体的名字
    STRUCT1:STRUCT_VAR:=(VAR1:=TRUE,VAR2:=2,VAR3:=);//初始化值实例化
END_VAR
继承 EXTENDS
TYPE DUT EXTENDS STRUCT_VAR://STRUCT_VAR被DUT继承或者说 DUT继承了STRUCT_VAR
STRUCT//申明该样式为结构体
    xVar1:BOOL;
    tTime1:TIME;
END_STRUCT
END_TYPE
虽然DUT中只有两个属性,但是因为DUT继承了STRUCT_VAR,所以实际上DUT一共有5个属性。2. 枚举体()枚举体在定义了之后就可以直接进行使用,定义方法和使用方法如下[当我们将枚举体第一个值设定为之后,那么我们后面的值会一次递增1,比如代码中wed的值就为3]TYPE DUT_ENUMER:
(
    Mon:=1,//设置第一位值
Tues,//2
Wed,//3
Fri//fri的值为4
)BYTE;//定义上述4个变量类型为BYTE,可以不填写默认为INT
END_TYPE

//枚举体的使用
iNumber1:=DUT_ENUMER.Mon;
3. 联合体 UNION定义TYPE ://联合体名字
UNION//联合体关键词
    VAR1:BOOL:
    VAR2:ARRA 【0..8】OF BOOL;
    VAR3:INT;
END_UNION
END_TYPE
实例化PROGRAM POU_UNION
VAR
UNION1:OUT_UNION;
END_VAR

//使用方法
UNION1.VAR1:=TRUL;
八、功能块和函数的区别
//功能块实现:将学号为3的学生年龄加25岁。
editStu(stStudent:=stStudents , iAge:=25 , age=>stStudents.iAge);
//age=>stStudents.iAge的意思是将功能块输出的age值传送给stStudents.iAge

//函数实现:将学号为4的学生年龄加25岁。
stStudents.iAge:=POU_edit_studentage_1(stStudent:=stStudents,age:=25);
//POU_edit_studentage_1函数是将计算结果以返回值的形式返回给stStudents.iAge区别:

[*]功能块的使用需要实例化,且实例化之后会独立存在于内存之中,下次调用时内部的变量不会初始化。而函数在每一次调用时都会初始化内部的值。(什么叫函数:代数式中,凡相关的两数X与Y,对于每个X值,都只有一个Y的对应值。这种对应关系就表示Y是X的函数。说白了就是相同的输入对应相同的输出)。
[*]功能块只有输出(意味着可以同时输出多个值)。函数只有返回值,只有一个返回值。

九、数据操作算术操作
[*]ADD 加法
[*]DIV 减法
[*]MUL 乘法
[*]SUB 除法
[*]MOD 取余
逻辑操作
[*]AND 与操作A AND B 只有A和B都为真,最终结果才是真。
[*]OR 或操作A OR B A和B任意一个为真,结果即为真。
[*]XOR 异或操作A XOR B A和B不同为真,相同为假。
[*]NOT 取反操作NOT A A为真侧结果为假,A为假则结果为真。
数据类型转换//隐式转换
//小的向大的转换,SINT→INT

//显示转换
//不同大小或不同类型,STRING→DINT
SINT:=TO_SINT(STRING);
SINT:=STRING_TO_REAL(STRING)
十、变量类型申明
变量类型关键字变量属性外部读写(Read 读)内部读写(write写)
VAR局部变量--R/W
VAR_INPUT输入变量,由外部提供RIWR
VAR_OUTPUT输出变量,有内部变量提供给外部RR/W
VAR_IN_OUT输入-输出变量R/WR/W
VAR_GLOBAL全局变量,能在所有POU内使用。R/WR/W
VAR_TEMP临时变量,程序和功能块内部存储使用的变量--R/W
VAR_STAT静态变量R/WR/W
变量附加属性
变量附加属性关键字变量附加属性
RETAIN(保持变量)保持型变量,用于掉电保持
RETAIN PERSISTENT (持续保持变量)持续保持型变量,用于掉电保持
(两个单词的顺序不重要)
CONSTANT常量
RETAIN变量 和 PERSISTENT变量 被称为保持性变量。主要是在执行不同操作之后不同程度的变量保留其值的程度不同。如下图:


image-20221120231018726
Reset warm OR Reboot PLC :表示热复位或则重启PLCReset cold OR Download:表示冷复位或者下载Reset origin:表示初始复位定义方法:VAR RETAIN
    RET_NUM_1 : INT := 15;
END_VAR

VAR RETAIN PERSISTENT
    PER_NUM_2 : INT := 15;
END_VAR
十一、为变量分配地址用AT为变量分配地址:在变量声明中,代码AT将变量分配给特定输入或输出地址。 语法:<变量名> AT <地址>:<变量类型>;举例:VAR
    xBeispiel AT %IX1.1 : BOOL;
    wBeispiel AT %QW3: INT;
    xBeispiel AT %QX7.5: BOOL;
END_VAR
其中:
[*]%lX1.1:Input bit 1.1
[*]%QW2:Output word 2
[*]%QX7.5:Output bit 7.5

RangeprefixSize prefix
IInputXSingle bit
QOutputBByte(8bits)
WWord(16bits)
DDoubleword(32bits)








页: [1]
查看完整版本: Codesys基础笔记