ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:200.96KB ,
资源ID:4391293      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4391293.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PLC的C语言编程.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PLC的C语言编程.docx

1、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新增功能,支持用户在XCP Pro编程软件中利用C语言编写功能块,在需要的地方进行调用,其最大的优点是支持几乎所有的C语言函数,增强了程序的保密性,同时由于可进行多处调用和不同文件的调用,大大提高了编程人员的效率。2-2、指令形式2、出现如下对话框,填写所要编辑函数的信息。3、在新建完成后,会出现下面的

2、编辑画面。参数传递方式: 在梯形图调用时,传入的D和M,即为W和B的起始地址。如上图 D0,M0开始,则W0为D0,W10为D10,B0为M0, B10为M10。如梯形图中使用的参数为D100,M100,则W0为D100,B0为M100。因此,字与位元件的首地址由用户在PLC程序中设定。参数W: 表示字软元件,使用时按数组使用,如W0=1;W1=W2+W3;在程序中可按照标准C规范使用。参数B: 表示位软元件,使用时也按数组使用,支持位置1和位清零,如B0=1;B1=0; 以及赋值,如B0=B1。双字运算: 在W前加个D,如DW10=100000,表示给W10W11合成的双字赋值。浮点运算:支

3、持在函数中定义浮点变量,以及进行浮点运算。函数库:用户功能块可以直接使用函数库中定义的函数和常量,函数库中包含的函数和常量见后附部分。支持的其他数据类型:BOOL; /布尔量INT8U; /8位无符号整数INT8S; /8位有符号整数INT16U /16位无符号整数INT16S /16位有符号整数INT32U /32位无符号整数INT32S /32位有符号整数FP32; /单精度浮点FP64; /双精度浮点 预定义的宏:#define true 1#define false 0#define TRUE 1#define FALSE 02-4、函数的导入、导出 1、导出(1)功能:将函数导出为文

4、件,供其他PLC程序导入用。(2)导出方式a)可编辑:将源代码也导出,并保存为文件再次导入后,可再次编辑b)不可编辑:源代码不导出再次导入后只可使用,无法编辑2、导入功能:导入已存在的函数功能块文件,供该PLC程序使用。 选中函数功能块,右键点击菜单从硬盘导入函数功能块文件,选择相应文件,按确定即可。2-5、功能块的编辑例:将PLC中寄存器D0,D1相加,然后将值赋给D2;(1)首先在“工程”工具栏里,新建一个函数功能块,在这里我们把它命名为ADD_2,并且编辑C语言程序。(2)编辑完之后,点击编译;、根据编译信息列表内所显示的信息,我们可以查找修改C语言程序里的语法漏洞。在这里比较容易的发现

5、程序中W2=W0+W1的后面缺少符号“;”。当我们将程序修改后,再次进行编译。从列表信息里可以确认,在程序里面并没有语法错误。(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-bit byte 的讯息与低位元16-bit CRC寄存器异或(Exc

6、lusive OR)内。(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:校验数据的字节个数,D1D5:校验数据的内容。如下:下载到PLC里,然后运行,使M0置

7、 ON,通过自由监控就会发现寄存器D6 ,D7内分别存入了CRC校验值的高位与底位。2-7、应用要点使用函数功能块的PLC程序,上传后该函数功能块无法上传,将出现一个未知指令错误。一个函数功能块文件内部,可以写多个子函数,进行相互调用。多个函数功能块文件彼此独立,不能相互调用各自拥有的函数。函数功能块文件可以调用浮点,算术等C语言库函数,如sin,cos,tan。2-8、附函数表默认函数库常量名数据说明_LOG2(double)0.6931471805599453094172321214582的对数_LOG10(double)2.30258509299404590109361379290931

8、0的对数_SQRT2(double)1.41421356237309504880168872421根号2_PI(double)3.1415926535897932384626433832795PI_PIP2(double)1.57079632679489661923132169163975PI/2_PIP2x3(double)4.71238898038468985769396507491925PI*3/2字符串函数说明void * memchr(const void *s, int c, size_t n);传回s位置开始前n个字元第一次出现字元c的位置指标.int memcmp(const

9、void *s1, const void *s2, size_t n);比较位置s1和位置s2的前n个字元.void * memcpy(void *s1, const void *s2, size_t n);从位置s2复制n个字元到位置s1,传回s1.void * memset(void *s, int c, size_t n);取代s位置开始前n个字元成为字元c,传回位置指标s.char * strcat(char *s1, const char *s2);连结字串ct到字串s之后.char * strchr(const char *s, int c);传回字元c第一次出现在字串s位置的指标

10、.int strcmp(const char *s1, const char *s2);比较字串s1和s2.char * strcpy(char *s1, const char *s2);将字串s1复制到字串s2.双精度数学函数单精度数学函数说明double acos(double x);float acosf(float x);反余弦函数.double asin(double x);float asinf(float x);反正弦函数.double atan(double x);float atanf(float x);反正切函数.double atan2(double y, double

11、x);float atan2f(float y, float x);参数y/x的反正切函数值.double ceil(double x);float ceilf(float x);传回大於或等於参数x的最小double整数.double cos(double x);float cosf(float x);余弦函数.double cosh(double x);float coshf(float x);hyperbolic余弦函数,cosh(x)=(ex+e(-x)/2.double exp(double x);float expf(float x);自然数的指数ex.double fabs(do

12、uble x);float fabsf(float x);传回参数x的绝对值.double floor(double x);float floorf(float x);传回小於或等於参数x的最大double整数.double fmod(double x, double y);float fmodf(float x, float y);如果y为非零值,传回浮点数x/y的余数.double frexp(double val, int _far *exp);float frexpf(float val, int _far *exp);将参数x的浮点数分解成尾数和指标,x = m*2exp,传回m值的

13、尾数,将指数存入参数exp.double ldexp(double x, int exp);float ldexpf(float x, int exp);x乘以2的n次方是x*2n.double log(double x);float logf(float x);自然对数logxdouble log10(double x);float log10f(float x);十为底的对数log10x.double modf(double val, double *pd);float modff(float val, float *pd);将浮点数x分解成整数和小数部分,传回小数部分,将整数部分存入参数

14、ip.double pow(double x, double y);float powf(float x, float y);传回参数x为底,参数y的次方值xy.double sin(double x);float sinf(float x);正弦函数.double sinh(double x);float sinhf(float x);Hyperbolic正弦函数,sinh(x)=(ex-e(-x)/2.double sqrt(double x);float sqrtf(float x);参数x的平方根.double tan(double x);float tanf(float x);正切函数.double tanh(double x);float tanhf(float x);hyperbolic正切函数,tanh(x)=(ex-e(-x)/(e2+e(-x).三、运动控制

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

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