PLC的C语言编程Word文件下载.docx

上传人:b****6 文档编号:17316671 上传时间:2022-12-01 格式:DOCX 页数:13 大小:200.96KB
下载 相关 举报
PLC的C语言编程Word文件下载.docx_第1页
第1页 / 共13页
PLC的C语言编程Word文件下载.docx_第2页
第2页 / 共13页
PLC的C语言编程Word文件下载.docx_第3页
第3页 / 共13页
PLC的C语言编程Word文件下载.docx_第4页
第4页 / 共13页
PLC的C语言编程Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

PLC的C语言编程Word文件下载.docx

《PLC的C语言编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《PLC的C语言编程Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。

PLC的C语言编程Word文件下载.docx

●参数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)).

三、运动控制

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1