ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:88.87KB ,
资源ID:22445964      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22445964.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(在WINCC中使用WinSock控件进行TCPIP通讯的例程Word格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

在WINCC中使用WinSock控件进行TCPIP通讯的例程Word格式.docx

1、打开SckListening2侦听sckConnectionPending3连接挂起sckResolvingHost4识别主机sckHostResolved5已识别主机sckConnecting6正在连接sckConnected7已连接sckClosing8同级人员正在关闭连接sckError9错误2、WinSock控件的主要方法1) Bind方法用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序不能再使用这个端口。2) Listen方法Listen方法只在使用TCP协议时有用。它将应用程序置于监听检测状态。3) Connect方法当本地计算机希望和远程计算机建立连接时,就可以调

2、用Connect方法。Connect方法调用的规范为:Connect RemoteHost,RemotePort4) Accept方法当服务器接收到客户端的连接请求后,服务器有权决定是否接受客户端的请求。5) SendData方法当连接建立后,要发送数据就可以调用SendData方法,该方法只有一个参数,就是要发送的数据。6) GetData方法当本地计算机接收到远程计算机的数据时,数据存放在缓冲区中,要从缓冲区中取出数据,可以使用GetData方法。GetData方法调用规范如下:GetData data,type,maxLen它从缓冲区中取得最长为maxLen的数据,并以type类型存放在

3、data中,GetData取得数据后,就把相应的缓冲区清空。7) PeekData方法和GetData方法类似,但PeekData在取得数据后并不把缓冲区清空。3、WinSock控件的主要事件1) ConnectRequest事件当本地计算机接收到远程计算机发送的连接请求时,控件的ConnectRequest事件将会被触发。2) SendProgress事件当一端的计算机正在向另一端的计算机发送数据时,SendProgress事件将被触发。SendProgress事件记录了当前状态下已发送的字节数和剩余字节数。3) SendComplete事件当所有数据发送完成时,被触发。4) DataArr

4、ival事件当建立连接后,接受到了新数据就会触发这个事件。如果在接受到新数据前,缓冲区中非空,就不会触发这个事件。5) Error事件当在工作中发生任何错误都会触发这个事件。二、WinSock控件在WINCC中的使用1、WinSock控件注册在WinCC中使用WinSock控件前,需要先进行注册。注册方法如下:使用记事本新建一个后缀名为reg的文件,编辑文件,加入以下文本:HKEY_CLASSES_ROOTLicenses2c49f800-c2dd-11cf-9ad6-0080c7e7b78d =mlrljgrlhltlngjlthrligklpkrhllglqlrk保存文件退出。先将mswi

5、nsck.ocx拷贝到system32下 再将注册表文件添加到注册表 然后运行,输入regsvr32 MSWINSCK.OCX,确定。2、在WinCC中添加WinSock控件在WinCC图形编辑器中打开需要显示服务器数据的画面,选择“对象选项板”的“控件”选项卡,在选项卡中选择“添加/删除”,在“选择OCX控件”对话框中选择“Microsoft WinSock Control, version 6.0”进行注册。在对象选项板中的WinSock控件拖入画面中。三、服务器端程序介绍这里所要通讯的服务器端程序是运行于南车资阳机车有限公司生产的V280/285系列船用柴油机机旁控制屏监控系统程序。以下

6、是协议文本:通讯方式:TCP/IP侦听端口:9105机旁柜IP地址定义:由用户根据具体网络配置决定PAC数据采集周期:1秒上位机记取数据周期:数据包格式定义如下:上位机发送命令到PAC的数据包定义:本数据包由上位机发送到PAC,PAC根据上位机发送的的命令执行,同时返回最新的采集数据到上位机。数据长度:10字节。数据类型:byte。数据包详细定义:命令代码1字节备用代码1字节设定转速4字节(single)备用1字节其中命令代码意义:1“读数据”;18“转速升”;19“转速降”。PAC发送到上位机的数据包定义:650个字节。BYTE。数据包内容详细定义及代码示意如下:起始传80个浮点数,每个浮点

7、数占用四个字节,高位在后,低位在前。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

8、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

