【word】 利用PComm动态链接库实现上位机与昆腾PLC通讯
利用PComm动态链接库实现上位机与昆腾
PLC通讯
2011年第4期东瞧晨斜技1O7
利用PComm动态链接库实现上位机与昆腾PLC通讯
王冬,范荣广
(兖矿集团公司南屯煤矿选煤厂,山东济宁273515)
摘要该文介绍了利用PComm动态链接库开发基于ModbusRTU
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
的昆腾PLC通讯程序.可据此开发基于Modbus协议的控制系统人机
界面或数据库的应用.
关键词PLCModbus协议RTU方式CRC校验PComm
中国分类号TN915.4文献标识码B
施耐德昆腾系列PLC是从Modicon公司的984系
列PLC发展而来,PLC通讯协议采用的是Modbus通讯
协议.Modbus通讯协议是Modicon公司为PLC与主
机之间的通讯而发明的串行通讯协议,因其开放性而
被广泛采用,已经成为一个通用的工业标准.通过该
协议,不同厂商生产的控制设备可以进行工业网络互
联,从而实现集散控制.
1Modbus协议简介
Modbus协议采用主从工作方式,允许一台主机和
多台从机通讯.每台从机地址由用户设定,地址范围
为1—255.通讯采用命令/应答方式,每一种命令帧都
对应一个应答帧.命令帧由主机发出,所有从机都将
收到报文,但只有被寻址的从机才会响应相应命令,并
返回相应的应答帧.
1.1Modbus协议通讯模式
Modbus通讯协议有两种传送方式:RTU方式和
ASCII方式.
(1)ASCII模式:当控制器设为在Modbus网络上
以ASCII模式通讯,在消息中的每个8Bit字节都作为
两个ASCII字符发送.
(2)RTU模式:当控制器设为在Modbus网络上以
RTU模式通讯,在消息中的每个8Bit字节包含两个
4Bit的十六进制字符.一般控制系统中PLC和智能仪
器仪表都是采用RTU模式通讯.本文例程采用的也
是RTU模式.
1.2ModbusRTU消息帧格式
使用RTU模式通讯时,传输的第一个域是设备地
址.可以使用的传输字符是十六进制的0—9,A—F.
典型的RTU模式的消息结构如表1所示.
2上位机和昆腾PLC通讯接口的软件设计与实现
2.1上位机与PLC接口
?收稿日期:2011—04—25
作者简介:王冬(1966一),男,山东肥城人,高级工程师,兖矿集团
南屯煤矿选煤厂从事洗煤,电气工程及自动化工作,副总工程师,曾
获国家煤炭工业局科技进步二等奖.
表1典型的RTU模式的消息结构
SrARTADDCSDATA~RC16(L):RC16(H)END
CRCCRC起始间隔设备地址功能代码数据域结束时间
高字节高字节
T1—12一Tl—T2一
8Bit8BItI1个8Bit8BIt8BitT3
一
T4’13一T4
Modbus协议可以采用RS一232,RS一485等异步
串行标准,适用于上位机对多台从机或智能仪表的系
统编程,数据采集和现场监控,可设置地址,波特率,数
据格式等通讯参数.本文程序设计中,上位机(计算
机)采用RS232接口,VisualBasic6.0环境,从机是昆
腾CPU43412A主机.
2.2PComm动态链接库函数和变量定义
PComm(文件是PComm.dl1)是MOXA公司提供的
通讯解决方案,也适合解决工业通讯问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
.比VB的
MSComm通讯控件具有更强的功能和效率.该动态链
接库结构在API(ApplicationProgramming.Interface)之
上,提供用户较为高级的接口,通过函数调用去启动操
作系统的低级函数,来实现串行通讯.
在VB环境下使用PComm动态链接库中,通讯函
数必须先引入函数声明,主要包括在模块PComm.bas
中,在工程中加入该模块即可.下面是VB中PComm
动态链接库在PComm.BAS模块中常量和函数定义
(仅对开发程序中用到的进行
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
)常量定义.
GlobalConstB9600=&HC,BIT8=&H3,Const
STOP_
I=&HO.P_EVEN=&H18
函数声明
DeclareFunctionsio—
openLib”PComm.dll”(By?
ValPortAsng)AsLong
DeclareFunctionsio—closeLib”PComm.dll”(By-
ValPortAsLong)AsLong
DeclareFunctionsio—ioctlLib”PComm.dll”(ByVal
PortAsLong,ByValbaudAsLong,ByValmodeAs
Long)AsLong
DeclareFunctionsio_readLib”PComm.dll”(ByVal
PortAsLong,ByRefbufAsByte,ByVallengthAsLong)
AsLong
DeclareFunctionsio”.dU”(._
writeLibPCommBy
108东撼爰斜技2011年第4期
ValPortAsLong,ByRefbufAsByte,ByVallengthAs
Long)AsLong
2.3CRC码计算生成函数定义
ModbusRTU模式中的错误校验采用的是CRC(循
环冗余码)
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
,下面是标准CRC码生成函数.
PublicFunctionCalCRCI6(data()AsByte,noAs
Integer,btLoCRCAsByte,btHiCRCAsByte)AsString
DimCLAsByte,CHAsByte,SaveHiAsByte,Save—
AsByte,RetumData(1)AsByte
Dimi,nagAsInteger
btHiCRC=&HFF:btLoCRC=&HFF:CL
=&H1:CH=&HA0
Fori=0To(no—I)
btHiCRC=btHiCRCXordata(i)每一个数据与
CRC寄存器进行异或
ForFlag0To7
SaveHi=btL0CRC:SaveLo=btHiCRC
btL0CRC=blLDCRC2:btHiCRC=btHiCRC
2移位
If((SaveHiAnd&H1)=&HI)Then如果高位
字节最后一位为1’
btHiCRC=btHiCRCOr&H80则低位字节右移后
前面补1
EndIf否则补0
?((SaveLoAnd&H1)=&HI)Then如果LSB
为l,与多项式码进行异或
btkIcRC=btLoCRCXorCH:btHiCRC
=btHiCRCXorCL
EndIf
NextFlag
Nexti
RetumData(0)=btHiCRC:ReturnData(I)
=bt__IoCRC:CalCRC16=ReturnData
EndFunetion
2.4读,写昆腾PLC寄存器数据
查询信息规定了要读的寄存器起始地址及数量.
寄存器寻址起始地址为0OOO,寄存器I,16所对应的
地址分别为0—15,也就是说,400001对应的寻址起始
地址为oooo(这是ModbusRTU模式中’03’功能对应
的寻址方式).下面是具体实现的程序代码说明(可
将代码设计在CommandBu~on的Click事件中):
(1)打开计算机的串口1并定义通讯参数.
DimModeAsLong,letAsLong
ret=do_open(1):Mode=P_EVE~OrBrr8Or
STOP_
I
ret=sio—ion(1,B9600,Mode)’计算机与PLC
通讯参数:9600,e,8,1
读取保持寄存器的数据,从机返回数据以十六进
制显示在Textl文本框中.
DimdenAsLong,RstrAsString,CrcAsString
Dimbuf(0To511)AsByte,Tbuf(8)AsByte,bt-
CRCHiAsByte,btCRCLoAsByte
Tbuf(0)=&I-I2’目标站号
rh~f(1)=&H3’功能码
Tbuf(2)=&H0’400001地址(ooH)高字节
Tbuf(3)=&H0’400001地址(OOH)低字节
uf(4)=&HO’读取个数高字节
Tbuf(5)=&H1读取个数低字节
Crc=CalCRCl6(Tbuf,6,btCRCLo,btCRCHi):
Tb.f(6)=btCRCHi:11)uf(7)=btCRCLo
Callsio_
write(1,Tbuf(0),UBound(Tbllf))
TimeDelay50’延时(利用GetTickCount编的延时
过程)
den=sio_read(1,buf(0),512)”返回数据
Fori=0Toden一1:Rstr=Rstr+Hex$(bur
(i))+”“:Next
rext1.Text=““:Text1.Text=Rstr
(2)写数据到PLC的保持寄存器.
DimTbuf(8)AsByte,btCRCHiAsByte,btCRCLo
ASByte,bur(0To511)AsByte
DimCrcAsString,rlenAsLong
Th.f(0)=&H2’目标站号
Tbuf(1)=&H6’功能码
Tbuf(2)=&H0’400002地址(00H)高字节
Tbuf(3)=&HI’400002地址(O1H)低字节
Tbuf(4)=&H0’写数高字节
IIf(5)=&H3’写数低字节03H
Cre=CalCRcl6(Tbuf,6,btCRC【o,btCRCHi):
uf(6)=btCRCHi:Tbuf(7)=btCRCLo
Callsio_
write(1,Tbuf(0),UBound(Tbuf)):Time—
Delay50
(3)关闭计算机的串口1:sio_close(1).
3结语
上述介绍的上位机与昆腾PLC通讯接口程序的设
计方法,可在没有组态软件的情况下自行开发基于
Modbus协议的人机界面,信息监控系统,也可实现上
位机对其他基于Modbus协议的PLC或自动化仪表的
监控.同时,可将采集PLC或自动化仪表的数据存人
数据务器中的数据库,从而实现工控系统与管理系统
的信息集成.
参考文献:
[I]范逸之.陈立元VisualBasic与RS一232串行通信控{II.清华大
学出版社,2002.