技术论坛

WinCC怎样读取VB的数据?

作者 主题
新手

经验值: 23
发帖数: 14
精华帖: 0
WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-15 13:56:58
求教各位大侠:
我的问题是这样的:用VB编了一个程序,可以读入串口的数据。现在希望把读入的数据能传入WinCC中,不知道如何实现?我看论坛上有很多说OPC可以的,但我这里WinCC似乎是作为客户端,不知道能不能实现,如果能,如何实现?
或者不用OPC的方法,有其他途径吗?(排除WinCC中直接利用mscomm控件读取串口的方法,此法已试过行不通)
急用,跪谢!^_^
 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=353390&b_id=5&s_id=0&num=27

新手

经验值: 23
发帖数: 14
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-15 17:20:03
另外,数据量并不大,没有速度方面的限制
 
以下网友喜欢您的帖子:

  
游侠

经验值: 411
发帖数: 265
精华帖: 2
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-15 21:35:46
使用VB+DDE的方式或许可行.
 
以下网友喜欢您的帖子:

  
新手

经验值: 23
发帖数: 14
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-15 23:00:01
是吗,DDE我也听说过,不知道具体实现起来会不会复杂。
谢谢楼上的~
 
以下网友喜欢您的帖子:

  
版主

经验值: 17305
发帖数: 8468
精华帖: 18
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-16 08:18:19
三种方法都可以:OPC、DDE、OLE。
DDE方法,以前我上传过这样的例子。
OLE方法,可以直接在VB中创建WinCC运行时对象,然后读/写WinCC中的变量值,论坛里也有这样的代码。
无论成与败,无论甜与苦,我还是我。
以下网友喜欢您的帖子:

  
游侠

经验值: 312
发帖数: 215
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-16 09:09:16
OLE方法相对更简便,可以直接在VB中创建WinCC运行时对象,然后读/写WinCC中的变量值,察看景点贴子。
学习ing,进步中
以下网友喜欢您的帖子:

  
新手

经验值: 23
发帖数: 14
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-16 18:53:04
城版你以前发的帖子我没找到,太多啦~查不到。
我按照一篇介绍DDE的方法做了一个测试程序,在VB编程里面定义三个TextBox控件,名称为Text1、Text2和Text3。按钮Add执行Text1和Text2的值相加输出在Text3上。
现在我希望把这三个控件上的值传到WinCC里面去,VB测试程序主窗体的Link Topic名称为Form1(没做改变,默认的);将主窗体的Link Mode属性设为1-source。VB部分的组态就这样设置完了。
然后设置WinCC作为DDE客户端的组态:
1、新建一个单用户项目;
2、在WINCC的变量管理器中右击添加新的通讯驱动程序windows dde.chn;
3、点击windows dde前的+ > 右击DDE > 选择新驱动程序的连接 > 打开连接属性的窗口;
4、在打开的窗口进行组态:名字对话框没做改变,默认的NewConnection。右侧的“属性”对话框中,计算机名称没填为空;应用程序为test(上面VB测试程序生成的test.exe);主题填的是Form1;读变量方式为“一旦改变自动读取”+“读取起始值”;其他项目未作变化;
5、在刚才新建的连接NewConnection下新建三个属性相同的变量:num1,num2,和sum,数据类型都是“文本变量8位字符集”;在地址栏中的“选择”对话框,条目名称本别为Text1、Text2和Text3,数据类型填的都是TEXT8;
6、在图形界面中加入三个输入输出域,本别连接变量num1、num2和sum,属性中,“域类型”都为“输出”,“数据格式”都为“字符串”;
7、到这里,WinCC的客户端组态配置已经完成。
运行VB测试程序test.exe,然后激活WinCC的项目,任意改变测试程序中TextBox栏的值,WinCC的三个I/O域却无法显示并且随之变化,始终都是零!
然后我检查WinCCExplorer的“工具”“驱动程序连接状态”,“NewConnection”的状态都是“断开连接”。
实在不知道怎么回事啊~请大家指教!

 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3120
发帖数: 2161
精华帖: 21
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-16 20:42:57
OLE简单点啊!不要搞那么复杂啊!
定义API函数读取你计算机的名字:
Private Declare Function GetComputerName Lib "Kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long


OLE方式读取WINCC的变量的数据:
Dim ComputerName As String, i As Long
i = 255
Dim wincc As Object
ComputerName = String(i, 0)
GetComputerName ComputerName, i
ComputerName = Left(ComputerName, i)
Set wincc = CreateObject("WinCC-Runtime-Project", ComputerName)
Text1.Text = wincc.GetValue("A")
Text2.Text = wincc.GetValue("B")
SetValue()方法是写数据。
顺便给个例子你看看:
点击此处查看附件
雄关漫道真如铁,而今迈步从头越!
以下网友喜欢您的帖子:

  
新手

经验值: 23
发帖数: 14
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-16 23:27:39
ls的斑竹,你说的方法和代码我都看过了,应该可以解决我的问题。
这里的斑竹真是负责!多谢啦~
可惜研究了几天的WinCC+mscomm、OPC、DDE等各种方案的功夫都白费了,有点不甘心啊,希望如果有高手知道的话还是可以来共同探讨一下。
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 6879
发帖数: 5350
精华帖: 25
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-17 00:44:18
最简单的乃是使用OPC 将数据写入WINCC即可
DDE已经趋向于淘汰 MSCOMM乃是自己给自己找麻烦 OLE也可以
怎么论坛改成这样了??
以下网友喜欢您的帖子:

  
新手

