CODESYS (V3.5 SP12 Patch)简单应用 第 2篇之单轴简单使用CFC+ST代码(硬件:长沙赛搏机器智能MIC7001总线控制器+松下A6BE总线驱动器)

本文详细介绍了如何使用CFC语言在CODESYS环境中编写并实现一个单轴驱动程序,包括添加POU、配置运算块、编写方法、操控界面和按钮逻辑。通过实际操作演示了如何调用功能块及实现电机控制功能,适合初学者学习嵌入式CFC应用。

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,然后修改完我们所需要的速度方向后,再赋值ExecuteTRUE,这样,对功能块参数的修改才能生效;

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

<think>好的,用户现在的问题是关于如何在Codesys V3.5 SP17 Patch2中将数值1赋值给变量“系数1”。用户之前已经询问过类似的问题,我之前的回答详细介绍了类型匹配、变量声明等。现在用户再次提问,需要结合之前的回答和新的引用内容来调整。 首先,用户提供的引用提到了changeDir()方法,其中形参类型为MC_DIRECTION,调用时赋值1或-1。这可能意味着用户对枚举类型或特定类型的参数赋值感兴趣。但用户的实际需求还是赋值1给变量“系数1”,所以需要结合之前的回答,确保类型匹配和声明正确。 我需要检查之前的回答中是否已经覆盖了Codesys的具体操作,特别是关于变量声明和初始化的部分。之前的回答提到了VAR块中的声明,显式初始化,以及类型转换。现在用户可能希望更具体的步骤,尤其是在Codesys环境中的实际操作。 用户提到Codesys版本是3.5 SP17 Patch2,这个版本支持Unicode变量名,所以中文变量名应该没问题。但需要提醒用户确认是否启用了相关设置,尤其是如果使用其他品牌PLC可能需要额外配置。 用户可能没有完全理解类型匹配的重要性,例如整数和浮点的区别。需要再次强调,如果“系数1”是REAL类型,必须赋值为1.0而不是1,否则会编译错误。同时,是否需要类型转换函数如INT_TO_REAL。 另外,用户引用的例子中赋值1给MC_DIRECTION类型的参数,这可能是枚举类型,所以可能需要解释不同类型的情况。但用户的问题是关于数值赋值,所以主要关注基本类型。 可能需要分步骤说明,包括声明变量、赋值的位置(在程序段中),以及调试验证的方法。此外,用户可能想知道如何在不同的作用域中赋值,比如全局变量和局部变量。 还要考虑用户可能的错误,例如使用=而不是:=,或者未声明变量直接使用,这些都需要在回答中指出。另外,检查变量作用域是否正确,确保变量在需要的地方可访问。 最后,确保回答结构清晰,步骤明确,并包含示例代码,帮助用户直接应用。同时,相关问题要引导用户深入理解类型声明、调试方法等。</think>根据CODESYS V3.5 SP17的工程实践,实现数值1赋值给变量"系数1"的具体操作步骤如下: --- ### 一、基础赋值实现 #### 1. 声明与初始化同步 在**全局变量列表(GVL)**或**程序局部变量**块中声明: ```pascal {attribute &#39;qualified_only&#39;} VAR_GLOBAL 系数1: REAL := 1.0; // 推荐浮点型初始化写法 END_VAR ``` *注:使用`:=`运算符进行初始化赋值,全局变量建议添加`{attribute &#39;qualified_only&#39;}`访问限定符[^1]* #### 2. 过程赋值语句 在**程序体(PRG)**或**函数块(FB)**中动态赋值: ```pascal PROGRAM PLC_PRG VAR 本地系数1: INT := 1; // 局部变量初始化 END_VAR // 主程序执行段 系数1 := 1.0; // 全局变量赋值 本地系数1 := 1; ``` --- ### 二、工程环境配置要点 #### 1. 中文变量支持验证 在CODESYS工程中启用Unicode支持: 1. 项目 > 属性 > 常规 > 编码 > 选择"UTF-8" 2. 设备 > 设备设置 > 编译器 > 勾选"允许Unicode标识符" #### 2. 数据类型严格性设置 通过工程选项控制类型转换: ```xml <Strictness> <ImplicitTypeConversion>1</ImplicitTypeConversion> <!-- 0=允许隐式转换 1=禁止 --> </Strictness> ``` *建议设置为1以避免意外类型转换错误* --- ### 三、多场景赋值示例 #### 1. 结构体嵌套赋值 ```pascal TYPE 电机参数 : STRUCT 系数组: ARRAY[1..3] OF REAL; 运行方向: MC_DIRECTION; // 引用库类型 END_STRUCT END_TYPE VAR stMotor: 电机参数; END_VAR stMotor.系数组[1] := 1.0; // 结构体数组成员赋值 stMotor.运行方向 := 1; // 枚举类型赋值(需确认MC_DIRECTION定义) ``` #### 2. 带类型检查的安全赋值 ```pascal // 安全编程模式 IF (__ISVALID(1.0)) AND (__GETTYPEID(系数1) = TYPEID_REAL) THEN 系数1 := REAL#1.0; // 显式类型标识 END_IF ``` --- ### 四、调试与验证 #### 1. 在线监控配置 在CODESYS开发环境中: 1. 登录控制器 2. 右键变量 > 添加监控 3. 强制写入值验证: ```pascal // 调试专用写法(仅在线有效) __SETVAR(&#39;GVL.系数1&#39;, 1.0); ``` #### 2. 交叉引用分析 使用快捷键`Ctrl+Shift+X`查看变量所有引用点,确认赋值路径完整性。 --- ### 五、常见问题解决方案 | 故障现象 | 技术诊断 | 修正方案 | |-------------------------|------------------------------|-----------------------------------| | "Invalid character"错误 | 中文变量名未正确启用Unicode | 检查工程编码和设备Unicode支持配置 | | 赋值后值未更新 | 变量被多个程序块重复写入 | 使用交叉引用工具排查写冲突 | | 编译提示类型不匹配 | 浮点变量赋整数值 | 改为1.0或添加INT_TO_REAL()转换 | --- ### 六、高级应用技巧 #### 1. 属性扩展赋值 ```pascal {attribute &#39;analysis&#39;} {attribute &#39;hide_in_tree&#39;} VAR 系数1: REAL := 1.0; // 添加调试属性 END_VAR ``` #### 2. 基于POUs的批量赋值 创建函数块实现参数组写入: ```pascal FUNCTION_BLOCK FB_参数配置 VAR_INPUT fValue: REAL; END_VAR VAR 系数1: REAL; END_VAR 系数1 := LIMIT(0.0, 100.0, fValue); // 带范围限制的赋值 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值