WinCC与Excel,VB的本地DDE通讯

WinCC与Excel,VB的本地DDE通讯
WinCC与Excel,VB的本地DDE通讯

WinCC与Excel、VB的本地DDE 通讯

1.WinCC 作为DDE的服务器,Excel 作为DDE客户端

2.WinCC 作为DDE的服务器,VB 作为DDE客户端

3.WinCC 作为DDE的客户端,Excel 作为DDE服务器

1WinCC 作为DDE的服务器, Excel 作为DDE客户端

1)打开WinCC项目,在WinCC Explorer 中“计算机属性->启动”中添加

应用程序 : DdeServ.exe ,同时添加命令行参数: /v /n 。

2)激活WinCC 后,会弹出 WinCC DDE-Server 对话框,点击 Tag List 按钮:

在列表中选择想要访问的变量,点击“确定”,这样该变量的连接信息就被拷贝到Windows剪贴板。

3)打开Excel ,任意(双击)选中一个单元格,将Windows剪贴板的内容拷

贝到该单元格中,然后在第一个字符前添加“=”,这样就完成对单元格的输入。这时在Excel中就能够得到WinCC的内部和外部过程数据了。

4)如果要访问多个变量,请重复步骤 2)和 3)。

注意:1) DdeServ.exe 需要一直运行。

2) 这种连接是单向的。

返回

2WinCC 作为DDE的服务器, VB 作为DDE客户端

1)打开WinCC项目,在WinCC Explorer 中“计算机属性->启动”中添加

应用程序 : DdeServ.exe ,同时添加命令行参数: /v /n 。

2)激活WinCC。

3)打开VB,在窗体上放置 TextBox 控件,设置该控件的下列属性:

a)LinkTopic=WinCC|\\计算机名称\该WinCC项目的文件夹的共享名\该

WinCC项目名.mcp

b)LinkItem=WinCC的变量名称

c)LinkMode=Automatic 。只要该属性一生效,此TextBox控件就能在编

辑状态下取得WinCC 变量的值。

返回

3WinCC 作为DDE的客户端,Excel 作为DDE服务器(本地)

1)打开WinCC Explorer,在“变量管理”中建立“WINDOWS DDE”通道

和连接,其连接属性中:

“计算机名称”为空;

“应用程序”为Excel;

“主题”为 [Excel文件名]工作表名,比如 [book1.xls]sheet1 。

2)建立新变量,在变量属性中选择地址,条目名称填: r 行数c列数,比如

r1c1 (表示第一行第一列的单元格)

3)重复步骤2)可以加入更多的DDE变量。

返回

WINCC报表详解

在工业生产中报表一直占有非常重要的部分,它一般用来记录现场的工艺参数和统计信息。早期是由人工抄录然后统计出相关的报表。进入计算机控制阶段,这份工作就需要工控软件来实现。对于工控行业的工程师来说:如何开发适合用户需求的报表一直是个难题。论坛上很多人都在寻求灵活高效的解决方法。 经过这段时间的网上讨论。综合网友们的意见和建议,我们做了总结。并结合WinCC软件本身作了相关的说明。希望能对大家在以后的报表开发中有所帮助。 接下来就从报表的需求分析、WinCC报表系统的应用、复杂报表的WinCC报表系统实现这几个部分来分别介绍。最后总结出WinCC报表系统在应用的优缺点和常见的问题的解决方法。 一.报表的需求分析 从需求上来讲报表一般分为:内容上的需求、样式上和任务上的需求。 1.内容需求内容上一般涉及到数据的求和、平均、最大值、最小值等计算,同时也会涉及到关系的处理,比如班组相关对应信息的统计分析等。下面是一个很典型的报表需求,就很能说明这样的问题: 图1. 月报表分析 此报表是典型的工业现场应用,在数据采集没有难度。唯一的难度在于四班三倒后,每个月班的出勤日是不一样的,这样对于月报来说,计算出本月每个班的出勤日是需要些算法。此类报表在连续生产的行业需求很广泛。比如:钢铁冶金行业需要一天24小时不停运转的系统。 还有一种内容上是分总的关系,就是一部分是简单的数据记录,另一部分是对上一部分 数据的统计,比如汇总、求和、平均等。如下图也是很典型的应用。

图2. 总分报表 另外一种就是涉及到混合排列的问题,一张表上既有分项数据,中间也涉及到统计信息,同时也会添加一些实时的信息在上面。如下图。 图3. 复杂报表 这是一个复杂的报表,中间涉及到分项的记录,数据求平均,和一些操作信息的记录。既有历史数据也有实时信息。 当然更复杂的报表需求也是有的,比如说涉及到一张报表上既有实时信息又有历史信息同时还涉及趋势视图、报警信息等。用户自己可以灵活的定义报表的内容和样式。比如下图。

