利用DDE技术实现PB与EXCEL的数据通讯
利用DDE通信将PLC数据传输到EXCEL
利⽤DDE通信将PLC数据传输到EXCEL前⾔:微软的Office办公软件功能⾮常强⼤,特别是Excel对数据的分析更是臻于完美。
在⼀些特殊的场景,需要将PLC的实时数据传输到Excel中,利⽤其强⼤的数据处理功能进⾏分析,以便进⾏监视和决策。
如何来实现PLC与Excel进⾏数据交换呢?由于RSLinx和Excel都⽀持DDE,这将使得这⼀需求变得容易多了。
⼀、DDE是什么1、DDE(Dynamic Data Exchange),是⼀种动态数据交换机制。
2、使⽤DDE通讯需要两个Windows应⽤程序,其中⼀个作为服务器处理信息,另外⼀个作为客户机从服务器获得信息。
3、客户机应⽤程序向当前所激活的服务器应⽤程序发送⼀条消息请求信息,服务器应⽤程序根据该信息作出应答,从⽽实现两个程序之间的数据交换。
⼆、情景设定1、夏季已经到了,很多地区更是进⼊了暴⾬季节;2、某⼚区使⽤的AB PLC控制系统进⾏⾬⽔检测及排放;3、该⼚领导要求在其办公室能实时查看3个集⽔井的液位变化,其他数据不需要接⼊。
三、⽅案设计1、由于只需要查看3个液位数据,如果在其办公电脑上安装上位机软件费时费⼒费财,⽽且⼤材⼩⽤,这个⽅案必须否决;2、最优⽅案是:办公电脑安装有Excel,只需要安装RSLinx,利⽤DDE将PLC⾥的集⽔井液位数据传输到Excel,再应⽤其图表分析功能实时显⽰液位数据。
四、⽅法步骤1、Studio 5000的控制器标签⾥存放有3个集⽔井实时液位变量LT[1]、LT[2]、LT[3].2、在已经安装好的RSLinx中,点击DDE/OPC菜单,选择Topic Configuration.3、在弹出的配置窗⼝,按下图标识的顺序进⾏,该步骤是将PLC控制器指定到⼀个DDE通道(testDDE,其名称可顺便填写)。
4、在Edit菜单中,选择Copy DDE/OPC Link,这时出现刚才已经建好的testDDE通道,选择在线,找到1#集⽔井液位变量LT[1],点OK.5、打开Excel,编辑好相关信息,在1#集⽔井实时液位表格单击右键--选择性粘贴—粘贴链接—确定,这样就把PLC中的变量复制到Excel表格中了.6、其他2#、3#集⽔井的液位值只需要把1#变量中的LT[1]改为LT[2]、LT[3]即可.7、光有数据显⽰不是很直观,这时,是Excel的图表发挥其强功能的时候了,按下图顺序操作,将数据变为柱形图显⽰。
Excel中的数据连接技巧实现多表联动分析
Excel中的数据连接技巧实现多表联动分析在Excel中,数据的分析和处理是非常常见且重要的工作。
在处理大量数据时,常常需要进行多表之间的联动分析,以获取更全面和准确的结果。
本文将介绍一些Excel中的数据连接技巧,帮助您实现多表联动分析。
一、数据连接的基础概念在进行多表联动分析之前,我们首先需要了解数据连接的基本概念。
在Excel中,数据连接是指将不同数据表中的相关数据进行关联,并根据这些关联关系进行数据的分析与处理。
常见的数据连接方式有三种:基于单元格的连接、基于公式的连接和基于数据透视表的连接。
1. 基于单元格的连接基于单元格的连接是通过在目标单元格中输入相应的链接公式,将源数据表中的数据引用到目标单元格中。
例如,要将A1单元格与Sheet2的B2单元格连接,则可以在A1单元格输入"=Sheet2!B2"来实现连接。
这样,在A1单元格中就能显示Sheet2中B2单元格的内容。
2. 基于公式的连接基于公式的连接是通过在目标单元格中使用特定的公式,引用和计算源数据表中的数据。
例如,如果我们有两个数据表,分别为Sheet1和Sheet2,在Sheet3中想要计算这两个表中数据之和,可以使用公式"=SUM(Sheet1!A1:A10, Sheet2!A1:A10)"来实现连接。
3. 基于数据透视表的连接基于数据透视表的连接是通过将不同表中的数据整合到一个数据透视表中,从而实现数据的联动分析。
使用数据透视表可以方便地对多个表的数据进行筛选、汇总和分析。
在Excel中,我们可以通过插入数据透视表来实现这一功能。
二、数据连接的实际应用接下来,我们将通过一个实例来演示如何利用Excel中的数据连接技巧进行多表联动分析。
假设我们有两个数据表,一个是销售订单表,另一个是客户信息表,我们想要通过这两个表来分析各个客户的销售情况。
1. 准备数据首先,我们需要准备好销售订单表和客户信息表的数据。
Wincc与Excell数据交换实例一二
Wincc与Excell数据交换实例一二Wincc与Excell数据交换实例一二Liking5200,sdyjdx关键字:Wincc,Excell,数据交换,动态数据交换(DDE)现实工程中,经常会遇到重要的参数存储子Excell表格中,在Wincc组态画面中,根据现场参数数值,查询调用对应Excell表格内的数据,同时根据经验在此将更新参数重新保存到Excell中去,这就要求我们实现Wincc与excell的通讯读写。
本文通过两个实例,介绍两种Wincc与excell的读写方法。
实例1Excell不做任何处理,通过Wincc按钮创建C动作,实现对Excell 的读写。
首先建立Excell文件,如d:\\Wincc_Excell_RW.xls。
内容如下:Wincc,建立四个内部变量:ReadExcell_X,Excell_Address_R,WriteExcell_X,Excell_Address_W,分别代表读取的数据,读取地址,写入的数据,输入地址,并在组态画面组态四个IO域与之相对应,组态两个按钮“按钮-读-Excell-X”,“按钮-写-Excell-X”,启动读写功能。
为了数据通用,变量类型定义为“文本变量16位字符集”,四个IO域数据格式选“字符串”,根据需要也可设为其他数据类型,但要确保Wincc与Excell相同,不然将发生读写错误或读取不正确。
按钮“按钮-读-Excell-X”,“按钮-写-Excell-X”,分别创建C动作如下按钮“按钮-读-Excell-X”,C动作:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char*lpszPropertyName){#pragma code("Shell32.dll") //调用动态链接库char tag1[20],tag2[20],add[20];__object* pExcel = NULL; //建立 pExcel 指针用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统 - ");if (MessageBox(handle,"Start Reading","Read From Excell", MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES){ pExcel = __object_create("Excel.Application");pExcel->Visible = 0;pExcel->Workbooks ->Open ("d:\\Wincc_Excell_RW.xls");strcpy(add,GetTagChar("Excell_Address_R"));strcpy(tag1,pExcel->Worksheets("sheet1")->Range(add)->V alue);SetTagChar("ReadExcell_X",tag1);//将地址Excell_Address_R,excel文件里面的内容写到外部变量ReadExcell_XpExcel->Quit();//退出Excel}__object_delete(pExcel);}按钮“按钮-写-Excell-X”,C动作:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma code("Shell32.dll")//调用动态链接库char tag1[20],tag2[20],add[20];__object* pExcel = NULL; //建立 pExcel 指针用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统 - ");if (MessageBox(handle,"Start Writing","Write Into Excell",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES) { pExcel = __object_create("Excel.Application");pExcel->Visible = 0;//控制excel文件是否可见,当1时,excel文件可见.pExcel->Workbooks ->Open ("d:\\Wincc_Excell_RW.xls");strcpy(add,GetTagChar("Excell_Address_W"));pExcel->Worksheets("sheet1")->Range(add)->Value =GetTagChar("WriteExcell_X");if (MessageBox(handle,"Save the Excell","Write Into Excell", MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES) //{ } pExcel->ActiveWorkbook->Save();pExcel->DisplayAlerts = 0;pExcel->Workbooks->Close();//关闭文件pExcel->Quit();//退出Excel}__object_delete(pExcel);}运行情况如下:读B1数据:点击是读C5数据:点击是写B1数据:点击是然后再读取B1:点击是如此,我们可以对Excell文件d:\\Wincc_Excell_RW.xls ――Sheet 1的任意数据进行读写。
如何在Excel中实现数据联动
如何在Excel中实现数据联动在日常工作和数据处理中,Excel 是一款强大且常用的工具。
当我们面对大量数据时,实现数据联动可以大大提高工作效率,减少错误,并使数据更加清晰和易于管理。
那么,如何在 Excel 中实现数据联动呢?接下来,让我们逐步深入了解。
首先,我们需要明确什么是数据联动。
简单来说,数据联动就是当一个单元格或区域的数据发生变化时,与之相关联的其他单元格或区域的数据能够自动相应地更新。
这种关联可以是基于公式、数据验证、函数等多种方式实现的。
一种常见的数据联动方式是通过使用公式。
例如,我们有两个工作表,一个是“销售数据”,另一个是“汇总表”。
在“销售数据”工作表中,我们记录了每天的销售明细,包括产品名称、销售数量和单价。
而在“汇总表”中,我们希望能够自动计算出每种产品的总销售额。
在“汇总表”中,我们可以使用 SUMIF 函数来实现数据联动。
假设“销售数据”工作表中产品名称在 A 列,销售数量在 B 列,单价在 C 列。
在“汇总表”中,产品名称在 A 列,我们在对应的 B 列输入公式:=SUMIF(销售数据!A:A,A2,销售数据!C:C销售数据!B:B) 。
这个公式的意思是,在“销售数据”工作表的 A 列中查找与“汇总表”中 A2 单元格相同的产品名称,然后将对应的单价乘以销售数量,并将结果相加。
这样,当“销售数据”工作表中的数据发生变化时,“汇总表”中的总销售额会自动更新。
除了SUMIF 函数,VLOOKUP 函数也是实现数据联动的常用工具。
比如,我们有一个员工信息表,包含员工编号、姓名、部门、工资等信息。
现在我们需要在另一个工作表中根据员工编号查找并显示对应的姓名和工资。
在新的工作表中,我们可以使用 VLOOKUP 函数。
假设员工编号在A 列,姓名在B 列,工资在C 列。
在需要显示姓名的单元格中输入公式:=VLOOKUP(A2,员工信息表!A:C,2,FALSE) ,在需要显示工资的单元格中输入公式:=VLOOKUP(A2,员工信息表!A:C,3,FALSE) 。
在PB中利用DDE
在PB中利用DDEPowerBuilder(以下称PB)是一种强有力的企业级数据库应用系统开发工具,利用它可以方便地开发出数据库系统的前台应用软件。
但由于用PB所开发的报表具有一定的局限性:报表的表头、列宽等都不能在应用程序中由用户来进行调整,所以若用户报表的格式有所变动,则必须在原程序中对报表进行调整,这在很大程度上降低了软件的灵活性。
Excel是Microsoft 公司的表格处理软件,由于其简单易用,近年来在各单位的报表处理中得到广泛的应用。
那么,在应用程序中是否可以调用Excel,让用户在用PB开发的应用程序中管理数据库中的数据,而在用户熟悉的Excel表格处理软件中调整并打印报表呢?答案是肯定的,本文介绍如何利用动态数据交换DDE(Dynamic Data Exchange)技术,在PB中把数据库中的数据传送到Excel应用程序中,以便由用户在Excel中调整打印报表。
DDE用于在Windows平台上的两个正在运行的应用程序之间动态交换数据,它是一种在Windows操作系统中基于消息的协议。
动态数据交换总是发生在两个正在运行的程序之间,在这两个应用程序之间相互发送和接收命令及数据。
这两个正在运行的程序分别称为客户程序和服务器程序,客户程序就是请求服务的程序,而提供服务的程序称为服务器程序。
实现方法DDE应用程序在开始交换数据以前必须由客户端发出初始请求,建立与服务器端的DDE连接(又称为通道或会话)。
在建立连接后客户端可以连续向服务器发送数据请求和命令请求。
在本文的应用程序中,我们用Excel做DDE应用服务器程序,在PB中进行DDE连接。
1.启动DDE服务器应用程序Excel.exe可以在Windows环境下单独启动,也可以在PB中用run 函数启动。
PB中run函数的语法格式为:run(string{,windowstate})●string:字符型,要执行的程序文件名;●windowstate:枚举型,程序启动后的窗口状态,可以是最小化(minimized!)、最大化(maxized!)或原尺寸(normal!)。
DDE和Active自动化技术在PB和EXCEL数据交互中的编程应用
对报表进行调整 , 在很大程度上降低 了软件 这 的灵 活性 。
E C L是 Mi oot 司的表 格处 理 软 件 , XE c sf公 r
发送 和接收命令及数据 。这两个正在运行的程 序分别称为客户程序和服 务器程序 , 客户程序 就是 请 求 服务 的程 序 , 提供 服 务 的程 序 称为 而 服 务 器程 序 。 D E应 用 程 序 在 开 始 交 换 数 据 D
换) 是一种在 Wi o s n w 操作系统中基于消息的 d
维普资讯
轴承技术
20 07年第 4期
指定其 中一个作为客户端氲 口。 例如 :ad = pn hne( E cl ,C \ hnl O eC anl“ xe” “ : e
j x po u tx ) s \rd c. l z s”
维普资讯
轴承技术 te自动化技术在 P D cv i B和 E C L数据 交互中的编程应 用 XE
( 术 中心 ) 技
摘
雷
平
要 : 章介 绍 了 D E和 A te自动化 这 两 种 技术 在 Pw rule 文 D ci v o eB i r和 E C L之 间进 行 数 d XE
在客户 程序 和 服 务 器 程 序 均 启 动 之 后 , 就
动态 数据交 换 ( 以下 称 D E 技 术 在 P D ) B与 E . x C L之 间 建 立 连 接 , 行 数 据 传 递 。2 利 用 E 进 . A te uo ai 以下 称 A te 自动 化 ) ci xA tm tn( v o cv i 技 术, P 在 B中利用 CetO jc 函数建 立 E C L ra bet e X E
l e, a d, XC i f EL, t EX- s r srn sr xs l n me E ti g t
pb 和excel 如何连接
pb 和excel 如何连接两种方法OLE//连接Excelole_excel= CREATE OLEObjectIF ole_excel.ConnectTonewObject("Excel.application") <> 0 Then MessageBox("","连接Excel失败!")END IFole_excel.workbooks.open(ls_filepath,0,FALSE)Li_CountRows = ole_excel.ActiveCell.CurrentRegion.Rows.CountLi_CountColumns= ole_excel.ActiveCell.CurrentRegion.Columns.Countdw_excel.reset()ole_excel.visible = FALSE// 获取EXCEL单元格数据FOR Li_Row = 3 to Li_CountRowsLl_NewRow = dw_excel.insertrow(0)FOR Li_column = 1 to Li_CountColumnsls_cell = Ole_excel.Workbooks[1].Worksheets[1].Cells(Li_Row,Li_column).Value IF ISNULL(Ls_Cell) Then Ls_Cell = ''//插入数窗IF Ll_NewRow > 0 Thendw_excel.Setitem(Ll_NewRow,Li_column,ls_cell)END IFEND FOREND FOR//断开连接ole_excel.Quit()ole_excel.DisConnectObject()Destroy Ole_excel还可以用DDEstring s_regiondata[3]handle = OpenChannel("Excel", "REGION.XLS", &Handle(w_ddewin))GetRemote("R1C2", s_regiondata[1], handle, &Handle(w_ddewin))GetRemote("R1C3", s_regiondata[2], handle, &Handle(w_ddewin))GetRemote("R1C4", s_regiondata[3], handle, &Handle(w_ddewin))CloseChannel(handle, Handle(w_ddewin))方法2long numcols , numrows , c, rOLEObject xlapp , xlsubint ret//定义变量numcols = long(dw_product.Object.DataWindow.Column.Count)//设置行号和列号numrows = dw_product.RowCount()//获得行数xlApp = Create OLEObject//创建OLE对象ret = xlApp.ConnectToNewObject( "Excel.Sheet" )if ret < 0 thenMessageBox("连接Excel程序失败!",string(ret))returnend if//连接Excel,并检验返回值xlApp.Application.Workbooks.Open("E:\PB9\第八篇使用高级控件\实例81\useOLE.xls") //打开一个特定的Excel文件xlApp.Application.Visible = true//使该Excel文件可视xlsub = xlapp.Application.ActiveWorkbook.Worksheets[1]//确定第一个工作簿For c = 1 to numcolsFor r = 1 to numrowsxlsub.cells[r,c] = dw_product.object.data[r,c]NextNext//循环发送数据xlApp.DisConnectObject()Destroy xlapp//断开连接。
组态王通过DDE与VB和Excel通讯
组态王通过DDE与VB应用程序、Excel程序进行数据交换组态王支持通过DDE方式与其它应用程序进行数据交换,通过DDE方式用户自编的应用程序可以无缝的与组态王进行数据交换,扩充组态王的功能,为用户提供更为灵活的应用空间。
现就组态王与VB应用程序、Excel程序通过DDE方式进行数据交换的使用方法进行简要的说明:一、与Excel程序进行实时的数据交换Excel程序从组态王中获得数据1.在组态王中建立变量。
图-1建立变量”B”,并设置允许DDE访问。
(本例连接的物理设备为亚控仿真PLC)2.创建Excel数据表格,输入访问组态王变量的连接语句。
图-2选择”R1C2”单元格按如下格式输入DDE连接语句”=VIEW|TAGNAME!设备地址”,其中设备地址为在组态王中定义的IO变量的寄存器地址,其格式为”连接设备名.寄存器名”。
在本例中访问组态王中变量”B”的DDE连接语句为” =VIEW|TAGNAME!PLC.INCREA100”。
3.运行组态王的运行系统(加载演示本演示工程),Excel数据表格可以实时的得到组态王变量的数据。
组态王从Excel程序中获得数据1.创建Excel数据表格,并给工作表起名为”AAA”(参见图-2)。
2.在工作表”AAA”的R1C1单元格添加”=R1C2”的语句(在R1C1单元格引用) R1C2的值。
3.在组态王中建立Excel的DDE连接。
图-3在组态王工程浏览器→设备→DDE→新建DDE设备。
弹出设备向导(参见图-3),要求输入DDE 的连接设备名,本例为” Excel”(可按用户的实际需求命名);单击下一部(参见图-4),设置DDE的服务程序名”Excel”(Excel程序的服务名,不可更改),设置话题名”AAA”(为Excel的表格名称,可以按用户的实际需求设定),设置数据交换方式为”标准的Windows项目交换”(兼容微软应用程序DDE 数据交换)。
单击下一步(参见图-5),显示所配置DDE设备信息,确认无误后单击完成,即完成Excel DDE设备的配置。
WINCC与EXCEL通过DDE连接的问题
WINCC与EXCEL通过DDE连接的问题
WINCC与EXCEL通过DDE连接的问题
1、我阅读了通过DDE使WINCC与EXCEL的连接文档,但是貌似只能连接内部变量吧?
2、想问一下,如果我想在EXCEL中的指定单元格直接写入外部变量(实时数据),怎么做?是不是需要用内部变量当中间量呢?
3、WINCC怎么能把时间的实时变量传送到EXCEL的指定单元格中?
4、如果是要写VB脚本的话,那么是写在WINCC的全局脚本里,还是写在EXCEL的VB编辑器里呢?
最佳答案
1、可以连接内部变量和外部变量
2、不需要内部变量转换,脚本如下:
objexcelapp.worksheets(“sheet1”).cells(i,j).value=hmirunti me.ta gs(“外部变量”).read
3、和2一样
4、我是放在画面的按钮脚本里。
PB对excel的操作
PB对excel的操作Pb中对Excel文件的应用Oleobject ole_object//建立OLE对象ole_object=create oleobject//创建对象integer li_retli_ret=ole_object.connecttoobject( " ", "Excel.Application ")//建立连接if li_ret <> 0 then//如果Excel还没有打开,则新建。
li_ret=ole_object.ConnectToNewObject( "Excel.Application ") if li_ret <> 0thenmessagebox( "OLE错误", "OLE无法连接!错误号:"+string(li_ret))returnend ifole_object.Visible=trueend ifpointer oldpointer//设置鼠标oldpointer=setpointer(HourGlass!)ole_object.Workbooks.Add//新建工作薄ole_object.Application.DisplayAlerts=False//关闭警告消息对话框,防止提示ole_object.Application.Workbooks.Open(as_exccccccccccccc cccccccccccccccccccccel_filename)/ /打开Excel文件//ole_object.Application.ActiveWorkbook.SaveAs(as_text_fil ename,-4158)//把打开的Excel文件另存为//Text文件,第二参数表示数据以制表符TAB分隔ole_object.Application.Quit()//退出Excelole_object.activeworkbook.saved=true//放弃存盘ole_object.workbooks.close//关闭工作簿ole_object.Cells(1,1).Value=reptitleole_object.Range( 'A1 ').Selectole_object.Selection.Font.Size=24ole_object.selection.HorizontalAlignment=3//水平对齐方式: ole_object.Range( 'A1: '+f_columname(ll_colnum)+ '1 ').Selectole_object.Range( 'A1: '+f_columname(ll_colnum)+ '1 ').Mergeole_object.Columns(i).ColumnWidth=ld_widthole_object.Columns(i).HorizontalAlignment=3ole_object.Columns(i).Borders.LineStyle=1ole_object.Columns(i).Font.Bold=Trueole_object.cells(i,j).NumberFormat= "@ "ole_object.cells(i,j).Font.Bold=falseole_object.cells(i,j).value=ls_valueOLE_/doc/1517083172.html,edRange.Rows. CountSheets.Add基本操作:Ole_object.Workbooks.add//新建一个Excel文件Ole_object.Workbooks.Open( "FileName ")//打开一个已存在Excel文件Ole_object.ActiveWorkBook.Sheets( "SheetName ").Select//选择文件中一个工作表Ole_object.Application.Run( "MacroName ")//运行宏Ole_object.Application.Visible=TRUE//Excel文件可见Ole_object.Application.ScreenUpdating=true//设置可见属性②格式设置Ole_object.ActiveSheet.Columns( "A:U ").AutoFit//列宽自动调整Ole_object.ActiveSheet.Columns( "A:Z ").ColumnWidth=6.75//列宽Ole_object.ActiveSheet.Rows( "1:100 ").RowHeight=12//行高Ole_object.Application.StandardFont= "ArialNarrow ";//设置字体Ole_object.Application.StandardFontSize= "8 "//设置字号Ole_object.ActiveSheet.Font.Size= "8 "//设置字号Ole_object.ActiveSheet.Font.Bold=True//粗体Ole_object.ActiveSheet.Font.Italic=True//斜体Ole_object.ActiveSheet.Font.Underline=True//下划线Ole_object.ActiveSheet.Font.StrikeThrough=True//删除线Ole_object.ActiveSheet.HorizontalAlignment=3//水平:4靠右;3居中;2靠左Ole_object.ActiveSheet.VerticalAlignment=2//垂直:3靠下;2居中;1靠上Ole_object.ActiveSheet.cells(2,1).f/doc/1517083172.html,=?黑体?//设置字体Ole_object.ActiveSheet.cells(2,1).font.size=25//设置字体大小③工作区域操作:Ole_object.ActiveSheet.Range( "A1:Z10 ").Property=value//设置一个工作区域内的属性值Ole_object.ActiveSheet.Range( "A1:Z10 ").Merge//合并单元格Ole_object.ActiveSheet.Range( "A1:Z10 ").WrapText=False//自动换行禁止Ole_object.ActiveSheet.Range( "A1:Z10 ").Borders(b_type).Weight=i_val//b_type:1左边界;2右边界;3上边界;4下边界;5左上倾斜;6右上倾斜(以上为对单元格的操作)7左边界;8上边界;9下边界;10右边界;11内部垂直边界;12内部水平边界(以上为对区域的操作)//i_val:0无边界线;然后1,2,3。
如何为 Excel 写入 DDEML 服务器和使用 NetDDE
本文将引导您完成使用Visual 的 c + + 的Microsoft excel 中建立一个DDE 管理库(DDEML) 服务器应用程序,并说明了如何使用服务器远程。
回到顶端更多信息DDE (动态数据交换)的一个常见用途是创建用于DDE 客户端,例如Microsoft Excel 数据的应用程序。
例如,您可能必须连续地获取实时股票市场引号的应用程序。
使用DDE,可以从您的应用程序公开该数据并对它的访问权限与Excel 用户可以对其进行引用中使用DDE 链接其计算的权限。
这篇文章的第一部分将引导您完成建立一个非常基本DDE 服务器应用程序使用该DDEML。
它不断,更新计数器变量,并建议为它侦听任何DDE 客户端更改:1.创建一个新的Visual c + + 6.0 项目。
选择Win32 应用程序作为项目的类型并将其命名为"DdemlSvr。
当它要求您所需的项目的哪种类型时,选择"一个的空项目"。
2.将一个新的.cpp 文件添加到您的项目称为"main.cpp。
3.将以下代码粘贴到main.cpp:4.#include <windows.h>5.#include <stdio.h>6.#include <ddeml.h>7.8.9.// Globals...10.HSZ g_hszAppName;11.HSZ g_hszTopicName;12.HSZ g_hszItemName;13.int g_count = 0;14.DWORD g_idInst = 0;15.16.// Declarations:17.HDDEDATA EXPENTRY DdeCallback(UINT type, UINTfmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData,DWORD dwData1, DWORD dwData2);18.19.// WinMain()..20.int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, intnCmdShow) {21.22. // Initialize DDEML...23. if(DdeInitialize(&g_idInst, DdeCallback,APPCLASS_STANDARD, 0)) {24. MessageBox(NULL, "DdeInitialize() failed","Error", MB_SETFOREGROUND);25. return -1;26. }27.28. // Create string handles...29. g_hszAppName =DdeCreateStringHandle(g_idInst, "DdemlSvr", NULL);30. g_hszTopicName =DdeCreateStringHandle(g_idInst, "MyTopic", NULL); 31. g_hszItemName =DdeCreateStringHandle(g_idInst, "MyItem", NULL);32.33. if( (g_hszAppName == 0) || (g_hszTopicName ==0) || (g_hszItemName == 0) ) {34. MessageBox(NULL, "DdeCreateStringHandle()failed", "Error", MB_SETFOREGROUND);35. return -2;36. }37.38. // Register DDE server39. if(!DdeNameService(g_idInst, g_hszAppName,NULL, DNS_REGISTER)) {40. MessageBox(NULL, "DdeNameService()failed!", "Error", MB_SETFOREGROUND);41. return -3;42. }43.44. // Create a timer to simulate changing data...45. SetTimer(0,0,1,0);46.47. // Message loop:48. MSG msg;49.50. while (GetMessage(&msg, NULL, 0, 0)) {51. // On WM_TIMER, change our counter, andupdate clients...52. if(msg.message == WM_TIMER) {53. g_count++;54. DdePostAdvise(g_idInst, g_hszTopicName,g_hszItemName);55. }56. TranslateMessage(&msg);57. DispatchMessage(&msg);58. }59.60. return msg.wParam;61.}62.63.64.// Our DDE Callback function...65.HDDEDATA EXPENTRY DdeCallback(UINT wType, UINTfmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2) {66.67. switch (wType) {68.69. //----------------------------------------------------------------70. case XTYP_CONNECT:71. // Client is trying to connect. Respond TRUEif we have what they want...72. if ((!DdeCmpStringHandles(hsz1,g_hszTopicName)) &&73. (!DdeCmpStringHandles(hsz2,g_hszAppName)))74. return (HDDEDATA)TRUE; // SERVERsupports Topic|Service75. else76. return FALSE; // SERVER does notsupport Topic|Service77.78. //----------------------------------------------------------------79. case XTYP_ADVSTART:80. // Client starting advisory loop.81. // Say "ok" if we have what they are askingfor...82.83. if((!DdeCmpStringHandles(hsz1,g_hszTopicName)) &&84. (!DdeCmpStringHandles(hsz2,g_hszItemName)))85. return (HDDEDATA)TRUE; // SERVERsupports Topic|Service86. else87. return FALSE; // SERVER does notsupport Topic|Service88. //----------------------------------------------------------------89.90.91. case XTYP_ADVREQ:92.93. // Client wants our data. Since this isspecific to Excel, we'll94. // go ahead and assume they wantXlTable-formatted data. For a95. // generic DDE server, you might want tohandle various formats96. // specified by the passed in fmt parameter.97.98. if(!DdeCmpStringHandles(hsz1,g_hszTopicName) &&99. !DdeCmpStringHandles(hsz2,g_hszItemName)) {100.101. short xltableData[100];102.103. // tdtTable record...104. xltableData[0] = 0x0010; // tdtTable105. xltableData[1] = 4; // 2 short ints following106. xltableData[2] = 1; // # rows107. xltableData[3] = 1; // # cols108.109. // tdtInt record...110. xltableData[4] = 0x0006;111. xltableData[5] = 2;112. xltableData[6] = (short)g_count;113.114. return DdeCreateDataHandle(g_idInst, (UCHAR*)xltableData, 2*7, 0, g_hszItemName, fmt, 0);115. }116. //----------------------------------------------------------------117. default:118. return (HDDEDATA)NULL;119. }120.}121.编译并运行该项目。
PB对excel的操作
PB对excel的操作随着科技的发展,电子表格软件已经成为了工作和学习中不可或缺的工具。
而Excel作为最常用的电子表格软件之一,在个人和企业的日常操作中扮演着重要的角色。
本文将介绍PB(Peanut Butter)对Excel 的操作,包括基本操作、数据处理与分析、图表制作、公式运用等内容。
一、基本操作1. 打开与关闭工作簿PB可通过点击文件选项卡,选择“打开”命令来打开Excel工作簿。
在使用完成后,点击右上角的“关闭”按钮即可关闭工作簿。
2. 插入与删除工作表PB可在Excel中插入新的工作表,点击工作表选项卡后,在“工作表组”中选择“插入工作表”即可。
要删除工作表,PB只需选中要删除的工作表,然后点击右键选择“删除”。
3. 数据输入与编辑PB可将数据直接输入到单元格中,通过使用方向键或鼠标切换到需要编辑的单元格,然后键入相应的数据。
若需要编辑已有的数据,PB只需选中要编辑的单元格,然后直接键入新的数据。
二、数据处理与分析1. 数据筛选与排序PB可使用Excel提供的筛选功能,选择需要操作的数据范围,在“数据”选项卡中选择“筛选”按钮,然后根据需要进行筛选条件的设置。
对于数据排序,PB可通过选择需要排序的数据范围,在“数据”选项卡中选择“排序”按钮,按照指定的排序规则进行排序。
2. 数据透视表的制作PB需首先选中所要制作透视表的数据范围,然后在“插入”选项卡中点击“透视表”按钮。
在弹出的对话框中,PB可选择需要作为行、列和数据的字段,从而生成需要的透视表。
三、图表制作1. 制作柱状图PB需选中需要制作柱状图的数据范围,然后在“插入”选项卡中点击“柱状图”按钮。
在弹出的图表类型中,PB可选择适合的柱状图样式,并对图表效果进行调整。
2. 制作折线图PB需选中需要制作折线图的数据范围,然后在“插入”选项卡中点击“折线图”按钮。
在弹出的图表类型中,PB可选择适合的折线图样式,并进行必要的调整和编辑。
将串口接收到的数据保存到EXCEL
《一》用VB DDE通讯!《二》1.启动excel从:工具-->宏-->Visual Basic 编辑器,打开excel VBA.2.在ThisWorkbook上右单击鼠标选择插入--用户窗体3.单击一下插入的窗体,单击菜单上的--工具--附加控件--选择Microsoft Communications Control, version 6.04.在窗体上添加mscomm1,添加commandButton15.单串口机子,短接rs232的2脚和3脚,双串口机子用232线连接两个串口,注意2、3线交叉,我这里以单串口短接举例。
6.复制以下代码到你的窗体里:VB code'VBA代码Private Sub CommandButton1_Click()MSComm1.Output = "BEG1END"End SubPrivate Sub MSComm1_OnComm()Dim t1 As Long, com_String As StringStatic i As Integert1 = TimerSelect Case mEventCase comEvReceive '收到RThreshold定义的字符数1字节MSComm1.RThreshold = 0DoDoEventsLoop While Timer - t1 < 0.1 '延时时间自己调整com_String = MSComm1.InputMSComm1.RThreshold = 1i = i + 1: If i > 255 Then i = 1Application.Cells(3, i).Value = com_StringEnd Select'ActiveWorkbook.SaveAs Filename:="C:\d1.xls"End SubPrivate Sub iniMscomm()'On Error Resume Next'=====-----初始化通信串口-----=====mPort = 1 '使用COM1MSComm1.Settings = "9600,N,8,1" '9600 波特,无奇偶校验,8 位数据,一个停止位MSComm1.PortOpen = True '打开端口MSComm1.RThreshold = 1 '缓冲区有1个字节就产生OnComm事件MSComm1.InputLen = 0 '为0 时,使用Input 将使MSComm 控件读取接收缓冲区中全部的内容。
在PowerBuilder中利用DDE与Excel的数据通信
在PowerBuilder中利用DDE与Excel的数据通信
李涨生;张思民
【期刊名称】《计算机时代》
【年(卷),期】1998(000)009
【摘要】0、前言 Windows是一个多任务、多进程的软件平台。
在Windows环境下,不同的应用程序之间是可以通过彼此发送信息和传递数据来实现进程间的通
信(Interprocess Communication,IPC),在Windows环境下最通用的IPC方法有
动态数据交换(DDE)、对象链接和嵌入(OLE)、对动态链接库(DLL)的外部函数调用、文件访问及Windows剪贴板等等。
本文将介绍DDE技术,及其在PowerBuilder
和Excel间进行数据通信的应用。
1。
【总页数】2页(P5-6)
【作者】李涨生;张思民
【作者单位】浙江省CAD应用发展中心;浙江大学蓉杭模具研究所
【正文语种】中文
【中图分类】TP311.13
【相关文献】
1.PowerBuilder中利用OLE技术实现与Excel的通信 [J], 靳小红;杨运峰
2.利用DDE在EXCEL中实现高炉监控系统中参数所需的复杂计算功能 [J], 程艳芬;张娟;周旭朋;李雪芹
3.在PowerBuilder中利用EXCEL生成报表 [J], 陈旭
4.试析在PowerBuilder中利用自动化技术调用Excel处理和打印表格 [J], 李俊
杰
5.利用DDE技术实现组态软件与应用程序的数据通信 [J], 宗瑜婷
因版权原因,仅展示原文概要,查看原文内容请购买。
Intouch与Excel通信
Intouch与Excel通信(DDE)1、建立Excel文件作为数据源。
如:c:\data\kong.xls在数据交换时必须先打开对应的excel文件(DDE服务端)2、配置访问名如下图:3、单元格内数据的交互,直接引用和标记名引用两种方式:1〉、直接引用形式访问名:行号列号(单元格),如:excel:R1C62〉、标记名引用如下图新建标记名,访问名选择前面配置好的访问名,本例为excel,项目名填写需要的单元格,如:R1C2EXCEL:新建一个表格. 在第一行第一列依次输入数据A1(A列1行): 1A2(A列2行): 2A3(A列3行): 3A4(A列4行): 4INTOUCH:新建一应用程序,增加一访问名称EX节点:应用程序名称: excel主题: sheet1新建四个tagint001: IO实型变量访问名称ex 访问项: r1c1 (对应于exce中的a1量)int002: IO实型变量访问名称ex 访问项: r2c1 (对应于exce中的a2量)int003: IO实型变量访问名称ex 访问项: r3c1 (对应于exce中的a3量)int004: IO实型变量访问名称ex 访问项: r4c1 (对应于exce中的a4量)运行intouch 中的VIEW即可操作EXCEL中的数据.我已经把INTOUCH和EXCEL连接起来了,但是我们要通过I/O在EXCEL中西门子S7-200进行数据交换,通过上面的方法。
改变INTOUCH可使excel相应的单元变0,1。
但是这样不能连接相应的S7-200的相关输入输出,请教。
以上列举出来的方法是以excel 为DDE服务器。
intouch 为客户端。
如果要实现S7200的通讯,可反向实现。
如下.intouch 不作任何配置。
EXCEL中输入=view|tagname!tagname0001tagname0001:为你的s7连接在intouch上的点.Intouch7.11DDE接口:支持远程DDE通讯,运行DDEShare.exe定义DDE共享项(假设Share),关键性参数[大小写不敏感]:APPLICATION名:ViewTOPIC名:Tagname本机方式访问位号的命令路径就是:View|Tagname!位号;远程访问步骤如下:1> 使客/服之间的用户名、密码与工作组名分别相同;5> 运行ddeshare.exe,设置dde共享项Share及Application与Topic参数,并建立信任关系;6> 运行Intouch,并启动工程;7> 运行Excel,访问位号的DDE路径格式:=‘\\服务器机名\NDDE$ ‘| Share!‘位号名’按以下的方法:1。
21.2 利用DDE通信协议对现场数据采集并写入到Excel[共3页]
第21章InTouch数据采集应用║类型是DDE,这样当InTouch软件转入运行方式时,就会向DDEML申请服务,与服务器建立连接,一个DDE会话活动开始了。
会话连接建立后,每当有数据变化,服务器就会将数据发送给客户。
客户发送数据到服务器:在数据库的组态中,定义输出数据点的类型和设备地址,驱动类型是DDE,这样当InTouch软件转入运行方式时,就会向DDEML申请服务,与服务器建立连接。
DDE会话活动开始后,每当输出点数据有变化,InTouch就会将输出点数据的值发送给服务器。
DDE数据交换的速度在点数很多时会受到限制,一般是每秒200个点的交换信息量。
当点数很多又要求更快地交换信息时,会丢失信息,甚至会发生连接中断。
此时,必须对故障进行恢复或重发。
VBA是应用程序自动化语言(过去常常称为宏语言),在办公自动化软件中常用。
将PLC 中数据通过InTouch采集并写入到Excel中,按一定格式显示或定时执行某些操作时,需要用VBA编写相应的程序。
21.2 利用DDE通信协议对现场数据采集并写入到Excel1.配置InTouch要利用DDE通信协议让InTouch访问Execl数据,先要配置InTouch,具体方法如下。
①配置InTouch访问名,应用程序名输入Excel,主题名输入Excel文件的完整路径,例如:C:\test.xls。
如果要使用sheet2表里面的数据,那么主题名就输入:C:\test.xls\sheet2。
②建立标记名的时候,标记类型必须是I/O型,访问名输入刚才新建的访问名。
③项目名输入Excel中每个单元格的编号,例如:R1C1表示第一行第一列,即A1;R2C1表示第二行第一列,即A2,依次类推。
④在与Excel通信时,必须先打开对应的Excel表(即DDE服务端)。
2.Excel中访问InTouch在表格中输入 =VIEW|TAGNAME!'ActualTagname',“VIEW”是应用程序的名称,“TAGNAME”是主题名,“ActualTagname”是实际InTouch标记名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程 序如 下
.
据库中的数据传 送到& 5 Ε ) Α 中
正文 & % 技术 简介
) Α 中 以便 由用 户在& 5 Ε 调 整打 印报 表
Ε &)
奋
ΑΑ
Ε
’ ,
尸
Α
Α/ Κ
ΛΠ Δ
)
3 Ε
’
二 1 ΓΒ Ε ΑΗ Α Ω Τ1
Η1 ΗΑ
’
/ Β’ Σ 3 / ΗΒ Δ Λ Σ
Δ 1 3 Μ 0 2 平 台上 的两 个 正 在运 行 的应用 程序之 间动态交换数据 Δ 2 / 012
3
。
%% &
,
Ω
Α 田Η
尸
Β’Σ 3
/ ΗΒΔ Λ
Σ
Ε .
Σ
Σ口Α
Ψ
’
,
02
甲 ,
3 Α
Ε
Α Β / Λ Η Η Τ3 Η Δ Λ ΔΑ
,
<.
Κ /
Α 0Ε. ΑΒ
,
/
ΑΗ
它是 一 种 在
。
Ω
3 1
如
& &
) ΑΑ
Ω Ω
〔Ε 6
[
Χ
Α
ΒΧΑ Η .
〕
‘
Α Κ 0 Ε. /
Α Ε 表ΦΔ Β1 代
Η Γ &)
,
% &事 件 同样
Ο ,
将 会 出发 生
Ω
Α Η
斤 Β 尸 Σ3
Β / Η Δ Λ
Σ
.
Σ‘ Α
,
’
,
3
/ ΗΒ Δ Λ
Ο
0几
Α Λ ΗΔ Α Η
/ Τ
ΑΒ Ν
,
,
& ! 4
& & 也 是 一 个 支持 %% 的应 用 程 序
,
它 一 般 用 来作 为
,
Α . . Κ 0Ε . / / Α 4
,
% &的服 务器 端
。
Ω
Α Η
口 Β ’Σ3
Β / Η ΔΛ
Σ
.
Σ‘Α
>
’
,
3
/ ΗΒ Δ Λ
0Η Ε
Ο
Α Λ Η Η 主 ΑΤ/
恤Ν
Χ Τ
ΑΒ
,
>
1 ,
3 ΒΒ Δ 函数 Η
。
通 过 调用 内置 函 数和 处 理 事件 来实现 相 互之 间 的通 信
,
..
,
Κ /
Α 0Ε . ΑΗ Α 1 口
当命 令或 数据从 客户 传 向服 务器 或 从服 务器 传向客户端 时
!
电子 科学
纂 # 砚
利 用 %%&技 术 实 现
( 与&) ! &
侯 军燕
的 数据 通 讯
保定市职教 中心
河北
保定
+,
+ ++ .
〔 摘
要〕 介绍戒 / 0
1
3 2 环境 下%% 技 术的原理 &
,
以 及%% 在( 和 &) ! & 中的应用 &
,
并通过 实例一 利用 %% 在 &) ! &
&
中输 出( 数据 并同步打 印来 说 明( 与& 5 4 &
Ω
Α Η
’ Β ’Σ3
Β Η
/ Δ
Λ
Σ
Ε .
Σ’ Α
Ζ
介 ,
3
Β / Η ΔΛ
0,
Ξ
ΛΑΗ Δ Α Η
ΑΒ Ν
,
Ζ
个 正 在运 行 的程序分别 称 为客户 程序 和服 务器程 序
二.
1 2
.. Κ
,
/
0Ε
Α
.
& % 技术 在( 和& ! & 中的应用 )
,
ΑΗ Α
Ω
1 ΤΗ
Α
’Β ’ Σ3
Β Η
/ Δ
的数据通
6关健词7%%& 应用 程序名 中图分 类 号
8
主题 名
8
项 目名 文 章编号
8
9: ; <
文献 标识码
=
>,
一, ?; ,
<+ + ;
. +
++
一
+
一
、
引,
。
在 两个应 用 程序进行 数据 传递之 前
,
,
首 先要 使两 个应 用 程序 都启 动才
,
,
ΒΧ Ε Α Α( Δ 0 Β 是一 种 强有 力的企业 级数据库 应用 系统 开 发工 具
Λ
Σ
Ε .
Σ‘ Α
3
‘ ,
3
/ ΗΒ Δ Λ
0贾Ξ
Ο
Α Λ Η ΔΑ Η
ΧΤ
ΑΒ Ν
,
?
Χ ΕΒ Ν Δ 0 Α 支持%% &
,
技术
,
它 既可 以是用 来提供数据 和 功 能的%
。
&服 务
. . Κ 0Ε. /
ΑΗ Α 1 Τ
Α
器
,
%& 也可 以是用来请求 和显 示数据的 % 客户端
它的 内部提 供 了一 系 列 的
Η
,
由 于 通 常 一 个应 用 程 序 可 以和 多个 服 务 器 进 行 数据 通 信
% 客户 程序 能够 唯一 标 志一个 %&
为 了使
、
在应 用 程序之 间 除 了可 以动 态 交换数据 外 实用 函 数&
) & ΑΑ ) ΑΑ
还 可 以执 行 远 程 %% 命 令 &
& % 服 务器应 用程序
二
、
而 &) Α 是Φ允 Β3 Γ 公司 的 专业 5 Ε 1 1 Η 通过 按钮 响应 来实现 在( 中把 数
。
数据 交 换 % &客户端 与 务器 端的连 接共 有三 种
。
冷连 接
。
暖连 接和 热连
8
我 们可 以利用%% 技术 &
,
,
接
根据 三种连接 的优劣性进 行 比较 选用 了暖 连接
Κ /
Α
Α
1 Τ
Α Η
’
Β ’ Σ3
ΗΒ
Δ
/
Λ
.
Σ’ Α
3
Β Η
Δ
/
Λ
0Η Ε
Α Λ Η
Δ
ΗΑ
/ Τ 明Ν / Τ / Τ
ΧΤ
操 作系 统中基于 消息 的协 议
,
动态数 据交换总 是发生 在 两个 正 在运
这两
。
.. Κ 0Ε . /
ΑΗ ΑΤ1
,
行 的程 序之 间
在 这两 个 应用 程 序之 间 相互 发送 和接收命 令及 数据
,
% &使用 一 种 约定 的命
8
Ω
Α
1 Τ
,
Α Η
。
如下
Η
1 3 Α
8
名 方法来标 志 服 务 器应 用 程序 名 和 项 目名
&)
ΑΑ
。
,
这 种 命名 方法包 括 了
应用 程序 名
主题
,
Α Ω Τ1 ΑΤ 1
ΗΑ
Α Η
’
/ Ρ 6 ΒΔ
.7
’ ,
Κ
/
Α 0Ε .
,
& 应 用 程 序 名 用 于 指 出特 定的 %% 服 务 器 应 用 程 序 名
。
利用
行
ΒΧ /
’
( 应用 程序 显 然 己启 动
Α8
,
) Α 文 启 动 Α5 Ε 件 的 程 序 如 下
1
如
Ο
它 可 以方便地 开 发 出数据库 系统 的前 台应 用软 件
但 由于用 ( 所开 发 的报
Θ
Β1 Ρ
ΛΒ
Υ
叨
Γ Ε Δ
。
Α3
Φ ΘΔ
ΑΒ1 3 1
Η Γ
Γ Δ Γ
Α Α
Γ & ΘΓ Δ Θ
1
ΑΑ
) ΑΑ
Ε
Ο
Α) Α ΣΑ
Κ
Α/
ΛΠ Δ
表 具有 一 定 的局 限性
。
8
、
报表 的 表头
列宽 以及 单元 格的背景 颜 色和 字 体等
。
)
Ε
3
‘ ,
Δ ΔΔ 0 Τ/ Τ Α .
。
) Ε 然后 开始 在( 中 和Α Α 中 建立 %% 连 接 以便 进 行 动态 &
8
、
1
都不 能在 应用程 序中由用 户来 进 行调 整 的表格 处理 软件
一.
ΕΣ .
’
Α
Ε
分,
3
Β / Η Δ Λ
02
Ξ
Ο
ΛΑ ΗΔ Η
/ %叱英 文全 称 是%Ι
5 / Ε Δ % Η& )
5
Κ Λ 即Α
,
中文 叫动 态数 据 交换
。
,
它是 微 用于 在
Α . . Κ 0Ε . / ΑΗ Α
,
/ Τ Α
,
ΧΤ