codeSys 入门 (一)

时间:2024-03-03 07:05:36

新建标准工程,可以选择设备和编程语言

 

 

由于Windows本身不是实时系统,故不能直接作为软PLC的载体,其原因如下:yWindows本身无法提供高精度的定时器,因此不能保证程序运行的实时性;yWindows所有线程都是该系统的普通线程,不能提供实时服务;系统事件存在延迟;Windows对分页内存的访问时间不可预知。 

实时性对于工业机器人来说一般是必须的,对于服务或娱乐机器人则未必。一般人很容易错把“实时性”理解为处理或者响应速度快,但是其实“实时性”表示时间上的“确定性”,例如实时操作系统(RTOS)中的中断响应或者进程切换的延迟时间一定是在一个时间范围内。 

我们常用的操作系统(Windows、Linux)都不是实时操作系统,因为它们设计的初衷是吞吐量,不能保证每个事件都在一定范围内得到处理。再比如,标准以太网的传输速度比实时工业以太网快多了,但是它也却不是实时的,因为它同样不能保证数据在给定的时间内完成传输。

CODESYS的RTE即实现了这样的技术,它对Windows操作系统的内核进行了恰当的实时性改造(占用一个CPU物理核),使其保证具有微秒级抖动量(几十μs)的确定性,且不需增加其他硬件,最终实现“硬实时”的功能。通过实时核进行任务的管理和调度,降低了实时控制系统的设计难度,提高了实时性和可维护性。

只需要在PC上安装软PLCCODESYS RTE软件,然后根据PC的功能,它就会变成一台先进的高性能可编程控制器。它可以运行在安装有WindowsNT、Windows2000或WindowsXP/7等操作系统的标准工业PC上。

 

 

无论是哪个版本的RTE,64位的系统的任务遵循以下原则

运控相关的功能块要放到和总线一个任务下(EtherCAT_TASK)

其他的逻辑性的放到其他的任务都可以

 

 

 PLC采用循环的工作方式,输入信号只会在每个周期的开始阶段进行刷新,输出在每个工作周期的结束阶段进行集中输出,因此必然会产生输出信号相对输入信号滞后的现象。

输出电路的滞后时间。与输出电路的方式有关,继电器输出方式的滞后时间一般为10ms左右,晶体管输出方式滞后时间小于1ms

 

添加事件

CoDeSys 中的可以对任务的优先级进行设置,一共可以设 32 个级别(0 到 31 之间的一个数字,0 是最高优先级,31 是最低优先级)。当一个程序在执行时,优先级高的任务优先于优先级任务低的任务,高优先级任务 0 能中断同一资源中较低优先级的程序执行,使较低优先级程序执行被放缓
 
任务类型
 

 

  • 循环, 指定时间不断运行
  • 惯性滑行(Freewheeling),程序一开始运行,任务就会被处理,一个运行周期结束后,任务将在下一个循环中自动重新启动。该执行方式不受程序扫描周期的影响,即确保每次执行完程序的最后一条指令后才进入下一个循环周期,否则不会结束该程序周期。该执行方式没有固定的任务时间,每次执行的时间可能都不一样,因此不能保证程序的实时性,PLC_PRG才会用这个,其他很少用
  • 事件(Event)如果事件区域的变量得到一个上升沿,那么任务开始。
  • 状态(Status) 与事件触发功能类似,区别在于,只要状态触发的触发变量为TRUE,程序就执行,若为FALSE,则不执行,而事件触发只采集触发变量的上升沿有效信号。
看门狗是一种控制器硬件式的计时设备
CoDeSys 内可以通过“任务配置”对其进行使能,默认不使用看门狗功能。
看门狗的主要功能是监控程序执行时出现的异常或内部时钟发生的故障。如当系统出现死机或当程序进入死循环时,看门狗计时器就会对系统发出重置信号或停止 PLC 当前运行的程序。我们可以形象的将它理解为一只小狗需要主人定时的去给它喂食,如果超过规定的时间没有喂,则他马上就会饿。

 例如,循环时间设为10ms,灵敏度设为5,则实际“看门狗”触发的时间为50ms,一旦任务的执行时间超过50ms,则立即激活“看门狗”并将任务中止。

 
PLC_PRG 是一个特殊的 POU,其默认的运行方式为“惯性滑行(FreeWheeling)”。系统默认每个控制周期调用该 POU
 
主程序PLC_PRG使用结构化文本编程语言,其中的程序内容如下:
POU1();
POU2();
 
主程序分别调用并执行了POU_1和POU_2,而POU_1中又分别调用了POU_3和POU_4。
实际PLC内部按如下顺序执行程序:
1)PLC先执行子程序POU_1;
2)由于POU_1中依次调用了POU_3和POU_4,因此先执行POU_3;
3)执行POU_4,POU_1执行完成;
4)最后执行POU_2
 