常用西门子WINCC与西门子PLC通讯连接方式

西门子WINCC6.0与SiemensPLC通讯连接有多种方式,下面介绍两种常用的通讯方式。 一、采用普通网卡通过TCP/IP与PLC通讯,通过以太网实现WICC6.0与PLC系统连接的前提条件是PLC系统配置有以太网模块或者使用带PN接口的PLC,以太网模块如 CP443-1或者CP343-1,带PN接口的PLC如CPU 315-2PN/DP。以下为采用普通网卡 CP443-1的通讯连接。 1. STEP7硬件组态 使用STEP7编程软件对PLC系统进行硬件组态,在“硬件”配置窗口插入实际的PLC 硬件,如图1所示: 图1 STEP7硬件组态 2. 双击CP443-1槽的CP443-1,弹出属性对话框,如图2所示:

图2 CP443-1属性对话框 3. 点击图2属性对话框,弹出网络参数设置对话框,点击“新建”按钮,新建一个以太网络,输入以太网模块CP443-1的IP地址,通常情况下,不需要启用网关。如图3 所示:

图3 参数设置 注意事项:如果采用TCP/IP协议通讯方式,必须启动“正在使用IP协议”,将组态好的硬件下载到CPU,则PLC设置完成了! 4. 设置安装WINN6.0(通常为工程师站ES和操作员站OS)计算机Windows操作系统的TCP/IP参数,将WINN组态计算机的IP地址设置成为与PLC以太网通讯模块或者PN接口地址保持在一个网段内。如图4所示: 图4 设置计算机IP地址 5. 添加新的驱动程序和设置系统参数,打开新创建的工程“test”,在项目管理栏里选择“变量管理”,单击右键选择“添加新的驱动程序”,如图5所示。

6. 在添加新的驱动程序文件夹里选择“SIMATIC S7 Protocol Suite.chn”,如6所示: 图6 驱动程序 7. 右键单击TCP/IP,在弹出菜单中点击“系统参数”,如图7所示。弹出“系统参数 -TCP/IP对话框”,选择“单元”标签,查看“逻辑设备名称”,一般默认安装后,逻辑 设备名为CP-TCP/IP。

wincc 常用脚本

DeactivateRTProject ();//退出系统 #pragma code("useadmin.dll") #include"PWRT_api.h" #pragma code() char* CUser=NULL; CUser=GetTagChar("@CurrentUser"); if (strlen(CUser)==0) { PWRTSilentLogin("operator","123456");//用户“operator",密码"123456”登录} OpenPicture("@MAIN.pdl"); } 在画面中结合不同按钮来组态下面 C 操作 Login Action for login (for example, "mouse click" event): #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); Logout Action for logout (for example, "mouse click" event): #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); PWRTLogin 参数必须是CHAR 字符。它指定了显示对话框的监视器。如果只使用一个监视器,那么保留默认参数“c”或者指定“1”。 注意 可以使用PASSLoginDialog 函数来代替PWRTLogin 或者PWRTLogout 函数。这个函数需要和函数PWRTLogin 相同的参数。PWRTLogin 和PASSLoginDialog 函数可以调用登录界面,在上面可以登录或者注销。函数PWRTLogout 被正确执行并且不调用登录界面。 正确执行后这两个函数都返回“1”。然而,登录不会等到显示对话框之后。 注意 如果使用多个显示器,为了能使登录对话框显示在合适的显示器上,需要WinCC Basic Process Control (OS项目编辑器)。 不使用WinCC Basic Process Control 时,可以指定显示器编号,但登录对话框始终显示在第一个显示器上。 #include"apdefap.h"//调用函数代码 void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

wincc与PLC通讯设置

wincc与PLC通讯设置 WINCC与S7 PLC通过MPI协议通讯时,在PLC侧不须进行任何编程和组态;在WINCC上要对S7 CPU的站地址和槽号及网卡组态。 1、PC机上MPI网卡的安装和设置 首先,将MPI网卡CP5611插入PC机上并不固定好,然后,启动计算机,在PC机的控制面板中双击“Setting PG/PC interface”图表,弹出窗口中就会显示已安装的网卡,例如下图所示的是CP5611网卡安装后的界面: 2、在WINCC上添加SIAMTIC S7通讯协议 网卡安装正确后,打开WINCC,选择“Tag Management”击右键选择“Add New driver”,再弹出窗口中选择”SIAMTIC S7 protocol suite”连接驱动,将其添加到”Tag Management”向下,如下图: 协议组包括在不同网络上应用的S7协议,如MPI网,PROFIBUS网,以及工业以太网等在这些网络上,应用层是S7协议,这里我们通过MPI网通讯。 3、在WINCC通讯连接参数设置 选择MPI通讯协议并按右键选择“System parameter”进入如下图系统参数设置界面:

