wincc中使用mscomm串口通信? 点击:9682 | 回复:15



wl173235844

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2009年6月12日
发表于:2009-07-20 20:43:43
楼主

大家好,我在使用wincc读取串口的数据。使用的是ms communication control6.0,就是VB中那个像电话的串口通信控件。在VB中使用良好,但到wincc的vb script中,语法就有点不一样了,

在VB中可以使用:
Dim buffer() as byte
buffer = mscomm.Input

但在vb script中,只能使用:
dim strData
strData = mscomm.Input
这里读到的就不再是一串字节,而是一些宽字符的乱码。

请问有没有办法在VB script中实现如VB中那种读来就是字节数据的方法?




[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2009-07-21 09:18:49
1楼
宽串与字节串肯定有转换函数

wl173235844

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:5
  • 注册:2009年6月12日
发表于:2009-07-21 13:56:46
2楼
回复内容:
对:[明月夜] 关于宽串与字节串肯定有转换函数 内容的回复:


这位朋友能不能说得具体一些。谢谢了。

[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2009-07-21 15:02:45
3楼
也没试过,只是凭经验说出的,这叫点一点

[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2009-07-21 15:04:50
4楼

http://hi.baidu.com/%C1%F5%D7%D3%C4%BE2007211/blog/item/b7352044be298448510ffeb9.html

2008.2.25】WINCC通过MSComm控件的串口接收终于搞定2008-02-25 21:46 终于搞定了WINCC的串口接收,使用的是Microsoft的MSComm控件,采用VBSJ脚本,比较好用。

注意几点:

1.如果com口已经设置成WINCC与PLC的通讯口,即使此时不用,也不能作为普通的串口通讯使用,会产生错误的代码。

2.在VBS动作中调用wincc内部变量的方法:

Dim objTag ‘objTag为定义的中间变量

set objTag=HMIRuntime.Tags("内部变量名")

objTag.read

objTag.vavue=??? ‘对内部变量进行操作

objTag.write

下一步,搞发送喽!


[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2009-07-21 15:07:47
5楼

搜了几下,没找到有用的,自已搜搜看:关键字  WINCC  MSCOMM

 

[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2009-07-21 15:14:31
6楼

[明月夜]

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2009-07-21 15:22:42
7楼
http://www.asiatest.org/Magazine_Article.asp?id=123599

在WinCC中实现串行通讯的两种方法
Two methods to realize serial communication based on WinCC
作者:林英芸 杨煜普 / Lin Yingyun Yang Yupu


《电子测量技术》 2006年第2期


概  要:
为了在WinCC组态软件中实现与串口的通讯,文中介绍了两种方法:一是在WinCC中调用VB编写好的串口通讯程序,进行数据交换,实现对串
口的访问;二是在WinCC图形编辑器中调用ActiveX控件MSComm,编写全局脚本VBS实现对串口的访问。这两种方法很好地解决了组态工程师被
WinCC所束缚的串行通讯操作限制问题,拓宽了工程师使用WinCC的灵活性,提高了组态效率。
In order to realize serial communication with ActiveX based on WinCC,two methods are described in this paper.The first
method is divided into two steps.First,realize serial communication by programming in Visual Basic,and then call this
executive program in WinCC to exchange data.The second method is calling the ActiveX control MSComm directly in the
Graphics Designer of WinCC and programming in WinCC Global Scripts to realize serial communication.These two methods are
good solutions to the limitations of serial communication operation in WinCC.By these ways,engineers can use WinCC more
flexibly,thus improve their configuration efficiency.

正  文:

0 引言



WinCC即Windows Ccontrol Center(视窗控制中心),是一个功能强大的全面开放的上位机监控系统,既可以用于小规模简单的过程监控,
也可以用于复杂的工控领域[1]。

WinCC提供了较大的用户编程空间。WinCC提供内置的语言脚本,可以方便地控制每个程序对象。通过OLE,其他应用程序可集成到过程画面上
,并与WinCC交换相关数据。采用面向工业的ActiveX控件,用户可以使用已完成的控件来实现复杂的管理与控制功能。基于系统稳定性的考
虑,WinCC提供的这些功能多数还是受限的。WinCC提供硬件驱动的形式和硬件打交道,但是在实际的工程应用中,往往会用到许多WinCC没有
提供驱动的硬件,用户必须自己写程序来控制这些硬件,还需要编写程序控制实时数据的归档与处理。在WinCC中并没有集成其他公司的智能
仪表的串行通讯程序,因此需要开发新的串行通讯程序。本文介绍在WinCC中实现串行通讯的两种方法。

1 间接通讯



自动控制系统中,上位机监控部分主要是用于动态流程画面监视、报警报表输出、趋势图分析等。在这个系统中,利用WinCC对整个上位机系
统进行组态设计,系统在正常工作时,上位机始终处于WinCC的运行环境中。WinCC提供了OLE,DDE,ActiveX,OPC服务器和客户机等接口或
控件,可以很方便地与其他应用程序交换数据。由于计算机从串行接口接收的数据要与上位机中的WinCC建立连接,因而采用二进制文件形式
作为中间桥梁,即将接收的数据按其数据格式存入二进制文件,然后在WinCC中从二进制文件中提取数据[5]。

该方案可分为两个阶段:

首先,使用VB语言编写从串口中取数据的可执行程序,采用通讯控件MSComm实现。通讯实现程序如图1所示。

然后,在WinCC中,调用从串口中取数据的可执行程序,将采集的数据写入二进制文件;将数据从二进制文件中一一取出,赋给WinCC中相应
的内部变量标签。由于可执行程序采集到的数据在WinCC中需要使用,数据不方便直接传递,因而二进制文件是可执行程序与WinCC之间数据
传输的一种较为有效的方式。WinCC中读取数据的程序流程如图2所示。

图1通讯程序实现流程图

图2WinCC中读取数据的程序流程图

2 直接通讯



在WinCC中的图形编辑器中直接加入ActiveX控件MSComm实现串行通讯。WinCC中带有一个Global Script(全局脚本编辑器),它为开发人员提
供一个功能强大的工具,用于生成用户的C脚本或VB脚本,生成的脚本可应用于任何地方。这里,就依据Global Script,通过对ActiveX控件
MSComm进行控制,编制一个从串口采集数据的通讯程序。上位机工作时,运行这个程序即可实现上位监控系统与串口采集数据的通讯任务。

MSComm(即Microsoft Communications Control)是Microsoft公司提供的简化Windows下串行通讯编程的ActiveX控件,它为应用程序提供了
通过串行接口收发数据的简便方法。MSComm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API函数。它在VC、VB、Delphi
等语言中均可使用[2] 。

MSComm控件的主要属性:

a)CommPort 设置并返回通讯端口号。

b)Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

c)PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。

d)Input 从接收缓冲区返回和删除字符。

e)Output 向传输缓冲区写一个字符串。