9、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 ;000000c0h: 9A 3F 1C C6 9A 3F 1C C6 9A 3F 1C C6 0F 00 B5 41 ;000000d0h: 74 FF EF 3F 9A 3F 1C C6 66 66 B8 40 9A 99 FD 41 ;000000e0h:000000f0h:00000100h:00000110h:

10、8F C2 04 42 00 00 00 00 00 00 00 00 00 00 00 00 ; 00000120h:00000130h:.续:PAC第一组IO输入点,2字节;PAC第二组IO输入点,2字节;PAC第一组IO输出点,1字节;PAC第二组IO输出点,1字节;PAC运行状态,1字节;PAC当前执行的命令,1字节;备用,1字节;当前设定转速,4字节;报警数目,1字节;报警信息,300字节;备用,16字节。00000140h: 05 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 ;00000150h:00000160h:00000170h:

11、00000180h:00000190h:000001a0h:000001b0h:000001c0h:000001d0h:000001e0h:000001f0h:00000200h:00000210h:00000220h:00000230h:00000240h:00000250h:00000260h:00000270h:00000280h: 00 00 00 00 00 00 00 00 00 00 四、WinCC画面模板与结构变量的配合使用本用户程序需要实时采集显示三台同类型柴油机的运行数据,由于三台柴油机的数据采集和显示是相同的,而WinCC画面模板与结构变量配合使用可以在一个画面中根据条件

12、显示具有相同类型参数的多个对象,避免反复组态相同画面布局的工作,减少项目后期某些细节部位的修改而带来的工作量,所以本用户程序采用画面模板与结构变量配合使用方法进行组态设计。WinCC中的画面模板一文提出四种使用画面模板的方法,这里采用第三种方法,即“使用变量前缀的画面窗口”。组态步骤如下所示:1、结构变量定义在WinCC中定义一个结构变量,结构变量名称为sDieselData。结构变量包括64个FLOAT型变量(数据包上传80个模拟量,但实际使用只有小于64个,出于编程方便起见,使用8*864个单精度浮点变量),16个BIT型变量(只使用PAC的输入点、其它开关量不使用),1个SHORT变量(

13、反映通讯状态)。64个单精度浮点型变量的命名格式为:fTag11、fTag12fTag18fTag21、fTag22fTag28fTag81、fTag82fTag8816个BIT型变量命名格式为biTag1、biTag2biTag16。1个SHORT型变量名称为TXStatus。结构变量定义完成后,根据结构变量定义三个内部结构变量,分别命名为“CNB”、“YYB”、“SXB”。2、画面模板组态新建一个画面,画面名称为pDieselMod.pdl,并在画面中加入一个WinSock控件、一些文字和输入/输入域,以及其它有些相关控件。如下图如示:3、调用画面模板及修改变量前缀新建的画面模板需要在主画

14、面的一个子画面窗口中显示。主画面文件名称为“pMain.pdl”,子画面窗口名称为“pMainArea”。在用户程序运行时,有一个界面中显示了三台柴油机的图标,点击某一个柴油机图标,子画面切换到相应的柴油机状态及参数界面。图标的鼠标动作C代码如下:#include apdefap.hvoid OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)#pragma option(mbcs)#define PIC_0 pMain#define PIC_1 pDieselMod.PDLSetPropCha

15、r(PIC_0,pMainArea,TagPrefixCNB.); 此处”CNB.”在其余两处为”YYB.”、”SXB.” SetPictureName(PIC_0,PIC_1);上面代码中关健代码就是:)。该行语句设置了子窗口pMainArea的变量前缀为”CNB.”。当子窗口设置了变量前缀后,画面窗口中的对象连接变量时,变量一般会自动加上前缀(连接包括动态对话框、变量、C脚本及VBS脚本)。在设置了子窗口的变量前缀后,如果要切换显示不带变量前缀的画面,则需设置子窗口的变量前缀为空。例外OpenPrevPicture()函数不受影响。4、将画面模板中的对象连接到变量将画面模板中的对象连接到相