4、在WINCC上建立通讯连接 选择MPI通讯驱动并按右键选择“New driver connection”建立一个连接,如果连接多个CPU,每连接一个CPU 就需要建立一个连接,所能连接的CPU的数量与上位机所用网卡有关,例如 CP5611所能支持的最大连接数是8个,网卡的连接数可以在手册中查找。这里需要修改每个连接的属性,如选择CPU的站地址和槽号等,具体如下图: 连接S7-300 CPU时槽号都是2,连接S7-400 CPU时,槽号应参照STEP7硬件组态中的槽号,所有这些工作完成之后通讯就可直接以建立起来。 5、通讯诊断 如果此时通讯有问题,应检查网卡是否安装正确,通讯电缆和接头是否接触良好,组态参数是否正确等,如果使用CP5511,CP5611或CP5613通讯卡,诊断起来就比较简单,在PC机的控制面板PG/PC接口中,利用这些CP自身的诊断功能读就能出MPI网络上所有站地址,具体可参见下图: 如果CP5611的站地址是0,CPU的MPI的站地址是4,其诊断结果是0,4站被读出来,这样就可以判断连接电缆和插头是否接触良好,若网卡及站地址都没有错误,则WINCC的组态参数肯定有问题,须对此做进一步检查。 如果用户通讯使用的是PC adapter而不是上面提到的专用通讯卡,则问题的诊断就比较麻烦。

最新wincc生成excel

1 给wincc中通过vbs写excel的方式做报表的初学者一点脚本我对该帖子不做任何限制,都可以自由拷贝使用。方便初学者学习! //log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次 //如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。 //本程序主要是演示数据记录的过程。 //在c:\建立一个excel文件,该文件可以是你的报表模版 Option Explicit Function action Dim objExcelApp,objExcelbook,objExcelSheet Dim tagshijian,sheetname,username,zhushi Dim tagday Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a1 8,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a3 5,a36,a37,a38,a39,a40

Dim i,j,t,count Dim msg Dim patch,fn Dim d,m,y,oh,mm,ss d=" " m="-" y="-" oh=":" mm=":" ss="" msg="记录报表成功" fn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now)) patch="c:\"&fn&".xls" Set a1=HMIRuntime.Tags("a1") Set a2=HMIRuntime.Tags("a2") Set a3=HMIRuntime.Tags("a3") Set a4=HMIRuntime.Tags("a4") Set a5=HMIRuntime.Tags("a5")

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel

Wincc V7.3用户归档深入5-用vbs将用户归档的内容导出到excel 我们在用户归档中得到数据之后,如果想导出到excel,思路是和把MSHFGrid数据导出类似的。网上有些文章是直接从后台数据表读取数据,本文介绍从数据归档控件导出数据。 1. 假设wincc项目已经创建了用户归档,画面上有一个用户归档控件,名字叫做UA,设置一个按钮,按钮点击事件添加以下vbs脚本 Sub OnClick(ByVal Item) Dim UA,col,row,rows Dim xlapp,objsheet Dim i,j,k,m,n,filename Set UA=ScreenItems("UA") Set rows=UA.GetRowCollection m=rows.Count n=UA.ColumnCount If m>1 Then '如果用户归档控件有记录 Set xlapp=CreateObject("Excel.Application") xlapp.visible=False xlapp.workbooks.add Set objsheet=xlapp.worksheets(1) For k=1 To n ua.ColumnIndex=k objsheet.cells(3,k)=ua.ColumnCaption '字段名称 Next objsheet.cells(1,1)="XX用户归档" For i=1 To m For j= 1 To n objsheet.cells(i+3,j)=ua.GetRow(i).celltext(j) Next Next '以下代码处理日期时间数据格式以及表格边框线、标题合并单元格等排版 objsheet.range("a1:d1").mergecells=True 'objsheet.range("a1").ColumnWidth =20 '列宽度 objsheet.cells(2,1)="生成时间:" objsheet.cells(2,2)=Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日" objsheet.cells(1,1).HorizontalAlignment = 3 objsheet.range("a3:d" &CStr(3+m)).borders(1).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(1).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(2).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(2).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(3).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(3).weight=2 objsheet.range("a3:d" &CStr(3+m)).borders(4).linestyle=9 objsheet.range("a3:d" &CStr(3+m)).borders(4).weight=2 '保存文件 filename= "c:\" & Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日-" & Hour(Now) & "点" & Minute(Now) & "分" & Second(Now) & "秒生成用户归档.xlsx"

