1、接下来写单轴驱动的程序,采用的语言为CFC;
2、右击左侧导航栏中的Application→添加对象→程序组织单元→指定名称→类型为:程序→实现语言选择CFC;
3、效果图如下
4、将刚刚添加的POU程序组织单元拖动至EtherCAT_Task任务下面,效果图如下图所示,如果不这样做的话,即便是在POU里写了程序,也不会被执行,程序必须要放在指定的任务中才会被执行;
工程里默认产生的POU(PRG)可以直接删掉
5、在刚刚添加的程序组织单元中利用CFC编写单轴运动程序;
6、从右侧工具栏中拖一个运算块至程序组织单元中,如下图所示
7、指定运算块的类型:单击三个问号→出现一个按钮,上面有三个点→单击该按钮→在随后出现的界面左上角单击文本搜索→输入mc_power
8、单击右下角的确定,随后按三次回车;
9、之后再按照同样的顺序添加三个运算块,分别是MC_MOVEVELOCITY MC_ReadStatus MC_Reset
10、最后的效果图如下图所示
注意MC_MoveVelocity功能块的部分参数已经指定了,包括加速度、减速度和加加速度,指定参数的方法:单击功能块相应的引脚,直接输入相应的数字;
11、为程序组织单元添加方法,类似于C++的类方法,我们可以为类添加方法,在这里,我们也可以为程序组织单元添加方法,我们这里添加几个单轴运动的简单方法,changespeed—更改速度大小,changedirection—更改电机转动方向,stop—停止电机转动;
12、下面是具体添加步骤;
13、右击之前添加的程序组织单元à添加对象à方法,添加三个方法,分别命名为changeDir changeSpeed stop,并将其所属的程序组织单元POU重命名为single_axis,添加方法完毕后的效果如下图所示
14、changeDir()方法的代码如下图所示,注意上半部分是输入变量的定义部分,相当于C/C++中函数的形参,后面我们在调用这个方法的时候会给这个形参赋一个相应类型的值,比如这里的形参类型为MC_DIRECTION,后面我们在调用的时候赋值1,电机正方向转,如果赋值-1电机反方向转;下半部分是属于函数的实现部分;
功能块的调用,有一个需要注意的地方:通常方法会需要一个上升沿,所以在调用MC_MoveVelocity_0功能块实例的时候,首先需要给Execute赋值FALSE,然后修改完我们所需要的速度方向后,再赋值Execute为TRUE,这样,对功能块参数的修改才能生效;
15、changeSpeed()方法的代码如下图所示,这个方法是修改电机转速的,所以方法的形参是数值类型的—REAL,注意这里修改完参数后,也是需要一个上升沿来让参数生效的;
16、stop()方法的代码如下图所示,让电机停下来就是使得其转速为零,跟之前的调速方法类似;
17、之后是操控界面的编写;
18、在左边导航栏处右击Application→添加对象→视图→确定,左边导航栏出现了visualization,页面添加完毕,接下来是具体按钮的添加和布局;
19、双击左边导航栏的visualization,切换到编辑页面;
20、进入右边导航栏工具箱页面,如下图所示,包括常用的基本控件和运动控制控件;
21、添加模拟电机功能块:进入工具箱底部的搜索框,搜索rot(不用区分大小写),选择如下的控件,并将其拖动到编辑区域;
22、随后软件会自动弹出一个如下图所示的界面
23、双击上一步中箭头所指的空白区域,空白区域会出现一个带有三个点的按钮,单击这个按钮,会出现另一个新的界面,如下图所示,点开红色箭头所指的“+”号
24、接着上一步来,点开之后选择我们之前创建的轴—axis_1,单击右下角确定
25、添加MC_Power功能块:与之前添加模拟电机功能块的操作类似,在右边导航栏的搜索框内搜索mc_power(不用区分大小写)
将mc_power控件拖动至编辑区域,软件会自动弹出一个页面,按照之前添加模拟电机控件的方法,将之前创建的MC_Power功能块与之进行关联,点击确定后,关闭页面,如下图所示
26、按照同样的方法,添加MC_MoveVelocity控件,关联MC_MoveVelocity功能块,添加MC_Reset控件,关联MC_Reset_0功能块,添加MC_ReadStatus控件,关联MC_ReadStatus_0功能块,如下几个图所示
27、添加按钮,和前几步类似,在右边导航栏搜索框内搜索button,待选区域出现了如下几个按钮
28、拖动按钮到界面的编辑区,一个需要添加5个,单击按钮,右边导航栏出现按钮的属性页面,在Texts—Text中添加具体的功能指示,分别是:调速1 调速2 顺时针转 逆时针转 停止
效果图如下图所示
29、接下来需要给按钮添加具体的功能的代码;
30、首先给调速1添加代码;
31、单击调速1按钮,转到按钮的属性页面,如下图所示
32、找到输入配置OnMouseClick,单击其后的配置。。。,出现如下界面
33、双击“执行ST代码”,右侧输入代码,调用相应的功能块实例,这里指定的速度值为50,单击“确定”
34、调速2按钮数值为100,其他均与调速1按钮相同;
35、停止按钮的编辑与调速按钮类似,只是速度值设置为0即可,这里不再赘述;
36、如果我们需要能控制电机两个方向上转动呢?这时候就需要调用我们之前定义的changeDir()函数,与调速1按钮类似,只是到了执行ST代码处,输入的参数是1或者-1,前者表示正方向(顺时针)转动,后者表示负方向(逆时针)转动,
37、至此,所有必须的功能块和相应的控件添加完毕;
38、单击登录到按钮,登陆到控制器,如下图所示;
39、单击运行,运行程序,如下图所示;
如果出现如下错误
则需要先停止运行,进行系统的冷/热复位,进入最上方的菜单栏,在线—冷/热复位,注意冷复位不能在运行状态下进行,需要先将程序停止;
40、冷复位完成后,点击运行,双击左边导航栏的视图页面,进入单轴操作的界面,如下图所示
41、多轴的配置只是重复上述单轴配置的过程,CFC程序部分可以直接进行复制粘贴,将输入轴改为新加入的轴即可;
42、建议速度、加速度先从小(比如从0.01开始)往大设置,速度设置过大的话,会报错:
红色方框内的errorid是35
可以在该网址查有关错误的信息:CODESYS Online Help
搜索:SMC_ERROR 从ID 0到ID 12143