本例程使用的是倍福嵌入式控制器CX5120-0125。

变频器使用博能传动公司A1系列驱动器,支持EtherCAT通信。

案例目标

  通过倍福嵌入式控制器控制2台A1系列驱动器,实现启停控制,写目标频率,故障复位以及控制DO(驱动器本身的数字量输出);读取驱动器输出电流,输出电压,当前故障以及DI值(驱动器本身的数字量输入)。

<1>创建PLC程序。

<2>选择 Standard PLC Project,并把名称改成英文,例如下图中的“Test”。

<3>双击 POUs 文件下的 MAIN 开始编程编辑一段简单的程序,程序可以在示例工程中找到。

PROGRAM MAIN
VARSlave1_Controlword AT %QW100 :UINT :=0;          //驱动器1的 R-PZD1  bit0:启停,bit1:故障复位,bit2:DO0Slave1_TargetFrequency AT %QW102 :UINT :=0;      //驱动器1的 R-PZD2Slave1_ActualCurrent AT %IW100:UINT;            //驱动器1的T-PZD1Slave1_ActualVoltage AT %IW102:UINT;            //驱动器1的T-PZD2Slave1_ActualFrequency AT %IW104 :UINT;         //驱动器1的T-PZD3Slave1_EorrorCode AT %IW106 :UINT;              //驱动器1的T-PZD4   Slave1_DIstatus AT %IW108 :UINT;                //驱动器1的T-PZD5Slave1_EcatState AT %IW110 :UINT;               //驱动器1的EtherCAT通信状态Slave2_Controlword AT %QW104 :UINT :=0;        //驱动器2的 R-PZD1Slave2_TargetFrequency AT %QW106 :UINT :=0;    //驱动器2的 R-PZD2Slave2_ActualCurrent AT %IW112:UINT;           //驱动器2的T-PZD1Slave2_ActualVoltage AT %IW114:UINT;           //驱动器2的T-PZD2Slave2_ActualFrequency AT %IW116 :UINT;        //驱动器2的T-PZD3Slave2_EorrorCode AT %IW118 :UINT;            //驱动器2的T-PZD4   Slave2_DIstatus AT %IW120 :UINT;              //驱动器2的T-PZD5Slave2_EcatState AT %IW122 :UINT;             //驱动器2的EtherCAT通信状态Init :BOOL:=FALSE;//fbSdoRead  : FB_EcCoESdoRead;fbsdoWrite :FB_EcCoESdoWrite;SDO_Execute: BOOL:=FALSE;SDO_Done: BOOL:=TRUE;SDO_Value: UINT;SDO_Index: WORD;SDO_SubIndex: BYTE;
END_VARIF (Slave1_EcatState = 16#08)AND(Slave2_EcatState = 16#08) THEN  //判断驱动器是否都进入OP状态//初始化使用SDO配置驱动器加减速时间及停机方式。IF NOT Init THEN//驱动器的加速时间改为50sSDO_Index:=16#2034;  //B04.02 斜坡1加速时间SDO_SubIndex:=3;SDO_Value:=500;     //50.0sfbsdoWrite(sNetId:='5.63.20.224.4.1',nSlaveAddr :=1001, nIndex:=SDO_Index, nSubIndex :=SDO_SubIndex, pSrcBuf:= ADR(SDO_Value), cbBufLen:=2,bExecute:=TRUE);IF NOT fbsdoWrite.bBusy THENfbsdoWrite(bExecute:=FALSE);END_IFfbsdoWrite(sNetId:='5.63.20.224.4.1',nSlaveAddr :=1002, nIndex:=SDO_Index, nSubIndex :=SDO_SubIndex, pSrcBuf:= ADR(SDO_Value), cbBufLen:=2,bExecute:=TRUE);IF NOT fbsdoWrite.bBusy THENfbsdoWrite(bExecute:=FALSE);END_IF//驱动器的减速时间改为10sSDO_Index:=16#2034;  //B04.03 斜坡1减速时间SDO_SubIndex:=4;SDO_Value:=100;     //10.0sfbsdoWrite(sNetId:='5.63.20.224.4.1',nSlaveAddr :=1001, nIndex:=SDO_Index, nSubIndex :=SDO_SubIndex, pSrcBuf:= ADR(SDO_Value), cbBufLen:=2,bExecute:=TRUE);IF NOT fbsdoWrite.bBusy THENfbsdoWrite(bExecute:=FALSE);END_IFfbsdoWrite(sNetId:='5.63.20.224.4.1',nSlaveAddr :=1002, nIndex:=SDO_Index, nSubIndex :=SDO_SubIndex, pSrcBuf:= ADR(SDO_Value), cbBufLen:=2,bExecute:=TRUE);IF NOT fbsdoWrite.bBusy THENfbsdoWrite(bExecute:=FALSE);END_IF//驱动器的停机方式改为减速停机SDO_Index:=16#2035;  //B05.32 OFF1停机方式SDO_SubIndex:=33;SDO_Value:=1;     //0:自由停机  1:减速停机fbsdoWrite(sNetId:='5.63.20.224.4.1',nSlaveAddr :=1001, nIndex:=SDO_Index, nSubIndex :=SDO_SubIndex, pSrcBuf:= ADR(SDO_Value), cbBufLen:=2,bExecute:=TRUE);IF NOT fbsdoWrite.bBusy THENfbsdoWrite(bExecute:=FALSE);END_IFfbsdoWrite(sNetId:='5.63.20.224.4.1',nSlaveAddr :=1002, nIndex:=SDO_Index, nSubIndex :=SDO_SubIndex, pSrcBuf:= ADR(SDO_Value), cbBufLen:=2,bExecute:=TRUE);IF NOT fbsdoWrite.bBusy THENfbsdoWrite(bExecute:=FALSE);END_IFInit:=TRUE;END_IF// end of initSlave1_TargetFrequency:=4096;  //频率写50HzSlave2_TargetFrequency:=4096;IF(Slave1_EorrorCode<>0)OR(Slave2_EorrorCode<>0) THEN//有故障Slave1_Controlword.0:=FALSE;     //停机Slave2_Controlword.0:=FALSE;Slave1_Controlword.2:=FALSE;    //DO0断开Slave2_Controlword.2:=FALSE;ELSE                               //正常Slave1_Controlword.0:=TRUE;     //运行Slave2_Controlword.0:=TRUE;Slave1_Controlword.2:=TRUE;    //DO0闭合Slave2_Controlword.2:=TRUE;END_IFELSE  //不再OP状态Slave1_Controlword.0:=FALSE;     //停机Slave2_Controlword.0:=FALSE;Slave1_Controlword.2:=FALSE;    //DO0断开Slave2_Controlword.2:=FALSE;
END_IF

<4>编译程序,选择Test Project 右键选择Build。(注意本程序中因为涉及SDO的读写,所以添加了EtherCAT库,不添加会报错,文末有添加步骤)

<5>系统会自动编译这段代码,如果没有错误就会在消息栏中提示成功生成,并且在 Test Instance 中生成输入输出变量可供连接。

<6>分别点击 Test Instance 中的变量开始进行变量连接,例子中将程序中的输入变量Slave1_ActualCurrent关联至从站1的T-PZD1。请将PLC中用到的输入输出变量依次关联至从站的PZD。

<7>变量连接做好后选择 TwinCAT,点击 Activate Configuration。

<8>弹出对话框点击确定。

<9>如果弹出以下窗口说明你的项目中有一些 license 没有激活或者漏激活了,不过没有关系,点击是可以重新激活缺少的 license。

<10>输入5位验证码后点OK。

<11>点击确定切换到 RUN 模式。

<12>点击工具栏的绿色箭头 Login。

<13>程序正常运行,可以看到实时监控的数据值。红框中标出的按键从左至右依次是登录,运行,停止,退出登录。

添加EtherCAT库实现SDO读写

<1>在左侧PLC->Test->Test Project->References目录树下,右击选择Add library。

<2>在弹出的对话框内,选择Tc2_EtherCAT。选择OK。

<3>添加成功后,可以在目录树中看到已经添加的EtherCAT库。

<4>然后可以使用功能块FB_EcCoESdoRead进行SDO的读操作,使用FB_EcCoESdoWrite进行SDO的写操作,使用这两个功能块对驱动器参数进行修改,在示例程序中有体现。

TwinCAT学习笔记3--创建PLC程序控制2台EtherCAT变频器相关推荐

  1. Django:学习笔记(2)——创建第一个应用

    Django:学习笔记(2)--创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

  2. spring学习笔记02-spring-bean创建的细节问题

    spring学习笔记02-spring-bean创建的细节问题 三种创建Bean对象的方式 Bean的作用范围 Bean的生命周期 <?xml version="1.0" e ...

  3. JavaScript学习笔记:创建、添加与删除节点

    JavaScript学习笔记:创建.添加与删除节点 文章目录 JavaScript学习笔记:创建.添加与删除节点 一.DOM对象节点类型 二.创建节点 1.创建元素节点 2.创建文本节点 3.创建属性 ...

  4. Python学习笔记:创建分数类

    Python学习笔记:创建分数类 1.编写创建分数类.py # 创建分数类from math import gcd# 定义分数类 class Fraction: def __init__(self, ...

  5. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  6. oracle 创建角色 权限设置,[学习笔记] Oracle创建用户、分配权限、设置角色,

    [学习笔记] Oracle创建用户.分配权限.设置角色, 创建用户 create user student --用户名 identified by "123456" --密码 de ...

  7. 信捷PLC与7台三菱变频器485通讯案例

    信捷PLC与7台三菱变频器485通讯案例 功能:用信捷PLC与7台三菱变频器modbus通讯,自由通讯协议 配件:信捷XC系列PLC,三菱E740变频器,昆仑通态触摸屏 功能:对7台变频器进行单独频率 ...

  8. 信捷PLC与7台三菱变频器485通讯案例 对7台变频器进行单独频率设定,启停控制,频率读取

    信捷PLC与7台三菱变频器485通讯案例功能:用信捷PLC与7台三菱变频器modbus通讯,自由通讯协议 配件:信捷XC系列PLC,三菱E740变频器,昆仑通态触摸屏 功能:对7台变频器进行单独频率设 ...

  9. 三菱FX3U与4台三菱变频器专用指令通讯案例 功能:采用三菱FX3U PLC与4台三菱变频器E740进行通讯

    三菱FX3U与4台三菱变频器专用指令通讯案例 功能:采用三菱FX3U PLC与4台三菱变频器E740进行通讯. 配件:三菱FX3U的PLC,加FX3U 485BD板. 三菱E740变频器. 昆仑通态触 ...

  10. Unity3D学习笔记之七创建自己的游戏场景

    到现在为止我们已经拥有了比较完备的Prefab,已经可以创建宏大的游戏场景,并以第一人称视角在场景中漫游了.这里给大家做个小的示范,建一个小场景大家在创建场景的时候需要自由发挥,做个尽量大的场景出来. ...

最新文章

  1. .net core 项目文件结构浅析
  2. MySQL配置mycat读写分离:wrapper | Startup failed: Timed out waiting for signal from JVM.
  3. 反距离加权插值法例题_GMS插值中的反距离权重法(Inverse distance weighted)
  4. python @classmethod 和 @staticmethod区别,以及类中方法参数cls和self的区别
  5. ip地址转换数字函数 iton_DataLakeAnalytics: 解析IP地址对应的国家城市的函数
  6. Java中利用MessageFormat对象实现类似C# string.Format方法格式化
  7. Java魔法堂:URI、URL(含URL Protocol Handler)和URN
  8. javafx阴影_JavaFX技巧来节省内存! 属性和可观察对象的阴影场
  9. spring-boot (9)---STS 新建一个spring-boot rest 项目
  10. placeholder在某些浏览器下不垂直居中问题
  11. JZOJ 3.10 1539——三条直线
  12. 读xml文件时字体串类型的判断
  13. WPS word文档_页眉页脚横线的添加和删除
  14. HikariPool-1 - Connection is not available, request timed out after 6000ms
  15. 互联网周刊封面文章:全球网络广告三大趋势
  16. mybatis的大于小于号转义符号
  17. 2020icpc上海赛G题 Fibonacci详解
  18. 【BLE】广播数据包结构讲解,五颗蓝牙芯片对比
  19. 高数(下) 第八章:空间解析集合与向量代数
  20. 报错:Cannot resolve org.openjfx:javafx.base:11.0.0-SNAPSHOT

热门文章

  1. android原生系统手写,可自定义 自带中文手写输入法_索尼 Xperia SP_手机Android频道-中关村在线...
  2. html表单 新页面打开新页面,js提交表单并打开新页面的方法
  3. qt -- QTableView
  4. Facade模式简述
  5. excel导入自定义单元格式yyyymd hmmss时间方法
  6. FreeRTOS消息队列详解第一讲(全网最全)——消息队列概述
  7. GB和RGBW排列区别,谁是真假4K
  8. 简单有效的记录日常收支
  9. 一张表实现固定表头和锁定列
  10. NVIDIA JETSON TX2上运行yolo3