库函数

 

 

  目前CODESYS提供的IDE所支持的数据类型有:__UXINT、__VECTOR、__XINT、__XWORD、BIT、BOOL、BYTE、DATE、DATE_AND_TIME、DINT、DT、DWORD、INT、LINT、LREAL、LTIME、LWORD、REAL、SINT、STRING、TIME、TIME_OF_DAY、TOD、UDINT、ULINT、USINT、WORD、WSTRING

常用的数据类型介绍:

BIT:位数据类型,数据大小为一个bit,数据范围0~1

BOOL:布尔数据类型,数据大小为一个bit,数据只能是TRUE或FALSE

BYTE:字节数据类型,数据大小为一个字节大小(8个位),数据范围0~255

DATE:日期数据类型,及PLC系统当前的时间,格式:D#年-月-日

DATE_AND_TIME:日期时间数据类型,详细显示到时、分、秒,格式:DT#年-月-日-时-分-秒

DINT:有符号双倍整形数据,数据大小为4个字节(32位),有符号就是最高位代表符号位。

DT:与DATE_AND_TIME相同

DWORD:有符号双字类型数据,这里的数据大小为4个字节(32位),有符号就是最高位代表符号位。

INT:有符号整形数据类型,数据大小为2个字节,有符号就是最高位代表符号位。

LINT:有符号长整形数据类型,数据大小为跟PLC系统有关,CPU位数是32位则为32位,有符号就是最高位代表符号位。

LREAL:长实数类型,数据大小为8个字节

LTIME:长整数时间设置,数据大小为8个字节,主要用来设置定时器的延时时间,格式为LTIME#xxx时间单位

LWORD:长字类型数据,数据大小与CPU的位长度有关(32位的系统则为32位,64位的系统为64位)

REAL:实数类型数据,数据大小为4个字节

SINT:有符号短整形数据类型,数据大小为2个字节,有符号就是最高位代表符号位。

TIME:整数时间数据类型,数据大小为4个字节,主要用来设置定时器的延时时间,格式为TIME#xxx时间单位。

TIME_OF_DAY:年-月-日设置数据类型,该数据类型用来设置系统的年月日,数据格式:年-月-日

UDINT:无符号双整形数据类型,数据长度为8个字节,无符号类型意味着数据最小为0

ULINT:无符号长整形数据,数据大小与PLC系统有关,CPU为32位的则为32位,无符号类型意味着数据最小为0

USINT:无符号短整形数据,数据大小为2个字节,无符号类型意味着数据最小为0

WORD:字类型数据,数据大小为2个字节

定义变量:  在VAR和END_VAR之间  冒号(:)左边是变量名,右边对应为数据类型

PROGRAM PLC_PRG
VAR
	nTestCnt: BYTE;	
	bVar1:BOOL;
	strName:STRING;	
END_VAR

数据类型强制转换函数来满足我们的需求

1、这些函数的基本格式为:原数据类型_to_目标类型(原类型对应的变量)

2、这个是CODESYS提供的内置转换函数,目前支持任何数据类型之间的转换!

3、举个例子:
   VAR_0:BOOL;
   VAR_1:LTIME;

   VAR_0 := LTIME_TO_BOOL(VAR_1);   //将LTIME数据类型变量转换为BOOL型//
   VAR_1 := BOOL_TO_LTIME(VAR_0);   //将BOOL数据类型变量转换为LTIME型//

 

 如何仿真调试===========================================

  • 1. 点击菜单栏“在线”按钮,勾选仿真
  • 2. 底部状态栏部分会显示红色仿真二字
  • 3. 点击工具栏编译按钮
  • 4. 点击登录按钮,即可进入登录界面
  • 5. 然后点击运行按钮,就能运行仿真了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

==============================运动控制入门====================================================

向X、Y、Z轴的方向微动动作。如果是垂直6轴型机械手,则可以向U方向(倾斜)、V方向(仰卧)、W方向(偏转)微动。

//$Execute,"print realpos"
//#Execute," X: -182.632 Y: 240.114 Z: -20.002 U: -36.156 V: 0.000 W: 0.000 /R /0"
//$Execute,"move here +x(-1)"
//#Execute,0
//$Execute,"print realpos"
//#Execute," X: -183.630 Y: 240.115 Z: -20.002 U: -36.156 V: 0.000 W: 0.000 /R /0"
//$Execute,"move here -x(1)"
//#Execute,0
//$Execute,"print realpos"
//#Execute," X: -184.631 Y: 240.114 Z: -20.002 U: -36.155 V: 0.000 W: 0.000 /R /0

 ======================

 

六轴关节机器人的运动方式