在WinCC中,VBScript是基于Visual Basic的运行脚本语言。脚本本身能访问所有WinCC图形对象的属性和方法,也能访问ActiveX控件和其他
制造商的应用程序对象模型。因而能控制对象的动态性能,方便地建立与其他制造商应用程序的连接[1]。

由于使用标准的ActiveX技术和Visual Basic,因而能够进行快速开发串行通讯。具体实现步骤如下:

1)首先需要将Mscomm32.ocx在WinCC中注册。

2)运行WinCC控制中心,建立两个内部变量,一个串口输出变量COM_OUT;另一个为串口输入变量:COM1_IN。两个变量均为16位文本变量。

3)在图形编辑器中建立相应的操作界面,在界面中加入ActiveX控件,然后选择Microsoft Communication Control 6.0选项。出现电话式的
图标,这就是我们需要的串口通讯的控件。

4)可以在画面中添加一个按钮,在click事件中编辑VBS动作,对MSComm进行初始化。可在VBS全局脚本编辑器中输入如下程序:

Sub OnLButtonDown(ByVal Item,ByVal Flags,ByVal x,ByVal y)

Dim mscomm




Set mscomm=ScreenItems(“mscomm”)

mscomm.CommPort =2

mscomm.Settings=“9600,N,8,1”