SLC与WINCC通讯故障

S L C与W I N C C通讯故 障 文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]

PLC与WINCC通讯故障 基于SIEMENS PLC wincc链接不上电脑,检查步骤: 如果是S7-300,走的是MPI通讯 先检查PLC能否与STEP 7通讯,如不能则检查一下几点: 1.检查通讯线是否正常 2.打开STEP7编程软件,打开PG/PC口,在弹出的 查看物理链路MPI适配器上的拨码开关上的波特率是否与PG/PC硬件组态上的通讯口设置一致。 3.检查电脑端口(设备管理器中设置)设置上波特率是否与PG/PC口波特率设置一致 4.重新删除PG/PC口上的MPI接口,重新添加一遍 5.检查硬件组态是否与实际组态匹配一致 6.在线可连接点删除以前的程序块 基于以上几点,基本能连上step 7,可以通讯 STEP 7能通讯,但wincc通讯不上检查一下几项: 1.检查通讯线是否正常,安装到位 2.检查电脑是否有漏电,电压不稳现象 3.检查wincc通道的系统设置,参数有无匹配 4.检查PG/PC口设置是否匹配 5.检查电脑本地链接协议是否添加完整 如果是S7-300,走的是以太网通讯

也是先检查PLC能否与STEP 7通讯(这里所指直接网线与PLC下载组态,当然也可以MPI硬件组态,MPI组态检查上面已经罗列,这里不在解释),如不能检查一下几点 1.检查网线是否完好 2.检查PG/PC口的设置是否设置成本地网卡接口 3.检查本地电脑网卡是否工作正常,能否自适应,具体现象:本地电脑 和PLC网线连上显示无连接(不能自适应),解决办法:电脑与CP343-1中加个交换机 4.检查本地电脑,PLC是否有漏电,电压不稳现象 5.检查硬件组态是否与实际组态一致 6.检查CP343-1上的指示灯,是否有闪烁(如有,则是软件问题) 7.检查本地链接属性中SIMATIC NET是否安装完成 基于以上几点,基本能解决S7-300与STEP 7的通讯,若是能通讯STEP7,不能通讯WINCC 1.检查wincc通道的系统设置,参数有无匹配,是否指向本地网卡 2.检查PG/PC口设置是否匹配 3.检查电脑本地链接协议是否添加完整 4.IP地址是否与本地电脑在同一个网段,(ping一下PLC) 5.电脑命名是否与wincc程序命名一致 以上就是本人的一点点经验,希望可以帮助你们

wincc生成excel

给wincc中通过vbs写excel的方式做报表的初学者一点脚本 我对该帖子不做任何限制,都可以自由拷贝使用。方便初学者学习! //log子程序,40个数据记录,总共记录一周时间,写入excel,放到wincc 全局脚本中一分钟运行一次 //如果是要整点报表也简单,判断一下当前的系统时间,t的初始值根据当前时间定义。//本程序主要是演示数据记录的过程。 //在c:\建立一个excel文件,该文件可以是你的报表模版 Option Explicit Function action Dim objExcelApp,objExcelbook,objExcelSheet Dim tagshijian,sheetname,username,zhushi Dim tagday Dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21, a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40 Dim i,j,t,count Dim msg Dim patch,fn Dim d,m,y,oh,mm,ss d=" " m="-" y="-" oh=":" mm=":" ss="" msg="记录报表成功" fn=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now)) patch="c:\"&fn&".xls" Set a1=HMIRuntime.Tags("a1") Set a2=HMIRuntime.Tags("a2") Set a3=HMIRuntime.Tags("a3") Set a4=HMIRuntime.Tags("a4") Set a5=HMIRuntime.Tags("a5") Set a6=HMIRuntime.Tags("a6") Set a7=HMIRuntime.Tags("a7") Set a8=HMIRuntime.Tags("a8") Set a9=HMIRuntime.Tags("a9") Set a10=HMIRuntime.Tags("a10") Set a11=HMIRuntime.Tags("a11") Set a12=HMIRuntime.Tags("a12") Set a13=HMIRuntime.Tags("a13") Set a14=HMIRuntime.Tags("a14") Set a15=HMIRuntime.Tags("a15")

wincc功能使用总结