16、应的变量,组态方法与常规组态相似,不同之处在于变更量名称需要去掉前缀,在脚本中所使用的变量同样不要带变量前缀,因为变量前缀会自动加上。在组态时会提示变量不存在,忽略即可。五、建立TCP/IP连接要求是在柴油机状态及参数画面显示时自动建立TCP/IP连接,如果连接没有建立,则将相应的结构变量清零,并且每隔两秒重建连接。连接建立后,发送读数据命令数据包。在画面对象属性的“显示”属性中加入如下VBS代码(触发器选择2s周期):Function Visible_Trigger(Byval Item)Dim Obj_SockClientDim cnvtDim obj_ScreenDim obj_pScr

17、eenDim Tag_intTXStatusDim i,jDim Tag_f,Tag_b获得当前窗口中的WinSock对象Set Obj_SockClient = ScreenItems(objSock)获得显示当前画面的子窗口对象Set obj_Screen = HMIRuntime.Screens().ScreenItems(这是一个转换DLL,后面还要讲到Set cnvt = CreateObject(ADS.ArrayConvert以下是建立连接前的参数初始化工作,远程地址和端口号根据实际情况修改,此处设置是为了方便测试工作,可使用TCP&UDP测试工具进行测试。Obj_SockCli

18、ent.Protocol = sckTCPProtocolSelect Case obj_Screen.TagPrefix Case Obj_SockClient.RemoteHost = 192.168.1.100 Obj_SockClient.RemotePort = 4002YYB. Obj_SockClient.RemotePort = 4003SXB. Obj_SockClient.RemotePort = 4004 Case Else Exit FunctionEnd Select连接没有建立、连接错误、同级人员正在关闭连接,这三种情况下,先关闭连接,再尝试建立连接。If (Obj

19、_SockClient.State = 0) Or (Obj_SockClient.State = 9) Or (Obj_SockClient.State = 8) Then Obj_SockClient.Close Obj_SockClient.Connect End If如果连接没有建立,则使相应的FLOAT型结构变量清零。 If Obj_SockClient.State 7 Then For i = 1 To 8 For j = 1 To 8 Set Tag_f = HMIRuntime.Tags(fTag & i & j) Tag_f.Value = 0 Tag_f.Write,1 N

20、ext Next如果连接没有建立,则使相应的BIT型结构变量复位。 For i = 1 To 15 Set Tag_b = HMIRuntime.Tags(biTag i) Tag_b.Value = False Tag_b.Write ,1 Else如果连接建立,则发送讯数据命令数据包 Obj_SockClient.SendData cnvt.CvHexStr2vOctetStr(01000000000000000000写入当前连接状态字 Set Tag_intTXStatus = HMIRuntime.Tags(TXStatus Tag_intTXStatus.Value = Obj_So

21、ckClient.State Tag_intTXStatus.Write , 1End Function六、接收数据包的处理当建立连接后,接受到了新数据就会触发这个DataArrival事件。这里只对前64个模拟量数据、16个开关量输入数据、10条汉字报警信息进行解析,并将解析后的数据赋值给相应的变量,汉字报警信息直接在窗口中的S7FlatEditBox控件中显示。DataArrival事件的VBS代码如下:Sub DataArrival(Byval Item, Byval bytesTotal) On Error Resume NextDim obj_OutTextDim strReceiv

22、eDim strFromRec,strFromRec1Dim strForBool,iForBoolCheckADs.ArrayConvertSet obj_OutText = ScreenItems(objOutText接收数据包字节数应为650字节,否则不处理If bytesTotal = 650 Then从接收缓冲区取得数据,并清空缓冲区Item.GetData strReceivestrFromRec = 提取前333个字节所包含的信息,用于模拟量和开关量解析For i = 0 To 333 UBound(strReceive) 将接收到的BYTE()型数据转换为String型数据 strFromRec = strFromRec & Right(0 Hex(Ascb(Midb(strReceive , i + 1 ,1) , 2 )Next解析出80个模拟量并赋值给相应的变量For i = 1 To 8 For j = 1 To 8 Set Tag_f = HMIRuntime.Tags( 此处使用了DLL中的数据转换函数,CvHexStr2vReal2的功能是将十六进制字符串表示的单精度浮点数转换成实际的浮点数值。该函

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1