利用Winscok控件实现VB及PLC的以太网通信.docx
《利用Winscok控件实现VB及PLC的以太网通信.docx》由会员分享,可在线阅读,更多相关《利用Winscok控件实现VB及PLC的以太网通信.docx(13页珍藏版)》请在冰豆网上搜索。
利用Winscok控件实现VB及PLC的以太网通信
利用Winscok控件实现VB与PLC的以太网通信
关键词:
VB MODBUS/TCP协议 可编程控制器 以太网
1、 引言
在网络的各个层上,随着自动化和控制工程师需要与网络打交道的时机越来越多,联网的愿望和需要也正在逐渐高涨。
而且,在监控和数据采集应用中,大多数工程师已将以太网协议应用于数据采集与监视控制系统〔SCADA〕和工厂的诊断、测试及维护。
如何简便地实现与PLC的交互已经成为众多厂商新的竞争战场。
由此产生了人机界面及各种组态软件产品,这些产品的出现简化了对PLC的控制、操作,使PLC的应用更加方便。
但也有其共同的缺点,价格普遍偏高和可二次开发性较差。
VB作为“原始〞的编程语言,兼具了上述两方面的优势。
本文结合一个简单的案例来粗略讨论如何通过VB实现PC机与PLC的以太网通信问题。
2、以太网通信的根本概念
2.1以太网的标准
以太网是一种局域网。
早期标准为IEEE802.3,数据链路层使用CSMA/CD,10Mb/s速度物理层有:
(1)10Base5粗同轴电缆,RG-8,一段最长为500m。
(2)10Base2细同轴电缆,RG-58,一段最长为185m。
(3)10BaseT双绞线,UTP或STP,一段最长为100m。
2.2工业以太网与商用以太网的区别
什么是工业以太网?
技术上,它与IEEE802.3兼容,故从逻辑上可把商用网和工业网看成是一个以太网,而用户可根据现场情况,灵活装配自己的网络部件。
但从工业环境的恶劣和抗干扰的要求,设计者希望采用市场上可找到的以太网芯片和媒介,兼顾考虑下述工业现场的特殊要求:
首先要考虑高温、潮湿、振动。
二是对工业抗电磁干扰和抗辐射有一定要求,如满足EN50081-2、EN50082-2标准,而办公室级别的产品未经这些工业标准测试,表1列出了一些常用工业标准。
为改善抗干扰性和降低辐射,工业以太网产品多使用多层线路板或双面电路板,且外壳采用金属如铸铝屏蔽干扰。
三是电源要求,因集线器、交换机、收发器多为有源部件,而现场电源的品质又较差,故常采用双路直流电或交流电为其供电,另外考虑方便安装,工业以太网产品多数使用DIN导轨或面板安装。
四是通信介质选择,在办公室环境下多数配线使用UTP,而在工业环境下推荐用户使用STP(带屏蔽双绞线)和光纤。
2.3使用TCP/IP协议的原因及其概述
最主要的一个原因在于它能使用在多种物理网络技术上,包括局域网和广域网技术。
TCP/IP协议的成功,很大程度上取决于它能适应几乎所有底层通信技术。
20世纪80年代初,先在X.25上运行TCP/IP协议;而后又在一个拨号语音网络(如系统)上使用TCP/IP协议,又有TCP/IP在令牌环网上运行成功;最后又实现了TCP/IP远程分组无线网点与其他Internet网点间TCP/IP通信。
所以TCP/IP协议极其灵活,具备连接不同网络的能力。
另外,使用TCP/IP也简化了OSI模型,因为它省略了表示层和会话层。
如果现在把以太网的物理层和数据链路层加到OSI模型,就构成了基于以太网的TCP/IP网,如图1所示。
用以太网实现TCP/IP也是经济的一种方式。
IP是Internet最根本的协议。
IP是面向报文的协议,它独立处理每个报文包,每个报文包必须含有完整的寻址信息。
IP报文包的格式如图2所示。
图2 IP报文包的格式
IP地址的类型共有4种(如图3所示):
A类用于处理超大型网络,最多16387064个主机(1~126);B类网络最多可有64516个主机(网络地址的第一段为128~191);C类用于小型网络,最多可有254个主机(网络地址的第一段为192~223);D类用于多点播送,用于多目的信息的传输。
全零(“0.0.0.0〞)地址对应于当前主机,全1地址(“255.255.255.255〞)是当前子网的播送地址。
TCP是基于传输层的协议,协议文件可从RFC793得到,使用广泛,面向连接的可靠协议。
它能把报文分解为数段,在目的站再重新装配这些段,支持重新发送未被收到的段,提供两台设备间的全双工连接,允许它们高效地交换大量数据。
TCP使用滑动窗口协议来高效使用网络。
由于TCP很少干预底层投递系统的工作,它适应各种投递系统,且提供流量控制,能使各种不同速率的系统进展通信。
报文段是TCP所使用的根本传输单元,用于传输数据或控制信息。
3、MODBUS数据帧格式
在TCP/IP以太网上传输,支持EthernetII和802.3两种帧格式。
图3所示,ModbusTCP数据帧包含报文头、功能代码和数据3局部。
4、 MODBUS功能代码
4.1 3种类型
(1)公共功能代码(如表2所示):
已定义好的功能码,保证其唯一性,由Modbus.org认可。
(2)用户自定义功能代码有两组,分别为65~72和100~110,无需认可,但不保证代码使用的唯一性。
如变为公共代码,需交RFC认可。
(3)保存的功能代码,由某些公司使用在某些传统设备的代码,不可作为公共用途。
表2 Modbus常用公共代码功能
4.2功能代码划分:
按应用深浅,可分为3个类别。
〔1〕类别0,对于客户机/效劳器最小的可用子集:
读多个保持存放器(fc.3);写多个保持存放器(fc.16)。
〔2〕类别1,可实现根本互易操作的常用代码:
读线圈(fc.1);读开关量输入(fc.2);读输入存放器(fc.4);写线圈(fc.5);写单一存放器(fc.6)。
〔3〕类别2,用于人机界面、监控系统的例行操作和数据传送功能:
〔4〕强制多个线圈(fc.15);读通用存放器(fc.20);写通用存放器(fc.21);屏蔽写存放器(fc.22);读写存放器(fc.23)。
5、VB的根本概念
VB〔VisualBasic〕是面向对象的程序设计语言,用它来开发Windows操作系统下的应用程序,它提供了很多接口成员,对象、属性、事件、方法就是4个重要的接口,VB提供了许多常用的控件。
5.1卷标控件
卷标控件如图4〔a〕所示,该控件专用于显示文字、数字用,显示如图4(b)所示。
5.2按钮控件
按钮控件如图5〔a〕所示,该控件使用率很高,提供一个供系统用户操作用的按钮,如图5〔b〕所示。
6、基于Winsock控件的TCP/IP以太网通信
要完成VB与PLC等设备的以太网通信要用到Winsock控件,在此有必要对该控件作较详细的说明。
Winsock是一个ActiveX控件,需要要手动添加许多工程,其步骤如下:
〔1〕选择菜单的【工程】。
〔2〕选择【部件】。
〔3〕在弹出的对话框中做如图6的选择。
图6对话框界面
〔4〕如图7所示,在部件选项卡就会出现Winsock控件。
7、Winsock控件的根本属性
此控件对于用户在运行时不可见,提供了一个简单的途径访问TCP及UDP网络效劳而无需了解底层细节,使用时你只需设置属性、在恰当的时候调用它提供的方法即可。
主要属性有:
BytesReceived:
返回当前缓冲区中的字节数量,我们可以使用GetData方法以接收数据。
只读且设计时不可用。
LocalHostName:
返回本机名字符串,设计时不可用。
LocalIP:
返回以(xxx.xxx.xxx.xxx)格式表达的IP地址串。
设计时不可用,运行时只读。
LocalPort:
本机使用接收端口可读写,设计时可用,Long型。
对于客户,如果无需指定端口,那么用端口0发送数据。
在此情况下,控件将随机选择一个端口。
在一个连接确定后,为TCP的端口。
对于效劳器,指用于监听的端口。
如设置为0,那么用随机数。
在调用Listen方法后,该属性自动包含用到的端口。
端口0总是用于在两计算机间建立动态连接。
客户希望通过端口0获得一个随机端口以〞回调〞连接效劳器。
Protocol:
套接字类型,为TCP或UDP二者之一,缺省为TCP类型。
设置为sckTCPProtocol表示TCP协议sckUDPProtocol表示UDP协议。
在此属性被重置之前需用Close方法关闭之。
RemoteHost:
发送或接收数据的主机,你可提供主机名如:
FTP:
//ftp.microsoft.,或一IP地址串,例如“100.0.1.1〞。
RemoteHostIP:
远程主机的IP地址。
对于客户程序,在连接确定后使用Connect方法,此属性包含远程主机的IP名串。
对于效劳器程序,在引入连接需求后(ConnectionRequest事件),此属性包含IP串。
当使用UDP套接字,在DataArrival事件发生后,此属性为发送UDP数据的机器IP地址串。
RemotePort:
连接套接字端口值。
例如通常应用使用80端口,FTP那么使用21。
State:
控件的状态,只读且设计时不可用。
可为以下值:
常量描述
sckClosed0缺省值,关闭套接字
sckOpen1翻开套接字
sckListening2正监听端口
sckConnectionPending3正在进展未定的连接
sckResolvingHost4正解析主机地址
sckHostResolved5主机地址已解析
sckConnecting6正在连接
sckConnected7已连接
sckClosing8连接关闭
sckError9错误
8、VB与PLC基于MODBUSTCP的以太网通信的实现
以下举例说明如何实现VB与PLC的以太网通信。
(1)控制要求:
用交替型按钮控制Y0,并用指示灯显示Y0状态〔绿色为运行,红色为停顿〕;能够对D100、D200两个存放器进展数值写入与读出的操作。
〔2〕实现思路:
同样Y0的地址分别为H0500。
写入FF00为ON,0000为OFF,按功能码05操作;D100,D200地址分别为H1064,H10C8,按功能码03操作即可实现存放器的读功能,按功能码10H操作即可实现存放器的写功能。
〔3〕VB接口的设计如图8所示
在界面中用按钮控制Y0的ON/OFF及D100、D200数据的写与读;用shape组件做指示灯,指示Y0的ON/OFF状态;用Winsock控件实现PLC与VB的通信。
〔1〕实现功能的代码构成
〔2〕建立网络连接
PrivateSubCommand1_Click()
Winsock1.Close
Winsock1.ConnectText1,502
Label2.Caption="Version:
1.0:
"+Format(Now,"mmmddyyyyHh:
Nn:
Ss")
Command1.Enabled=False
Command1.Enabled=False
Text1.Enabled=False
EndSub
〔2〕、Y0的ON/OFF控制
PrivateSubComd_send_Click()
OnErrorGoToErrProc
Dimsendstr(14)AsByte
sendstr(0)=&H0'交换识别号高字节,通常为0
sendstr
(1)=&H0'交换识别号低字节,通常为0
sendstr
(2)=&H0'协议识别号高字节,为0
sendstr(3)=&H0'协议识别号低字节,为0
sendstr(4)=&H0'字节长度高字节
sendstr(5)=&H9'以下字节长度低字节
sendstr(6)=&HFF'单元识别号,确省为255
sendstr(7)=&H5'写一个线圈命令代码
sendstr(8)=&H0 '写线圈的起始地址高字节
sendstr(9)=&H1'写线圈的起始地址低字节
sendstr(10)=a'=FF翻开线圈,=00关闭线圈
sendstr(11)=&H0'
DimaStrAsString
Dimi,jAsInteger
Fori=0To11
aStr=aStr&Chr(sendstr(i))
Next
Winsock1.SendDataaStr
ExitSub
ErrProc:
MsgBox"传输数据失败",vbCritical,"网络传输"
EndSub
〔3〕线圈状态显示及存放器读出数据显示
PrivateSubwinsock1_DataArrival(ByValbytesTotalAsLong)
Dimstrdata()AsByte
Dimi,jAsInteger
DimsAsString
Dims1AsString
DimIOAsByte
i=Winsock1.BytesReceived
ReDimstrdata(i)
Winsock1.GetDatastrdata,vbByte,i
Forj=0Toi-1
s=s+Hex(strdata(j))
Next
IfsLike"*5*"Then
s1=Mid(s,12,2)
Ifs1="FF"Then
IO=1
a=&H0
Else
IO=0
a=&HFF
EndIf
IfIO=1Then
Shape1.FillColor=RGB(0,255,0)'green
Labl3.Caption="IO点接通"
Else
Shape1.FillColor=RGB(255,0,0)'red
Labl3.Caption="IO点断开"
EndIf
EndIfIfsLike"*3*"Then
Text3.Text=Text3.Text+Mid(s,11)+""
EndIf
〔4〕、读多个存放器数据
EndSubPrivateSubCommand4_Click()
OnErrorGoToErrProc
Dimstr(12)AsByte
str(0)=&H0'交换识别号高字节,通常为0
str
(1)=&H0'交换识别号低字节,通常为0
str
(2)=&H0'协议识别号高字节,为0
str(3)=&H0'协议识别号低字节,为0
str(4)=&H0'字节长度高字节
str(5)=&H6'以下字节长度低字节
str(6)=&HFF'单元识别号,确省为255
str(7)=&H3'读多个存放器命令代码
str(8)=&H10 '读数据的起始地址高字节
str(9)=&HC8'读数据的起始地址低字节
str(10)=&H0'数据长度高字节
str(11)=&H1'数据长度低字节
DimbStrAsString
DimiAsInteger
Fori=0To11
bStr=bStr&Chr(str(i))
Next
Winsock1.SendDatabStr
ExitSub
ErrProc:
MsgBox"传输数据失败",vbCritical,"网络传输"
EndSub
D100存放器的写入操作类似,由于篇幅所限其他代码在此就不再赘述。
9.结速语
工业以太网是工业自动化网络开展的必然趋势,为了对工业设备进展实时的管理与监控,工业以太网设备大多都支持远程管理,而且各厂商业都有各自的网络管理软件以提供对网络设备进展友好的图形化界面操作。
管理员还可以通过远程telnet或web界面的方式直接对设备进展调试。
完善的兼容性,可靠的稳定性,对恶劣环境的适应性,强大的冗余能力和方便的可管理性,是人们越来越多地在网络设计过程中采用工业以太网的原因,而这也势必成为工业以太网在越来越多的网络环境里大显身手的重要契机。
借台达即将推出以太网模块之际撰写此文,希望能够为其以太网模块的推广提供一些帮助。
由于本人水平有限本文编写难免会有错漏之处,也请读者给予批评指正。