利用WinSock控件可以与通信对方建立连接,并通过传输控制协议(TCP)进行数据交换。
1.Winsock控件属性、方法及事件
(1)主要属性有
BytesReceived:返回当前缓冲区中接收到的字节数量。
LocalHostName:返回本机名字符串。
LocalIP:返回以(×××.×××.×××.×××)格式表达的IP地址串。
LocalPort:本机使用的地址,可读写,设计时可用,Long型。对于客户,如果不需要指定端口,则用端口0发送数据。在此情况下,控件将随机选择一个端口。在一个连接确定后,成为TCP的端口。对于服务器,指用于监听的端口。如设置为0,则用随机数。在调用Listen方法后,该属性自动包含用到的端口。端口0总是用于在两计算机间建立动态连接。客户希望通过端口0获得一个随机端口以“回调”连接服务器。
Protocol:套接字类型,为TCP或UDP二者之一,默认为TCP类型。设置为sckTCPProtocol表示TCP协议sckUDPProtocol表示UDP协议。在此属性被重置之前需用Close方法关闭之。
RemoteHost:发送或接收数据的主机,你可提供主机名,如:FTP://ftp.microsoft.com;或一IP地址串,例如100.0.1.1。
RemoteHostIP:远程主机的IP地址。对于客户程序,在连接确定后使用Connect方法,此属性包含远程主机的IP名串。对于服务器程序,在引入连接需求后(ConnectionRequest事件),此属性包含IP串。当使用UDP套接字,在DataArrival事件发生后,此属性为发送UDP数据的机器IP地址串。
RemotePort:连接套接字端口值。例如通常HTTP应用使用80端口,FTP则使用21,LM机的端口为502。
State:控件状态,只读。可为以下值:0(sckClosed),默认值,关闭;1(sckOpen),打开;2(sckListening),侦听;3(sckConnectionPending),连接挂起;4(sckResolvingHost),识别主机;5(sckHostResolved),已识别主机;6(sckConnecting),正在连接;7(sckConnected),已连接;8(sckClosing),同级人员正在关闭连接;9(sckError),错误。
(2)主要方法有
Accept:仅用于TCP服务器应用。这个方法用于在引入一个连接时响应的事件,即Connec-tionRequest事件。语法:object.AcceptrequestID,返回值:Void。响应事件时必须传递RequestID参数给此方法,以生成新的Socket实例用于实际的信息传输。
Bind:设定LocalPort及LocalIP用于TCP连接。当有多个协议适配器时使用。语法:object.BindLocalPort,LocalIP。LocalPort此端口用于连接,LocalIP生成连接的IP地址。如果已设定相关属性,可不必携带相关参数。在调用Listen方法之前调用此方法。
Close:在客户或服务器方关闭TCP连接。语法:object.Close。参数:无。返回值:Void。
GetData:接收存于可变类型中的数据块。返回值:Void。语法:object.GetDatadata,[type,][maxLen]。Data:接收数据的变量,如果空间不够,将设置为空。Type:可选,接收的类型,自行设置。MaxLen:可选参数。设定接收数组或字符串类型数据的尺寸。如果参数没有,将接收所有的数据。如果提供数组或字符串以外的数据类型,则忽略此参数。Type可以设置为常用的数据类型。通常在DataArrival事件中使用该方法。此事件包含totalBytes参数。如果设定的max-len小于totalBytes参数,将得到一个由10040表示的剩余字节将丢失的警告信息。
Listen:建立一个设置为监听模式的套接字。此方法仅用于TCP连接。语法:object.Listen参数:无。返回值:Void。当调用Listen之后,引入一个连接时发生ConnectionRequest事件。当处理ConnectionRequest时,应用程序必须使用Accpet方法来响应。
PeekData:同GetData类似,但是PeekData不从输入队列中移去数据。此方法仅用于TCP连接。语法:object.PeekDatadata,[type,][maxLen]。
SendData:向远地主机发送主机。返回值:Void。语法:object.SendDatadata。Data:发送的数据为二进制数,使用字节数组。当使用UNICODE格式串时将在发送之前转换为ANSI串。
Connect:客户机端可以用此方法请求与服务器连接。连接前应指定远程服务器IP地址及端口号。但也可以调用此方法是指定。
(3)主要发生的事件有:
Close:发生于远程主机关闭连接。为了正确关闭TCP连接应当使用Close方法。
Connect:当连接行动完成时,语法:object.Connect()。用此事件表明连接成功。
ConnectionRequest:发生于一个远端主机要求确定一个连接时。仅用于TCP服务器应用。Re-moteHostIP及RemotePort属性在此事件后存储了关于客户机的信息。语法:object_ConnectionRe-quest(requestIDAsLong)。requestID:引入的连接的请求标识。此参数传给Accept方法中的第二个控件实例。服务器可以决定是否认可该连接。如果引入的连接未被认可,客户将受到一个Close事件。使用Accept方法接受引入的连接。(www.daowen.com)
DataArrival:当新数据抵达时发生。语法:object_DataArrival(bytesTotalAsLong)。BytesTo-tal,Long型。总计收到的数据量。此事件在调用GetData方法之前将不会再发生。仅在有新数据抵达时激活。可以在任何时刻使用BytesReceived属性检查多少数据有效。
Error:表明发生了错误。限于篇幅,错误码忽略。
SendComplete:当发送动作完成时发生。语法:object_SendComplete。参数:无。
SendProgress:当发送数据时产生本事件。语法:object_SendProgress(bytesSentAsLong,bytesRemainingAsLong)。BytesSent:本事件发生以来发送的数据量。BytesRemaining:缓冲区中等待发送的数据。
2.计算机与和利时LM机以太网ModbusTCP协议通信通信VB编程实例
计算机与PLC通信,计算机为客户机,而PLC为服务器。PLC程序由调用以太网功能块时,自动生成,用户不必编程。计算机程序必须用户编写。
图6-139所示为这个计算机程序表单。其上有发送报文文本框及接收报文文本框。有建立连接、发送命令及接收数据按钮。
作为客户机,计算机程序要点是:
在使用这些控件之前,要先把winsock控件从控件库中调入到本工程VB的工具箱中。Proto-col(套接字类型)属性设为TCP,使用TCP协议。
图6-139 计算机与以太网PLC TCP IP协议通信程序表单
用connect方法,请求连接。其参数是指定PLC的IP地址(PLC配置时指定)及使用的通信口(LM机协议规定为502);
生成命令,并用sendData方法,发送命令;
用getData方法,接收并显示数据。
具体程序为
(1)建立连接程序。
(2)生成并发送命令程序。
(3)接收并显示数据程序。
该程序可用以读取Q区位或字,写I区的位或字。
从图6-129可知,它向PLC发送读取PLC%QW4字的命令,目的是读取%QW4字的值,并予以显示。从图6-129可知,此命令已得到执行,并得到相应的回应。接收报文的最后FF(65535),即为此值。该程序还可以改变命令码,用以读取Q区其他位或字,也可用以写I区的位或字。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。