大连plc吧 关注:18贴子:97
  • 0回复贴,共1

WinCC 6.2与RS232通信

只看楼主收藏回复

首先,上网下载MSComm控件,包含三个文件MSCOMM32.OCX,MSCOMM32.DEP,MSCOMM.SRG,网上有关于
这几个文件的使用方法,就不啰嗦了。或者可以下载到已经做好批处理文件的控件,直接运行批处
理文件就可以完成控件的安装注册,我就是下载的这种,很方便,有需要的可以留言哦。
安装好MSComm控件后,在wincc的图形编辑器里的控件窗口中点击鼠标右键添加该控件,名称是
Microsoft Communications Control v6.0,在前面的选择方框中打上钩,确认就可以在控件窗口
中看到这个控件了,然后拖拽一个实体到画面窗口中,出现一个电话的图标。
接下来就是编写脚本了,我采用的是vbs,可以有两种方法使用,一是通过全局脚本,采用变量或
者周期触发,实现定制读取串口数据;二是使用按钮触发,实现一次或者连续的读取串口数据。
建立内部变量comm_text,字符型,在画面中新建输入输出域,与变量comm_text连接
一、全局脚本方式(周期触发)
1、在脚本编辑器里新建脚本编写如下代码:
Option Explicit
Function action
Dim MSComm1
*指定控件所处的画面和控件名称
Set MSComm1 = HMIRuntime.Screens("启动画面").ScreenItems("控件2")
MSComm1.CommPort = 1 *设置通信端口号为COM1
MSComm1.Settings = "9600,n,8,1" *设置串口参数
MSComm1.InputMode = 0 *接收文本型数据,1为二进制数据
MSComm1.RThreshold = 17 *设定触发OnComm 事件的条件
MSComm1.PortOpen =True *打开通信端口1
End Function
2、mscomm控件的对象事件里编写如下脚本:
Sub OnComm(ByVal Item)
Dim MScomm1,MSComm1_text,buff,bufflen
 Set MSComm1=HMIRuntime.Screens("启动画面").ScreenItems("控件2")
buff = MSComm1.Input
bufflen = Len(buff)
If bufflen<>0 Then
MSComm1_text = Mid(buff,7,9) *从输入缓冲区中截取需要的数据
HMIRuntime.Tags("comm_text").Write MSComm1_text,1
Else
MSComm1.RThreshold = 0
MSComm1.PortOpen = False *关闭通信端口1
End If
End Sub
========================================
二、采用画面按钮方式:在画面上建立两个按钮,分别命名为“启动通信”、“关闭通信”
1、启动通信按钮 鼠标动作vb脚本如下:
Sub OnLButtonUp(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim MSComm1
Set MSComm1=ScreenItems("控件1")
MSComm1.CommPort = 1 *设置通信端口号为COM1
MSComm1.Settings = "9600,n,8,1" *设置串口参数
MSComm1.InputMode = 0 *接收文本型数据
MSComm1.RThreshold = 17
MSComm1.PortOpen =True *打开通信端口1
End Sub
2、关闭通信按钮 鼠标动作vb脚本如下:
Sub OnLButtonUp(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim MScomm1
Set MSComm1=ScreenItems("控件1")
MSComm1.RThreshold = 0
MSComm1.PortOpen = False *关闭通信端口1
End Sub
3、mscomm控件脚本:
Sub OnComm(ByVal Item)
Dim MScomm1,MSComm1_text,buff,bufflen
Set MSComm1=ScreenItems("控件1")
buff = MSComm1.Input
bufflen = Len(buff)
If bufflen<>0 Then
MSComm1_text = Mid(buff,7,9)
*MsgBox(MSComm1_text)
HMIRuntime.Tags("comm_text").Write MSComm1_text,1
End If
End Sub
============================================================================
注:
当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置
Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
以上就是我的解决过程,因为我的数据就是一串数字,而且wincc只是读取,所以没有做发送的测
试。在其中有一个重要的属性就是RThreshold,刚开始的时候没有设置这个属性,默认为0,怎么
都没有数据,后来看了说明才知道是怎么回事。
不足之处,不吝赐教


IP属地:辽宁1楼2014-09-17 09:46回复