基于Winsock控件的TCPIP以太网通信.docx
- 文档编号:1043110
- 上传时间:2022-10-16
- 格式:DOCX
- 页数:12
- 大小:40.88KB
基于Winsock控件的TCPIP以太网通信.docx
《基于Winsock控件的TCPIP以太网通信.docx》由会员分享,可在线阅读,更多相关《基于Winsock控件的TCPIP以太网通信.docx(12页珍藏版)》请在冰豆网上搜索。
基于Winsock控件的TCPIP以太网通信
基于Winsock控件的TCP/IP以太网通信
要完成VB与PLC等设备的以太网通信要用到Winsock控件,在此有必要对该控件作较详细的说明。
Winsock是一个ActiveX控件,需要要手动添加许多项目,其步骤如下:
(1)选择菜单的【工程】。
(2)选择【部件】。
(3)在弹出的对话框中做如图6的选择。
(4)如图7所示,在部件选项卡就会出现Winsock控件。
图7Winsock控件
7、Winsock控件的基本属性
此控件对于用户在运行时不可见,提供了一个简单的途径访问TCP及UDP网络服务而无需了解底层细节,使用时你只需设置属性、在恰当的时候调用它提供的方法即可。
主要属性有:
BytesReceived:
返回当前缓冲区中的字节数量,我们可以使用GetData方法以接收数据。
只读且设计时不可用。
LocalHostName:
返回本机名字符串,设计时不可用。
LocalIP:
返回以(,运行时只读。
LocalPort:
本机使用接收端口可读写,设计时可用,Long型。
对于客户,如果无需指定端口,则用端口0发送数据。
在此情况下,控件将随机选择一个端口。
在一个连接确定后,为TCP的端口。
对于服务器,指用于监听的端口。
如设置为0,则用随机数。
在调用Listen方法后,该属性自动包含用到的端口。
端口0总是用于在两计算机间建立动态连接。
客户希望通过端口0获得一个随机端口以”回调”连接服务器。
Protocol:
套接字类型,为TCP或UDP二者之一,缺省为TCP类型。
设置为sckTCPProtocol表示TCP协议sckUDPProtocol表示UDP协议。
在此属性被重置之前需用Close方法关闭之。
RemoteHost:
发送或接收数据的主机,你可提供主机名如:
,或一IP地址串,例如“
RemoteHostIP:
远程主机的IP地址。
对于客户程序,在连接确定后使用Connect方法,此属性包含远程主机的IP名串。
对于服务器程序,在引入连接需求后(ConnectionRequest事件),此属性包含IP串。
当使用UDP套接字,在DataArrival事件发生后,此属性为发送UDP数据的机器IP地址串。
RemotePort:
连接套接字端口值。
例如通常HTTP应用使用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所示
图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寄存器的写入操作类似,由于篇幅所限其他代码在此就不再赘述。
如同上面的内容所描述的,不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。
因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。
同时,当您在使用Winsock控件的过程中,这个控件不会显示在正在执行的窗体之中。
换句话说,Winsock控件是在后台运行的一种控件。
在执行过程之中,不会具有任何选用、可见的控件。
那么该如何使用Winsock控件呢?
它可以被应用在那些类型的应用程序之中呢?
以下所列出的内容,是这个控件可以应用的大致范围:
☺将客户端所收集的数据,传送给主机端。
☺点对点的文件传送。
☺聊天室应用程序。
☺电子公告栏。
☺voip(voiceoverTCP/ip)
因此,当您希望建立上述类型的应用程序之前,必须要学习如何选用适合的协议类型。
2-1如何选用适用的协议
当您准备开始使用Winsock控件之前,首要的工作是如何选择适用的协议类型。
如同先前所述的,您可以选择TCP协议或是UDP协议中的一种。
但是这两种协议的差异点在哪里呢?
虽然,它们同样可以使用在Internet或是Internet环境之中,但是主要的差异在于连接的状态。
以下是这两种协议的特点说明:
☺TCP协议是属于面向连接的协议。
所谓的面向连接协议是指——“在您可以交换数据之前,在两个终端设备之间必须连接成功”。
同时,在网络的基础理论之中,都会特别强调TCP具有错误核对的功能。
也就是说,在数据的传送过程中,如果发生错误或是数据无法传达对方时,TCP协议将会重复尝试着重新传送数据。
因此,核对以及重新传送的能力,因此起传输效率会比Internet协议或是巨域网络协议差一些(netBIEUI、IPX、AppleTalk)。
☺UDP协议是属于无面向连接协议。
这种协议为适用在两个设备之间,适用于信息传送以及数据的传输方面。
但是在使用时,必须注意当你将信息送出时,对方可能已经离线,因而无法接收到数据,而您也无法实时察觉到对方已经离线。
此外,使用UDP协议的最大数据传送量,完全取决于网络的传输量。
因此,此种协议较为适用于局域网络。
因此,当您在建立应用程序并且选用适当的协议之前,务必先依据应用程序使用的环境来选择适用的协议。
2-2设置协议
当已经选择好适当的协议之后,接下来,将必须要设置协议的类型。
在VisableBasic之
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Winsock 控件 TCPIP 以太网 通信