1、Wincc online trend控件实现多条曲线查询 项目要求,查询任意时段内的两条曲线的历史数据 1、首先在变量记录中设置需要记录的变量,如果需要在一个控件内显示两条曲线,做数据 归档时,归档属性最好是一致的,归档属性不一样是否会出现问题,这个没测试,有兴趣的可以测试一下。 2、数据记录设置OK后,新建画面插入online trend控件,我的项目需要把趋势打印出来, 所以把控件的工具栏全部隐藏。 3、双击online trend控件,添加需要显示的归档变量。选择公共X,Y轴等参数。坐标显示 根据自己使用选择,基本上不用设置太多参数。 4、添加需要显示的历史归档变量后,就需要写脚本了,西门子工控网论坛有实例,实例提 示针对于一条曲线时使用,咨询西门子技术支持,如果需要同时显示两条曲线时,需要对两条曲线分别进行设置属性“控件.index=0,1”,但是测试其实只设置index=0的起始及结束时间就OK,就是论坛给的实例不是只针对于一条曲线,两条曲线时同样适用,再多的曲线就没测试了。 5、西门子默认的时间格式为“MM-DD-YYYY HH-MM-SS”格式,所以在设置趋势起始及 结束时间时需要注意。 6、注:导入归档数据需要一定的时间,建议按钮触发。尝试在画面打开时触发脚本,有的 时候会出现历史数据加载不上来。 7、脚本如下,仅供参考 Dim objConnection Dim strConnectionString Dim strSQL Dim objrs Dim chaxun '定义曲线控件 Dim TREND Dim strval_1

Dim strval_2 Dim strval_t1 Dim strval_t2 '初始化程序,省略N行。。。。。。。。。。。。。。。。。。。。。。。。。。。。 '初始化程序,省略N行。。。。。。。。。。。。。。。。。。。。。。。。。。。。 chaxun=HMIRuntime.Tags("管号查询输入").Read strConnectionString = "Provider=MSDASQL;DSN=REPORT;UID=;PWD=;" strSQL = "select * from report where guanhao='"&chaxun&"';" Set objConnection = CreateObject("ADODB.Connection") objConnection.ConnectionString = strConnectionString objConnection.Open Set objrs = CreateObject("ADODB.RecordSet") objrs.open strSQL,objConnection /赋值程序,省略,,,,,,,,,,,,,,,,,,,,,,/ /赋值程序,省略,,,,,,,,,,,,,,,,,,,,,,/ objrs.close Set objrs = Nothing objConnection.Close Set objConnection = Nothing '趋势时间设定 Set trend = ScreenItems("控件1") strval_r=HMIRuntime.Tags("测试日期_read").Read strval_t1=HMIRuntime.Tags("开始时间_read").Read strval_t2=HMIRuntime.Tags("测试时间_read").Read

组态上位机WINCC与PLC通讯连接

WINCC与PLC通讯连接 1.STEP 7 硬件组态 STEP7设置MPI通讯, 2.安装CP5611通讯板卡 3.添加驱动程序和系统参数设置 打开WINCC工程在Tag Management-->SIMATIC S7 PROTOCOL SUITE->MPI 右键单击MPI,在弹出菜单中点击System Parameter,弹出System Parameter-MPI对话框,选择Unit标签,查看Logic device name(逻辑设备名称)。默认安装后,逻辑设备名为MPI 4.设置Set PG/PC Interface 进入操作系统下的控制面板,双击Set PG/PC Interface图标。在Access Point of the Application:的下拉列表中选择MPI (WINCC),如图1.4所示,而后在Interface Parameter Assignment Used:的列表中,点击CP5611(MPI),而后在Access Point of the Application:的下拉列表中显示:MPI (WINCC)?CP5611(MPI), 设置CP5611的通讯参数,点击Proerties….按钮,弹出Properties-CP5611(MPI)属性对话框,设置参数 重要的参数如下所示: Address: CP5611的地址(MPI地址必须唯一,建议设置为0) Transmission Rate: MPI网络的传输速率(默认为187.5Kbps)您可以修改,但必须和实际连接PLC的MPI端口的传输速率相同) Highest Station Address: MPI网络的最高站地址(必须和PLC的MPI网络参数设置相同) 诊断MPI网络,点击Diagnostic…按钮,进入诊断对话框。如下图所示:Test按钮点击后,显示OK表示CP5611工作正常。点击“Read”按钮后,将显示所有接入MPI网络中的设备的站地址,如果只能读到自己的站地址,此时,请查看MPI网络和硬件连接设置,只有成功读取到CPU的站点地址,才能进行以下的步骤,否则,不可能建立通讯。 .添加通道与连接设置 添加驱动连接,设置参数。打开WINCC工程在Tag Management-->SIMATIC S7 PROTOCOL SUITE->MPI,右键单击MPI,在下拉菜单中,点击New Driver Connection,如图1.7所示,在弹出的Connection properties对话框中点击Properties按钮,弹出Connection parameters-MPI属性对话框 重要的参数如下所示: Station Address:MPI端口地址 Rack Number:CPU所处机架号,除特殊复杂使用的情况下,一般填入0 Slot Number:CPU所处的槽号

