Modbus通讯协议在阀门电动装置测试系统中的应用(3)
发布时间:2021-06-05
发布时间:2021-06-05
EDI技术在现代物流管理中的应用
第4期
邵志学等:Modbus通讯协议在阀门电动装置测试系统中的应用
EndIfEndFunction
2.2.2 下位机ARM2200系列单片机通讯程序设计
39
下位机利用软件ADS1.2进行编程,此软件是专为ARM单片机开发的,类似于C语言,有很好的应用性。此软件中设计的对ARM单片机进行串口初始化、中断允许、发送数据和接收数据程序代码如下:i=发送开始字符(0x20)==0);
U0THR=cmdid; //发送命令字符
while((U0LSR&0x20)==0);
U0THR=datanum; //发送的字节数目
while((U0LSR&0x20)==0);
for(i=0;i<datanum;i++) {U0THR=dataptr[i];
PublicFunctionfunCRC16Verify(mArrModBus()AsByte)AsBoolean
DimCRC16LoAsByte,CRC16HiAsByte ′CRC寄存器DimCLAsByte,CHAsByte,SaveHiAsByte,SaveLoAsByteDimI,JAsInteger
CRC16Lo=&HFF:CRC16Hi=&HFFCL=&H1:CH=&HA0
ForI=0ToUBound(mArrModBus)
CRC16Lo=CRC16LoXormArrModBus(I) ′每个数据与CRC寄存器进行异或ForJ=0To7
SaveHi=CRC16Hi:SaveLo=CRC16LoCRC16Hi=CRC16Hi\2 ′高位右移一位CRC16Lo=CRC16Lo\2 ′低位右移一位
If((SaveHiAnd&H1)=&H1)Then ′如果高位字节最后
} //发送数据
while((U0LSR&0x20)==0);
U0THR=0x2a; /33结束3/
while((U0LSR&0x20)==0); //等待数据发送
…
数据接收程序:
if(0x04==(U0IIR&0x0F))rcvnew=1; //设置接收
到新的数据标志 for(i=0;i<5;i++)
{rcvbuf[i]=U0RBR; //读取FIFO的数据,并清除中断标志 }
VICVectAddr=0x00; //中断处理结束
…
3 结束语
一位为1
CRC16Lo=CRC16LoOr&H80 ′则低位字节右移后前面补1
EndIf ′否则自动补0
If((SaveLoAnd&H1)=&H1)Then ′如果LSB为1,则与
该系统应用在对阀门电动装置进行质量检测的生产过程,应用表明:该通讯网络部分运行平稳,数据传输误码率低,传输速度符合要求,效率高,操作简单,组网方便,满足生产现场的数据检测和控制要求。该系统可广泛应用于高精度的工业测控、数据采集等领域中。参考文献:
[1] 陈柏金.通过串行口访问Modbus现场控制网络.微计算机信息,
2003,19(1):52-54.
[2] 阳宪惠.现场总线技术及其应用.北京:清华大学出版社,1999.[3] 潘洪跃.基于Modbus协议通讯的设计与实现.计量技术,2002,
(4):35-36.
[4] 卢文俊.基于Modbus协议的控制器远程监控系统.电力自动化设
多项式码进行异或
CRC16Hi=CRC16HiXorCHCRC16Lo=CRC16LoXorCLEndIfNextJNextI
If0=CRC16LoAnd0=CRC16HiThen
funCRC16Verify=False ′校验正确时候函数返回假值Else
funCRC16Verify=True ′校验不正确时候函数返回真值
备,2003(6):54-56.
[5] 赵作鹏.Delphi环境中Modbus通讯协议的开发和应用.煤矿机电,
2003(4):35-36;53.
),硕士研究生,从事电力系统及其自动化的研究。作者简介:邵志学(1983—