PLC的C语言编程.docx
- 文档编号:27549963
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:14
- 大小:206.01KB
PLC的C语言编程.docx
《PLC的C语言编程.docx》由会员分享,可在线阅读,更多相关《PLC的C语言编程.docx(14页珍藏版)》请在冰豆网上搜索。
PLC的C语言编程
PLC的C语言编程
2、C语言功能块
本章重点介绍C语言编辑功能块的特点、、编辑、指令调用、函数的存储、应用要点等,并附有常用函数列表。
2-1.功能概述
2-2.指令形式
2-3.操作步骤
2-4.函数的导入、导出
2-5.功能块的编辑
2-6.程序举例
2-7.应用要点
2-8.附函数表
2-1、功能概述
XCP新增功能,支持用户在XCPPro编程软件中利用C语言编写功能块,在需要的地方进行调用,其最大的优点是支持几乎所有的C语言函数,增强了程序的保密性,同时由于可进行多处调用和不同文件的调用,大大提高了编程人员的效率。
2-2、指令形式
2、出现如下对话框,填写所要编辑函数的信息。
3、在新建完成后,会出现下面的编辑画面。
●参数传递方式:
在梯形图调用时,传入的D和M,即为W和B的起始地址。
如上图D0,M0开始,则W[0]为D0,W[10]为D10,B[0]为M0,B[10]为M10。
如梯形图中使用的参数为D100,M100,则W[0]为D100,B[0]为M100。
因此,字与位元件的首地址由用户在PLC程序中设定。
●参数W:
表示字软元件,使用时按数组使用,如W[0]=1;W[1]=W[2]+W[3];在程序中可按照标准C规范使用。
●参数B:
表示位软元件,使用时也按数组使用,支持位置1和位清零,如B[0]=1;B[1]=0;以及赋值,如B[0]=B[1]。
●双字运算:
在W前加个D,如DW[10]=100000,表示给W[10]W[11]合成的双字赋值。
●浮点运算:
支持在函数中定义浮点变量,以及进行浮点运算。
●函数库:
用户功能块可以直接使用函数库中定义的函数和常量,函数库中包含的函数和常量见后附部分。
●支持的其他数据类型:
BOOL;//布尔量
INT8U;//8位无符号整数
INT8S;//8位有符号整数
INT16U//16位无符号整数
INT16S//16位有符号整数
INT32U//32位无符号整数
INT32S//32位有符号整数
FP32;//单精度浮点
FP64;//双精度浮点
●预定义的宏:
#definetrue1
#definefalse0
#defineTRUE1
#defineFALSE0
2-4、函数的导入、导出
1、导出
(1)功能:
将函数导出为文件,供其他PLC程序导入用。
(2)导出方式
a)可编辑:
将源代码也导出,并保存为文件.再次导入后,可再次编辑
b)不可编辑:
源代码不导出.再次导入后只可使用,无法编辑
2、导入
功能:
导入已存在的函数功能块文件,供该PLC程序使用。
选中函数功能块,右键点击菜单"从硬盘导入函数功能块文件",选择相应文件,按确定即可。
2-5、功能块的编辑
例:
将PLC中寄存器D0,D1相加,然后将值赋给D2;
(1)首先在“工程”工具栏里,新建一个函数功能块,在这里我们把它命名为ADD_2,并且编辑C语言程序。
(2)编辑完之后,点击编译;
、
根据编译信息列表内所显示的信息,我们可以查找修改C语言程序里的语法漏洞。
在这里比较容易的发现程序中W[2]=W[0]+W[1]的后面缺少符号“;”。
当我们将程序修改后,再次进行编译。
从列表信息里可以确认,在程序里面并没有语法错误。
(3)然后再编写PLC程序,分别赋值十进制数10,20到寄存器D0,D1中,并调用函数功能块ADD_2。
如下所示:
(4)然后将程序下载到PLC当中,运行PLC,并置位M0。
(5)我们可以通过工具栏上的自由监控观察到D2的值变成了30,说明赋值成功了。
2-6、程序举例
●功能:
利用函数功能块计算出CRC校验值。
●CRC校验运算规则如下:
(1)令16-bit寄存器(CRC寄存器)=FFFFH。
(2)将第一个8-bitbyte的讯息与低位元16-bitCRC寄存器异或(ExclusiveOR)内。
(3)右移一位CRC寄存器,将0填入高位元处。
(4)检查右移的值,如果是0,就将第三步的新值存入CRC寄存器内,如果为非0,那么将CRC寄存器的值与A001H异或,将结果存入CRC寄存器内。
(5)重复(3)到(4),将8-bit全部运算完成。
(6)重复
(2)到(5),取下一个8-bit的讯息指令,直到所有讯息指令运算完成。
最后,得到的CRC寄存器的值,即是CRC的校验码。
值得注意的是CRC的校验码必须交换放置与讯息指令的检查码中。
●编辑C语言功能块程序,如下:
●编写PLC梯形图程序,D0:
校验数据的字节个数,D1~D5:
校验数据的内容。
如下:
●下载到PLC里,然后运行,使M0置ON,通过自由监控就会发现寄存器D6,D7内分别存入了CRC校验值的高位与底位。
2-7、应用要点
●使用函数功能块的PLC程序,上传后.该函数功能块无法上传,将出现一个未知指令错误。
●一个函数功能块文件内部,可以写多个子函数,进行相互调用。
●多个函数功能块文件彼此独立,不能相互调用各自拥有的函数。
●函数功能块文件可以调用浮点,算术等C语言库函数,如sin,cos,tan。
2-8、附函数表
默认函数库
常量名
数据
说明
_LOG2
(double)0.693147180559945309417232121458
2的对数
_LOG10
(double)2.3025850929940459010936137929093
10的对数
_SQRT2
(double)1.41421356237309504880168872421
根号2
_PI
(double)3.1415926535897932384626433832795
PI
_PIP2
(double)1.57079632679489661923132169163975
PI/2
_PIP2x3
(double)4.71238898038468985769396507491925
PI*3/2
字符串函数
说明
void*memchr(constvoid*s,intc,size_tn);
传回s位置开始前n个字元第一次出现字元c的位置指标.
intmemcmp(constvoid*s1,constvoid*s2,size_tn);
比较位置s1和位置s2的前n个字元.
void*memcpy(void*s1,constvoid*s2,size_tn);
从位置s2复制n个字元到位置s1,传回s1.
void*memset(void*s,intc,size_tn);
取代s位置开始前n个字元成为字元c,传回位置指标s.
char*strcat(char*s1,constchar*s2);
连结字串ct到字串s之后.
char*strchr(constchar*s,intc);
传回字元c第一次出现在字串s位置的指标.
intstrcmp(constchar*s1,constchar*s2);
比较字串s1和s2.
char*strcpy(char*s1,constchar*s2);
将字串s1复制到字串s2.
双精度数学函数
单精度数学函数
说明
doubleacos(doublex);
floatacosf(floatx);
反余弦函数.
doubleasin(doublex);
floatasinf(floatx);
反正弦函数.
doubleatan(doublex);
floatatanf(floatx);
反正切函数.
doubleatan2(doubley,doublex);
floatatan2f(floaty,floatx);
参数y/x的反正切函数值.
doubleceil(doublex);
floatceilf(floatx);
传回大於或等於参数x的最小double整数.
doublecos(doublex);
floatcosf(floatx);
余弦函数.
doublecosh(doublex);
floatcoshf(floatx);
hyperbolic余弦函数,
cosh(x)=(e^x+e^(-x))/2.
doubleexp(doublex);
floatexpf(floatx);
自然数的指数e^x.
doublefabs(doublex);
floatfabsf(floatx);
传回参数x的绝对值.
doublefloor(doublex);
floatfloorf(floatx);
传回小於或等於参数x的最大double整数.
doublefmod(doublex,doubley);
floatfmodf(floatx,floaty);
如果y为非零值,传回浮点数x/y的余数.
doublefrexp(doubleval,int_far*exp);
floatfrexpf(floatval,int_far*exp);
将参数x的浮点数分解成尾数和指标,x=m*2^exp,传回m值的尾数,将指数存入参数exp.
doubleldexp(doublex,intexp);
floatldexpf(floatx,intexp);
x乘以2的n次方是x*2^n.
doublelog(doublex);
floatlogf(floatx);
自然对数logx
doublelog10(doublex);
floatlog10f(floatx);
十为底的对数log10x.
doublemodf(doubleval,double*pd);
floatmodff(floatval,float*pd);
将浮点数x分解成整数和小数部分,传回小数部分,将整数部分存入参数ip.
doublepow(doublex,doubley);
floatpowf(floatx,floaty);
传回参数x为底,参数y的次方值x^y.
doublesin(doublex);
floatsinf(floatx);
正弦函数.
doublesinh(doublex);
floatsinhf(floatx);
Hyperbolic正弦函数,
sinh(x)=(e^x-e^(-x))/2.
doublesqrt(doublex);
floatsqrtf(floatx);
参数x的平方根.
doubletan(doublex);
floattanf(floatx);
正切函数.
doubletanh(doublex);
floattanhf(floatx);
hyperbolic正切函数,
tanh(x)=(e^x-e^(-x))/(e^2+e^(-x)).
三、运动控制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PLC 语言 编程