WinCC和EXCEL数据传递

1、DDE简介 动态数据交换(DDE)是基于Windows的消息机制,两个Windows应用程序通过相互之间传递消息进行“对话”,这两个程序被分别称为“服务器”和“客户”。DDE服务器是一个维护着其他Windows程序可能使用的数据程序,而DDE 客户则是从服务器获得这些数据的程序。 DDE对话是由客户程序发动的。客户程序将一条称为WM_DDE_INTITIATE的消息发给当前运行的所有Windows 程序,这条消息指明了客户程序所需要的数据类别,拥有这些数据的DDE服务器可以响应这条消息,这样一个对话就 开始了。 DDE的对话方式有3种: ①服务器数据变化时,直接把数据送给客户,由客户对这些数据进行处理,这类对话方式称为热链;②服务器的数据变化时,服务器通知客户,再由客户取数据,这种方式称为温链;③由客户申请数据、 服务器发送数据的方式称为冷链。 一、Wincc作为DDE的客户端,Excel作为DDE服务器(本地) 1、在变量管理上按鼠标右键--添加新的驱动程序--选“windows dde.chn” 图1 2、在DDE上按鼠标右键--新驱动程序连接--点属性,在其连接属性中: “计算机名称”为空;“应用程序”为excel;“主题”为[]工作表名,比如[DDE.xls]sheet1。

图2 3、在DDE\excel下建变量,在变量属性中选择地址,条目名称填:r行数c列数,比如r1c1(表示第一行 第一列的单元格),重复步骤3可以加入更多的DDE变量 图3 4、Excel程序 图4 Wincc程序 图5 5完成

用OPC做比较省事。 WinCC做OPC Server,Excel做OPC Client。 这种情况下,WinCC端不需要做任何设置,只要在Excel 里用少量的代码就能实现双方的通讯。 对于WINCC与S7-300的通讯,首先要确定PLC的通讯口类型,PLC一般都集成了MPI/DP口,还可以安装通讯模块。计算机(PC)上安装适当的通讯卡(不同的通讯卡支持的通讯协议不同)。看你需要啦! 其次是WINCC软件里的通讯协议要与PC机对应。WINCC提供了SIMATIC S7 PROTOCOL SUITE 通讯驱动程序,包含了多种通讯协议! 最终还有自己亲自实际操作了才有深刻的了解的!! Sub X6309X94AE9X0000X6539_OnClick(Byval Item) Dim fso,myfile Set fso = CreateObject("scripting.FileSystemObject") Set MyFile = fso.GetFile("d:\Excelcode.xls") Dim ObjExcelApp Set objExcelApp = CreateObject("Excel.Application") 'objExcelApp.Visible = True objExcelApp.Workbooks.Open MyFile '上面的程序段是为了打开d盘下叫Excelcode.xls名字的excel文件 objExcelApp.worksheets ("sheet1").Cells(1, 1).VAlue = HMIRuntime.Tags("usercodenew1").read objExcelApp.ActiveWorkbook.Save '上面两行的作用是将wincc变量"usercodenew1"的值写到Excel表中的A1格子里面,并且保持一下 Dim coldold Set coldold=HMIRuntime.Tags("usercodeold1") coldold.Value = objExcelApp.worksheets ("sheet1").Cells(1, 1).value '上面这两句的作用是将刚才保持到Excel表格中的数据重新读回wincc,存到"usercodeold1"变量中,当然现在其实并没有存入"usercodeold1"变量,只是存在了叫coldold的临时变量里面 objExcelApp.Workbooks.Close objExcelApp.Quit Set ObjEXceLapp = Nothing '到这里为止,我们可以通过上面的语句关闭刚才打开的excel程序了 coldold.Write '最后是把读到的excel值从临时变量coldold中写入它对应的"usercodeold1"变量中 End Sub 上面这个例子已经调试通过。网上有很多wincc值写入excel中的例子,一直找不到从excel中读取数据到wincc中的例子,结合网上朋友的一些经验,这里给出个小例子,供大家参考。

WINCC脚本个人经验总结

