信捷PLC XD/XL系列C语言功能块的应用

信捷PLC XD/XL系列C语言函数的应用

前言

本篇文章主要提及信捷PLC在编写,调用C语言功能块时的一些问题:

现在开始接触国产PLC发现对比起他的’摸板‘三菱的PLC,信捷较为人性化的一点是他加入了C语言功能块的支持,其实现在PLC开始支持浮点运算,他的浮点运算能力不是那么容易发挥出来(当然我的个人能力不足是很大的一个原因)。所以这次接触到信捷觉的功能块确实是个好东西,而且使用的也是较为基础的C语言。


一、信捷的C语言功能块

XD/XL 系列支持用户在信捷 PLC 编辑工具软件中利用 C 语言编写功能块,在需要的地方进行调用,
其最大的优点是支持几乎所有的 C 语言函数(相对于 XC 系列,XD/XL 系列还支持全局变量 ),增强了程序的保密性,同时由于可进行多处调用和不同文件的调用,大大提高了编程人员的效率。

其中让C语言功能块真正变得简单的部分是XD/XL 系列还支持全局变量,之前的XC系列不支持全局变量,数据调用起来其实不是很方便,特别是HD与D寄存器之间的数据调用。

二、C语言功能块的新建,编写

1.新建C语言功能块

在信捷PLC编程工具软件中左边工程栏中找到函数功能库,可以在默认库中直接新建源文件也可以自己新建一个库接着再新建源文件;

新建过程中要注意:用户自定义函数名称,由数字,英文,下划线组成,首字符不能为数字,名称长度需<=9个字符。用拼音起名字要注意一下

在这里插入图片描述
在这里插入图片描述

图二中的映射参数对应的梯形图中的软原件,一般我都会只将其映射成D和M,后面会解释原因。

2.C语言函数的编写


在这个界面我们就是正式功能块的编写,首先默认只会将图中所示的HD,D,HM,M映射,如果还想调用X,Y这类寄存器,可以通过修改宏定义完成,具体参考XD/XL系列可编程控制器用户手册[基本指令篇] 280页。

下面我们主要来提一下怎么调用PLC中寄存器的数据。

一般我们用功能块都是做运算时候才用(反正我就是,逻辑类的东西一般都在梯形图中完成,数据一般交由功能块处理)。映射的D或HD可以直接用形参中的W来使用,可以看到图二中的参数类型为有符号数的16位整数型指针,所以我们通过数组的方式调用。

W[0] = 1;
W[10] = W[11] + W[12];

DW[10] = DW[12] +DW[14];

需要注意,在W前直接加上D为调用双字;W前加F为浮点运算;但是不建议这样用。

记得我们开头说过,XD/XL 系列还支持全局变量,我个人更倾向于通过手动给每一种类型数据定义指针,统一后编程过程流畅很多。

3.指针的定义

通过在函数前定义指针

INT8U; //8位无符号整数
INT8S; //8位有符号整数
INT16U //16位无符号整数
INT16S //16位有符号整数
INT32U //32位无符号整数
INT32S //32位有符号整数
FP32; //单精度浮点
FP64; //双精度浮点
 #define  FD_H*(FP32*)&HD		//将FD_H定义为HD的浮点指针
 #define  FD_D*(FP32*)&D		//将FD_D定义为D的浮点指针

然后在函数块中调用对应的数据。

例:

WD[814] = DW[808] / 21.220677 - FD_D[810];      
 WD[816] = DW[806] / 100 - FD_D[812];        

统一每个功能块中的指针定义,实现不同的C语言功能块之间的数据调用近似无感。

三、C语言功能块调用

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在梯形图中,调用要与之前在新建源文件时候软原件的类型要一致。

当我们自定义指之后,我建议都将其映射为D0与M0,写起来方便。

以上仅为个人使用习惯,有空闲时间写下来,如有高见欢迎提出

猜你喜欢

转载自blog.csdn.net/canmianlaida/article/details/126238992