单片机与变频器通讯过程中,单片机始终处于主动地位。单片机与变频器通讯时发送的指令数据格式分两类:一是读数据指令,一是写数据指令。笔者以写数据指令为例,用FranklinC51语言编写了写指令的函数WriteSpwm(),将一条控制指令按功能分为几部分,作为函数的输入参数。该函数返回变频器接收信息代码。
函数格式:ucharWriteSpwm(ucharhead,uintcommand,uintCodeData,uchard)输入参数:指令代码,指令数据,数据长度。
返回值:OK,NO.如果通讯有错误,则错误代码存放在全局变量数组元素Rec<2>中。
uchar为自定义的无符号字符型数据,uint为自定义的无符号整型数据。指针head指向要发送的指令头(字符串)首地址,即ASCII码"053030",30是阿拉伯数字0的ASCII码,00是通讯时所用变频器的站号,可根据实际情况灵活设置。
Command为要发送的指令代码,CodeData为指令代码对应的数据。
在通讯控制过程中,考虑到变频器运行频率需随时改变,因此CodeData设定为无符号整型数据,可直接将运行频率作为函数入口参数,使该模块具有较好的通用性。
该模块源程序如下:……
∥"command"isthecommandcodeintwobytles.eg,"FE","FD".
∥"CodeData"istheparameterwiththecommandcode.
∥"d"isthelengthofddata(thatisthenumberofbytles)ucharWriteSpwm(ucharhead,uintcommand,uintCodeData,uchard){ uchark1;k1=0;psum=0;∥校验和初始值为0 WSendChar(head);∥发送指令头WSendNum(command,2);∥发送指令代码WSendNum(CodeData,d);∥发送指令代码对应数据WSendNum(psum,2);∥发送校验和do{ while(RI==0);RI=0;∥接收应答数据,收完一个字节数据后,RI置零rec=SBUF;∥接收的数据送到数组中保存k1++;∥指向下一个数组元素}while((rec<0>!=0x06)(k1<4));∥应答数据表明通讯有误,则继续接收错误代码,通讯正确,停止接收,跳出循环if(rec<0>==0x06)∥如果通讯正确,函数返回值为OK,OK值等于1 {ReturnValue=OK;} else∥通讯不正确,函数返回值为NO,NO值等于0 {ReturnValue=NO;} return(ReturnValue);} 4结语
本文关键字:变频器 变频器基础,变频技术 - 变频器基础
上一篇:变频器传递函数的计算