经验值: 23
发帖数: 14
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-17 00:51:03
嗯,楼上的,OPC我也一开始就考虑过
只是我用的研华4000模块,OPC Server不太好找...
 
以下网友喜欢您的帖子:

  
奇侠

经验值: 6879
发帖数: 5350
精华帖: 25
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-17 10:46:27
你理解错了我的意思
你用VB读取数据后 通过OPC写入WINCC变量即可 其中OPCServer为Wincc
不要以为OPC只能读数据不能写数据
怎么论坛改成这样了??
以下网友喜欢您的帖子:

  
新手

经验值: 4
发帖数: 1
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-17 12:47:06
用动态链接库可以实现
编一个串口操作的动态链接库

 
以下网友喜欢您的帖子:

  
新手

经验值: 23
发帖数: 14
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-17 12:50:55
quote:以下是引用liwenqun在2007-07-17 10:46:27的发言:
你理解错了我的意思
你用VB读取数据后 通过OPC写入WINCC变量即可 其中OPCServer为Wincc
不要以为OPC只能读数据不能写数据

多谢指点啊!以前我确实不太了解,回头试一试
 
以下网友喜欢您的帖子:

  
版主

经验值: 17305
发帖数: 8468
精华帖: 18
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-17 14:35:15
用DDE方式时,WinCC的DDE通道下建立变量时应该选WORD、FLOAT之类的数值型数据类型。
另外,如果VB程序是在调试环境下运行的话,WinCC的DDE通道的主题不能是test,而应该是工程名。
无论成与败,无论甜与苦,我还是我。
以下网友喜欢您的帖子:

  
新手

经验值: 23
发帖数: 14
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-17 22:56:08
quote:以下是引用城外之人在2007-07-17 14:35:15的发言:
用DDE方式时,WinCC的DDE通道下建立变量时应该选WORD、FLOAT之类的数值型数据类型。
另外,如果VB程序是在调试环境下运行的话,WinCC的DDE通道的主题不能是test,而应该是工程名。

我当时也用float等试过,都没什么效果,另外,我不是在调试环境下运行的,直接运行声称的test.exe文件...
怎么说呢,个人觉得WinCC在做这种通讯时不太方便调试,也许是我水平不够的原因
还好,我自己的问题今天已经用前面给的OLE方法解决了^_^
 
以下网友喜欢您的帖子:

  
版主

经验值: 17305
发帖数: 8468
精华帖: 18
回复:WinCC怎样读取VB的数据?
精华帖


只看楼主 只看精华 2007-07-18 08:41:10
虽然你的问题已经通过其它方式解决了,但“初恋”仍然是不可磨灭的!
VB6.0中的步骤:
1、新建一个“标准 EXE”工程
2、设置窗体Form1的LinkMode属性为1 - Source
3、在Form1上添加一个文本框控件Text1,将其Text属性设为1(其它值也行)
4、保存工程:工程名为VBDDE.vbp
5、生成VBDDE.exe
WinCC的步骤:
1、新建一单用户项目
2、在变量管理器中添加Windows DDE驱动
3、在DDE下新建连接NewConnection,在其属性对话框中:
  Computer Name:不设置(本机)
  Application:VBDDE
  Topic:Form1(VB中窗体名)
  其它不作改动
4、在此连接下新建一有符号16位整型变量Tag1,在其地址选择对话框中:
  Item Name:Text1
  Data Type:SWORD(根据实际情况设定)
5、新建一个画面:DDE_Test.Pdl
6、在画面中添加一个IO域:与Tag1动态连接,触发为一旦改变,输出格式为s9999
7、保存画面
联机调试:
1、运行VBDDE.EXE(或者在VB设计器中运行工程)
2、激活WinCC项目
3、此时IO域值与Text1值总是保持一致(无论你在哪一方改动)

好好对照一下,看哪一步没对上。
无论成与败,无论甜与苦,我还是我。
以下网友喜欢您的帖子:

  
侠圣

经验值: 3120
发帖数: 2161
精华帖: 21
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-18 10:53:35
quote:以下是引用czbuaa在2007-07-16 23:27:39的发言:
ls的斑竹,你说的方法和代码我都看过了,应该可以解决我的问题。
这里的斑竹真是负责!多谢啦~
可惜研究了几天的WinCC+mscomm、OPC、DDE等各种方案的功夫都白费了,有点不甘心啊,希望如果有高手知道的话还是可以来共同探讨一下。


西门子要打造一个高档次的技术论坛,所以做斑竹的肯定得负责了,这里的论坛不能像别的自控论坛那样“灌水成灾”帖子没什么含金量;
希望大家遵守本论坛的规则吧,积极交流共同努力创建美好的技术论坛。
雄关漫道真如铁,而今迈步从头越!
以下网友喜欢您的帖子:

  
新手

经验值: 23
发帖数: 14
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-19 10:30:33
我找到自己做的DDE测试程序不通的原因了,原来是VB工程名没改,还是用的Project1,这样即使运行生成的test.exe文件也不行,工程名换为test后再做就通啦。
以前一直是用VC,VB和WinCC都没碰过,这次算是整明白了,多谢各位斑竹!
 
以下网友喜欢您的帖子:

  
游侠

经验值: 312
发帖数: 215
精华帖: 0
回复:WinCC怎样读取VB的数据?


只看楼主 只看精华 2007-07-24 09:27:00
能实现固然好 可是DDE技术好像已经过时 毕竟速度慢
OLE方法相对更简便,可以直接在VB中创建WinCC运行时对象,然后读/写WinCC中的变量值
可以察看以前的经典贴子。
学习ing,进步中
以下网友喜欢您的帖子:

  
收起
WinCC怎样读取VB的数据?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。