在WINCC中使用WinSock控件进行TCP/IP通讯的例程

摘要:
关键词:VB、VBS、WINCC、WINSOCK、DLL、UNICODE、ANSI、ASCII、画面模板、结构变量、数据转换。
该文档的软件环境:
Microsoft Windows XP Professional 版本2002 SP3
SIMATIC WinCC V6.2 SP2 ASIA
‘SIMATIC STEP7 V5.4+SP5+HF3 Chinese
TCP&UDP测试工具 V1.02
目的:
使用WINCC用户程序作为客户端程序,与服务器通讯,通讯协议为标准TCP/IP协议,取得服务器发送过来的数据包,按数据包格式文本规定,解析数据包数据,并将相关数据显示在用户程序画面中。
一、WinSock控件介绍(以VB语言表述)
1、WinSock控件的主要属性
1) Protocol属性
通过Protocol属性可以设置WinSock控件连接远程计算机使用的协议。可选的协议是TCP和UDP对应的VB的常量分别是sckTCPProtocol和sckUDPProtocol,Winsock控件默认协议是TCP。
注意:虽然可以在运行时设置协议,但必须在连接未建立或断开连接后。
2) SocketHandle属性
SocketHandle返回当前socket连接的句柄,这是只读属性。
3) RemoteHostIP属性
RemoteHostIP属性返回远程计算机的IP地址。在客户端,当使用了控件的Connect方法后,远程计算机的IP地址就赋给了RemoteHostIP属性,而在服务器端,当ConnectRequest事件后,远程计算机(客户端)的IP地址就赋给了这个属性。如果使用的是UDP协议那么当DataArrival事件后,发送UDP报文的计算机的IP才赋给了这个属性。
4) ByteReceived属性
返回当前接收缓冲区中的字节数
5) State属性
返回WinSock控件当前的状态
常数
描述
sckClosed
0
缺省值,关闭
SckOpen
1
打开
SckListening
2
侦听
sckConnectionPending
3
连接挂起
sckResolvingHost
4
识别主机
sckHostResolved
5
已识别主机
sckConnecting
6
正在连接
sckConnected
7
已连接
sckClosing
8
同级人员正在关闭连接
sckError
9
错误
2、WinSock控件的主要方法
1) Bind方法
用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序不能再使用这个端口。
2) Listen方法
Listen方法只在使用TCP协议时有用。它将应用程序置于监听检测状态。
3) Connect方法
当本地计算机希望和远程计算机建立连接时,就可以调用Connect方法。
Connect方法调用的规范为:
Connect RemoteHost,RemotePort
4) Accept方法
当服务器接收到客户端的连接请求后,服务器有权决定是否接受客户端的请求。
5) SendData方法
当连接建立后,要发送数据就可以调用SendData方法,该方法只有一个参数,就是要发送的数据。
6) GetData方法
当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓冲区中取出数据,可以使用GetData方法。GetData方法调用规范如下:
GetData data,[type,][maxLen]
它从缓冲区中取得最长为maxLen的数据,并以type类型存放在data中,GetData取得数据后,就把相应的缓冲区清空。
7) PeekData方法
和GetData方法类似,但PeekData在取得数据后并不把缓冲区清空。
3、WinSock控件的主要事件
1) ConnectRequest事件
当本地计算机接收到远程计算机发送的连接请求时,控件的ConnectRequest事件将会被触发。
2) SendProgress事件
当一端的计算机正在向另一端的计算机发送数据时,SendProgress事件将被触发。SendProgress事件记录了当前状态下已发送的字节数和剩余字节数。
3) SendComplete事件
当所有数据发送完成时,被触发。
4) DataArrival事件
当建立连接后,接受到了新数据就会触发这个事件。
注意:如果在接受到新数据前,缓冲区中非空,就不会触发这个事件。
5) Error事件
当在工作中发生任何错误都会触发这个事件。
二、WinSock控件在WINCC中的使用
1、WinSock控件注册
WinCC中使用WinSock控件前,需要先进行注册。
注册方法如下:
使用记事本新建一个后缀名为reg的文件,编辑文件,加入以下文本:
[HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d]
@="mlrljgrlhltlngjlthrligklpkrhllglqlrk"
保存文件退出。
先将拷贝到system32下
再将注册表文件添加到注册表
然后\"运行\",输入\"regsvr32 MSWINSCK.OCX\",确定。
2、在WinCC中添加WinSock控件
WinCC图形编辑器中打开需要显示服务器数据的画面,选择“对象选项板”的“控件”选项卡,在选项卡中选择“添加/删除”,在“选择OCX控件”对话框中选择“Microsoft WinSock Control, version 6.0”进行注册。
在对象选项板中的WinSock控件拖入画面中。
三、服务器端程序介绍
这里所要通讯的服务器端程序是运行于南车资阳机车有限公司生产的V280/285系列船用柴油机机旁控制屏监控系统程序。
以下是协议文本:
通讯方式:TCP/IP
侦听端口:9105
机旁柜IP地址定义:由用户根据具体网络配置决定
PAC数据采集周期:1秒
上位机记取数据周期:1秒
数据包格式定义如下:
上位机发送命令到PAC的数据包定义:本数据包由上位机发送到PAC,PAC根据上位机发送的的命令执行,同时返回最新的采集数据到上位机。
数据长度:10字节。
数据类型:byte
数据包详细定义:命令代码1字节+备用代码1字节+设定转速4字节(single)+备用1字
其中命令代码意义:1=“读数据”;18=“转速升”;19=“转速降”。
PAC发送到上位机的数据包定义:
数据长度:650个字节。
数据类型:BYTE。
数据包内容详细定义及代码示意如下:
起始传80个浮点数,每个浮点数占用四个字节,高位在后,低位在前。
00000000h: 33 33 E7 41 00 00 E8 41 66 66 EA 41 66 66 EA 41 ; 
00000010h: 33 33 EB 41 66 66 E6 41 00 00 E4 41 CD CC E0 41 ;
00000020h: 66 66 DA 41 00 00 DC 41 00 00 DC 41 00 00 DC 41 ;
控件的使用
00000030h: 66 66 DA 41 CD CC D4 41 CD CC D4 41 00 00 D0 41 ;
00000040h: 00 00 DC 41 00 00 DC 41 33 33 DB 41 CD CC D8 41 ;
00000050h: 9A 3F 1C 46 9A 3F 1C 46 9A 3F 1C 46 9A 3F 1C 46 ;
00000060h: 65 66 89 41 32 B3 95 41 CE CC 94 41 CC 2C 95 41 ;
00000070h: CD 2C 8C 41 33 93 91 41 01 E0 91 41 99 19 92 41 ;
00000080h: 01 C0 8F 41 01 00 8E 41 9A 59 94 41 00 00 00 00 ;
00000090h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;
000000a0h: FC FF 0A 42 F6 FF FB 41 9A 3F 1C C6 9A 3F 1C C6 ;
000000b0h: 9A 3F 1C C6 9A 3F 1C C6 9A 3F 1C C6 A3 FF 89 40 ;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。