六轴工业机器人作为工业机器人中应用中最为广泛的类型,具有高灵活性、超大负载、高定位精度等众多优点。那六个轴的各自运动路径如何,将以FANUC robot R-2000 iB来进行详细解读。

J1旋转(S轴)

 

 

 

J2下臂(L轴)

 

 

J3上臂(U轴)

 

 

J4手腕旋转(R轴)

 

 

手腕摆动(B轴)

 

 

J6手腕回转(T轴)

 

插补原理

直线插补方式中,两点间的插补沿着直线的点群来逼近。首先假设在实际轮廓起始点处沿X方向走一小段(给一个脉冲当量轴走一段固定距离),发现终点在实际轮廓的上方,则下一条线段沿Y方向走一小段,此时如果线段终点还在实际轮廓下方,则继续沿Y方向走一小段,直到在实际轮廓上方以后,再向X方向走一小段,依此类推,直到到达轮廓终点为止。实际轮廓是由一段段的折线拼接而成,虽然是折线,但每一段插补线段在精度允许范围内非常小,那么此段折线还是可以近似看做一条直线段,这就是直线插补。

假设轴需要在在XY平面上从点(X0,Y0)运动到点(X1,Y1),其直线插补的加工过程如下图所示。

 

 

圆弧插补的定义是给出两端点间的插补数字信息,借此信息控制刀具与工件的相对运动,使其按规定的圆弧加工出理想曲面的一种插补方式。

 

 

拐角减速功能解决的问题是:当指令间夹角过大时,如果仍以较大速度运行,会在夹角处产生较大的机械冲击,轨迹偏离。

小圆限速功能用于处理,在运行轨迹中可能运行圆弧轨迹拟合成的小圆,由于角度偏转较大导致出现轨迹偏转,因此在这种位置需要进行速度限制的处理。

自动倒角功能一般是用于拐角处按照一定的倒角半径进行轨迹的弧度化处理,使速度变化更平滑

 

工业互联网EtherCAT原理

EtherCAT技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接收以太网数据,将其解码,之后再将过程数据复制到各个设备。EtherCAT是一种实时以太网技术,由一个主站设备和多个从站设备构成。主站可以使用标准网卡实现,从站选用特定的EtherCAT从站控制器ESC(EtherCAT Slave Controller)或者FPGA实现。EtherCAT报文(标准的ISO/IEC 8802-3以太网帧)由主站设备发出,途经各个从站设备,从站设备在报文经过时进行提取或插入数据。当报文到达网段内最后一个从站设备时再反方向传输,最后由第一个从站设备把收集到的信息返回到主站设备。

 

 

图2.1 过程数据插入至报文中

 


第一个方面是以太帧“时分复用”。一般以太帧里都只包含了一个设备发送的消息,5个设备就会发送5条以太帧。而EtherCAT则是多个从站共享一条以太帧。就像图2-1中的火车,EtherCAT主站发出了“火车”(以太帧),各个从站则从这辆火车的不同的“车厢”(子报文)中提取或插入自己的“乘客”(消息)。这样一来就实现了以太帧的“时分复用”,只用一条以太帧(最大1486byte),就可以让各个从站都收发出自己的消息,大大的降低了通信的延时(这一部分《浅析EtherCAT 总线》里面讲的比较清楚,还没理解的同学可以看看)。

On The Fly影响的另一个方面就是总线仲裁了。所谓总线(例如CAN总线),就是大家都共用一条通道来通信,各个设备都挂载在同一条总线上。所以,当一个总线上的多个设备同时想要发消息的时候,就会产生冲突,所以,就有总线仲裁的机制。控制器决定当前时刻,谁来发消息,谁来“占用”这条总线。而EtherCAT玩了一个花样,EtherCAT的各个设备之间是一种P2P(Point to Point)的连接方式,这些设备根本没有连接在“同一条”总线上。下面是EtherCAT的连接结构。

图 2-2 EtherCAT连接结构

图2-2中,最左边的是主站,后面的都是从站,各个从站下面还挂载了不同的设备。可以看到主站向从站1发送以太帧,从站1接收、处理完自己的子报文后,再把以太帧发送给从站;从站2接收,处理完自己的子报文后在发送给从站3;如此往返,直到最后一个从站n接收处理完自己的消息,再把这条以太帧返回回去。所以,各个从站之间根本就不会存在总线冲突。EtherCAT只需要预先配置好各个从站占用的子报文位置,也就是On The Fly技术,就可以解决总线总裁这一个老大难的问题,确实是一箭双雕。

实例网络连接

 

 

 控制器的Ethernet口与电脑的网口联接;

● 控制器的EtherCAT口与驱动器的ECAT IN 联接;

● 第一台驱动器的ECAT OUT 联接下一台驱动器的ECATIN口;