本例程使用的是倍福嵌入式控制器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. B-监狱逃脱(BFS)
  2. P1134 阶乘问题
  3. kali系统支持那些手机_将kali安装到手机上作为便携式系统启动盘的方法
  4. eclipse git 解决冲突 解决 mergetool 不能使用问题
  5. paper reading:高光谱遥感影像空谱特征提取与分类方法研究 - 康旭东
  6. sql语句分页多种方式ROW_NUMBER()OVER
  7. linux下查看设备的接口,linux 查看sdio接口有哪些设备?
  8. 全新2021款 Jlink隔离器,ARM仿真器隔离,Jlink,Nu-link,ULINK的隔离,Cortex-M系列隔离仿真
  9. arduinouno的地是相连的吗_德阳马自达3方向机,宝马X7电子方向机进水可以修吗
  10. js设计模式之单例模式
  11. matlab拉丁方,基于拉丁方的流密码算法设计与仿真
  12. mac dock 隐藏程序_从Dock删除最近的应用程序
  13. 基于numpy实现矩阵计算器
  14. bark 自建服务器,自建iOS消息推送服务Bark
  15. 手机 html 全屏,手机投屏开启满屏模式
  16. eclipse优化之eclipse验证设置,让eclipse跑得更快
  17. 关于js关闭窗口的事件和用法
  18. 北京2022年最后一次快开始了,准备好了吗?
  19. Amesim车辆仿真--制动匹配理论
  20. 公有云滴滴滴滴滴滴滴滴滴滴

热门文章

  1. CSS绘制自己的小摩尔
  2. 大数据技术生态体系(截图)
  3. 计算机word中的宏,word运行宏快捷键_WORD运行宏_word中运行宏的方法_word自动运行宏...
  4. STM32F107+LWIP+FreeRTOS
  5. html css笔试题库,web前端笔试题集锦(HTML/CSS篇)
  6. docker常用命令
  7. dbv mysql_mysql数据库版本控制dbv使用
  8. JS GZIP压缩,GZIP解压
  9. python 绘图中文显示_Python绘图实现显示中文
  10. 【Java教程】Java 抽象工厂模式