mscomm.InputMode=1

mscomm.portopen=True

End Sub

5)在ActiveX控件MSComm属性中也有OnComm事件。在该事件下输入VBS动作,对发送或者接收到的字符进行处理。

Sub OnComm(ByVal Item )

……

…… //对发送或者接收到的字符进行处理

End Sub

在将数据赋给Internal tag(内部标签)之后,上位监控系统就可在监控界面需要时,随时用于显示或计算,也可以把这些数据作历史数据归
档,以用于报表输出或查看数据的变化趋势图等。

3 结论



串行通讯控件MSComm全面提供用于RS232串行通讯上层开发的所有细则,使得WinCC与智能仪表间的串行通讯能以较为简捷的方式实现。上述
方法曾在自动化控制项目中使用,事实证明,这两种方法不仅是可行的,而且是切实有效的。此外,还能很好地弥补了WinCC没有提供串口通
讯通道驱动这一缺陷,增加了使用WinCC的灵活性,大大提高了组态效率。



参考文献:
[1]深入浅出西门子WinCC V6[M].北京:北京航空航天大学出版社,2004:5,122135,213. [2]仵浩等.Visual Basic 串口通讯工
程开发实例导航[M].北京:人民邮电出版社,2003:258324. [3]马恩铭.利用内嵌ActiveX控件操纵WinCC数据库[J].计算机应用与
软件,2005(1). [4]路增立 ,宋玉林,刘振兵.Visual Basic中串口通讯的应用[J].江苏电器,2003,5. [5]汪美霞,汤晓兵,陈号
.MSComm与C在监控系统和智能仪表的串行通讯中的应用[J].山东建筑工程学院学报,2004,2.

ZJP00998870

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:1988
  • 注册:2004年10月24日
发表于:2009-08-26 16:08:51
8楼
wincc中直接使用mscomm控件是不行的,对于INPUT,OUTPUT两个属性被wincc封死了。本人想了另一个方法,通过vb编程软件,做一个自定义控件。在这个自定义控件中,加入mscomm控件,然后再建立自定义控件的属性,这些属性和mscomm的几乎相同。

ZJP00998870

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:1988
  • 注册:2004年10月24日
发表于:2009-08-26 16:23:17
9楼

例如有Inputs,Outputs,PortOpen,Settings等属性。控件做成后,在wincc的画面中只需添加这个自定义控件,使用方法也和使用mscomm控件一样。由于这是自定义控件,wincc没办法封堵Inputs和outputs这两个属性,因此,mscomm的功能就在这个自定义控件中实现了。

LILUOBAO

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2007年8月03日
发表于:2009-10-19 09:17:52
10楼

能不能具体一点,9楼的朋友能不发给我一份,LILUOBAO@163.COM,谢谢!

phb40

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 21回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2005年11月24日
发表于:2010-05-02 19:07:38
11楼
朋友给我发一份PHB40@126.COM

mashaokang

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:50
  • 注册:2010年8月21日
发表于:2011-04-20 23:58:24
12楼

用的VB..就一个语句就行了..呼呼

qingyun24203

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:43
  • 注册:2007年12月31日
发表于:2011-10-10 15:31:29
13楼

9楼的强呀,我搞了很久也没明白,原来是把INPUT,OUTPUT属性给封了。能把你编的控件发给我一份吗,十分感谢!!

qingyun24203@126.com

zhangluwen

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2014年5月28日
发表于:2014-09-19 14:58:54
14楼

能把你编的控件发给我一份吗?

syq47@163.com

liyundong1986

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:121
  • 注册:2012年2月21日
发表于:2015-05-08 10:31:14
15楼


引用 [明月夜] 的回复内容: http://www.asiatest.org/Mag...



热门招聘
相关主题

官方公众号

智造工程师