| 作者 | 主题 |
|---|---|
|
独孤樵夫 游士 经验值:182 发帖数:45 精华帖:1 |
楼主
主题:WinCC 6.2与RS232通信
现在有一个项目,从主机1(数据采集平台)通过232串口发送数据到装有WinCC6.2的主机2,数据为一组数字,共10个,数字范围在0-100之间,WinCC如何访问这些数据?这些数据为不定时发送,WinCC可以做成定时刷新读取(1-2秒)。
问题: 1、WinCC能不能直接访问232数据? 2、不能直接访问,用DDE行不行?怎么用?用DDE的话,怎么把232数据写到Excel中? 3、有没有类似的例子或者资料参考? 谢谢! |
|
独孤樵夫 游士 经验值:182 发帖数:45 精华帖:1 |
11楼
主题:回复: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,怎么 都没有数据,后来看了说明才知道是怎么回事。 不足之处,不吝赐教 |