语音报警的组态 在工业现场安全是极其重要的,无论从那个角度讲我们应该利用一切手段减少故障的发生。在故障已经发生的时候,应该在第一时间以多种方式通知操作人员有故障发生。现代微处理计算机的处理速度可以完全胜任对于图形,语音地同时处理。所以我们可以利用计算机的声卡和音箱在有故障发生的时候产生语言报警,但是问题是WinCC本身并不能产生语音的功能,而且其内部的上千个函数也没有提供处理声音的函数。解决这个问题的方法归功于微软开发的WinCC与操作系统地完美结合,因为在WinCC中可以直接调用Windows的API函数。实现的具体C脚本代码如下: long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma code(\"Winmm.dll\") void WINAPI PlaySoundA(char *pszSound,char *hmode,DWORD dwflay); #pragma code() if(GetTagBit(\"112排泥备泵故障\")) PlaySoundA(\"d:\\\\\\\\winnt\\\\\\\\media\\\\\\\\Mircosoft sound.wav\",NULL,8); return 1020; }重新启动后,不使用登录窗口如何以一个缺省用户的身份自动登录?怎样确保运行期间有个缺省用户始终处于登入状态?即使另外一个用户已经预先退出。 解答: 重新启动以及在运行期间,您希望HMI系统达到最小的实用性而不使用登录窗口。然而,对于高级操作,登录功能应当保留。此外,如果没有用户登录,则有一个缺省的用户自动登录。缺省用户的权限可以在用户管理器中根据需要设定。 可使用下面的C脚本执行此项功能,请按照下列步骤进行: 将附件中的函数“Silentlogin.pas”复制到项目中的“PAS”子文件夹中。 在项目中选择Global Script > C Editor > Actions > Global Actions并打开全局动作(Global Action)“Silentlogin.pas”。 在“PWRTSilentLogin (“Login”,“Password”);”一行中,用缺省的用户名替换用户“Login”,用缺省用户的口令代替“Password”。 无限循环命令 static int a=0, b=0; if(GetTagBit("BINi_pictu_dyn_09")) { if(b==0) a++; else a--; if(a==7) b=1; if(a==0) b=0; }

在wincc 中怎么做才能把报表生成按日期的excel 文件

在wincc 中怎么做才能把报表生成按日期的excel 文件在wincc 中怎么做才能把报表生成按日期的Excel 文件 VBS脚本实现,就是把文件名称以变量的形式表示。参考 '关闭保存 Dim patch,filename filename=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))&CStr(Hour(N ow))+CStr(Minute(Now))&CStr(Second(Now)) patch= "d:\"&filename&"demo.xls" objExcelApp.ActiveWorkbook.SaveAs patch objExcelApp.Workbooks.Close objExcelApp.Quit Set objExcelApp= Nothing 对于Excel报表,用VBS最灵活,Excel 定义好格式后wincc来填空,平均累计值就用Excel 的功能。 Dim excelapp Dim aa,bb,cc Set excelapp = CreateObject("Excel.Application") Set aa = HMIRuntime.tags("tag1") excelapp.visible = False'True excelapp.workbooks.open "D:\excel.xls" bb = Now 'getcurrent_datetime() aa.Read MsgBox CStr(bb) excelapp.cells(1,1).value = "rrrrrr"'111111 excelapp.cells(1,2).value = CStr(bb)

WinCC脚本案例保留

WinCC脚本案例保留 2010-09-16 16:44 最近做一个WinCC跟ERP通讯的一个小项目,将脚本语言保留下来,以备不时之需! 仅仅是保留,各位看官如发现不妥之处请加以指教. 1.通过扫描枪扫描到ID号传给PLC,WinCC读取到ID号从ERP数据库中查找相关数据,写回到PLC,并给PLC一个写完成确认信号.(数据库是SqlServer2000) Dim DB240trigger,db241trigger db240trigger=HMIRuntime.Tags("db240itrigger").Read db241trigger=HMIRuntime.Tags("DB241itrigger").Read Dim ss,str str=HMIRuntime.Tags("DB240szcoil_ID").Read ss=CStr(str) If (db240trigger=1 And db241trigger=0 ) Then Dim sPro,sDsn,sSer,sCon,sSql Dim oRsMaterial,conn,oCom,oItem,oRsSCHEMA Dim database,server,uid,pwd sCon ="driver=sql server;server=10.51.103.96;DATABASE=brgs_release;uid=sa;pwd=pasword" Set conn = CreateObject("ADODB.Connection") conn.ConnectionString = sCon conn.Open Set oRsMaterial = CreateObject("ADODB.Recordset") sSql= "SELECT * FROM dbo.BRGS_GP_Material where MkNo='" & CStr(ss) & "'" oRsMaterial.open ssql,conn,1,1 Dim m,n m=oRsMaterial.recordcount If m<>1 Then MsgBox "这个ID号找不到唯一的一条参数信息,请手动输入信息!" Exit Function End If Dim sCon2,sSql2

【WinCC】使用VBS读取报警记录数据到EXCEL

【WinCC】使用VBS读取报警记录数据到EXCEL 1概述 介绍如何在WinCC项目中使用VBS脚本读取报警记录归档数据,并把获取的数据保存成新的Excel文件。 2软件环境 Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2007 3访问原理 WinCC报警记录数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。 当使用OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中:Catalog为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。Data Source 为服务器名称,格式为“<计算机名称>\WinCC”。 3.1 查询语句格式 查询语句的格式要求如下: AlARMVIEW:SELECT * FROM [ WHERE……optional ] 其中参数信息如下所示: ViewName:数据库表名。必须用需要的语言指定该表。 比如:中文字符表名为:ALGVIEWCHT,英文字符表明为:ALGVIEWENU等。 Condition:为过滤标准。 详细说明请参见下表:

表1查询参数表 3.2查询结果 查询结果作为记录集返回。可以根据需要有选择的返回特定的数据集。例如:oRs.Fields(0).Value 返回的是消息的编号;oRs.Fields(2).Value 返回的是消息的时间戳;oRs.Fields(37).Value返回的是消息文本的内容。记录集的结构如下表所示:

Wincc报表Excel

Sub OnClick(Byval Item) Dim MyVar1 Dim MyVar2 Dim objExcel Dim wb Dim xlsheet Dim rangee Dim Years,mounth,Days,hours,min,sec,daysweek Dim jj,kk,year1,mounth1,Days1,hours1,min1,sec1 Dim yi,er,san,si,wu,i,i1,lei,lei1,lei2,lei3,lei4,lei5 Dim zhou,yue,nian Dim shi,feng,miao,mytime Dim MyHour,MyMinute,myday,mymonth,myyear,a,b,c,d,e,f Set MyVar1=HMIRuntime.Tags("MyVar1") MyVar1.Write Date Set MyVar2=HMIRuntime.Tags("MyVar2") MyVar2.Write Time year1 = CStr(MyVar1.value) mounth1 = CStr(MyVar2.value) kk="d:\report2\" jj=".xls" Set yi = HMIRuntime.Tags("hunhe_1") yi.Read Set er = HMIRuntime.Tags("hunhe_2")

er.Read Set san = HMIRuntime.Tags("hunhe_3") san.Read Set si = HMIRuntime.Tags("hunhe_4") si.Read Set wu = HMIRuntime.Tags("hunhe_5") wu.Read Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set wb=objExcel.Workbooks.Open ("c:\ExcelExample2.xls") Set xlsheet = wb.sheets("Sheet1") xlsheet.range("B4").Value=yi.Value xlsheet.range("C4").Value=er.Value xlsheet.range("D4").Value=san.Value xlsheet.range("E4").Value=si.Value xlsheet.range("F4").Value=wu.Value wb.SaveAs kk & year1 & jj wb.CLOSE objExcel.quit wb=Nothing

VB操作wincc脚本心得

Vbs 操作wincc画面脚本总结 一:不使用变量单纯的操作界面 1.操作某个画面中控件的属性如Home1.Pdl(总窗体)下的画面窗口2(画面窗口) Sub OnClick(ByVal Item) Dim objCircle Dim screenname Dim pwname Set objCircle= ScreenItems("圆1" ) objCircle.Radius = 60 Set screenname=HMIRuntime.Screens("Home1") //获取要操作的窗体 Set pwname=screenname.ScreenItems("画面窗口2") //获取要操作的控件,这里填入你要操作的控件名 MsgBox(objCircle.Radius) //输出圆的半径 MsgBox (pwname.Picturename) //输出当前画面窗口2的名字 End Sub 注意当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值例如 Dim object Dim value Set object =HMIRuntime.Screens("Home1").ScreenItems("画面窗口2") Set value=object.picturename 2.更改画面窗口的对象 Sub OnClick(Byval Item) Dim opObject Set opObject=HMIRuntime.Screens ("Home1").ScreenItems("画面窗口2") opObject.PictureName="Page1.Pdl" End Sub 3.设置文本 Set titleTxt=HMIRuntime.Screens ("Home1").ScreenItems("静态文本2") titleTxt.Text =titleTxt.Text+"EF" //获取文本的值并追加字符 4.vb 字符串函数 VB的字符串截取函数有Left(字符串,n),返回字符串前N个字符;Mid(字符串,p,n),从第p个字符开始,向后截取N个字符;right(字符串,n),返回字符串的最后n个字符。 获取下标

相关文档
最新文档