工控网

Intouch报表制作方法

供稿:工控网
发布时间:2016/6/14 16:51:18

  Intouch自带趋势功能即可满足日常报表功能制作,大体步骤:
1、在intouch中导入报表生成控件,生成初始报表.csv文件
2、在intouch中导入office插件,可以在intouch中显示初始的报表csv文件;
3、将实际需要的报表模板,关联到初始报表.csv文件当中去

一、intouch中导入报表生成控件
1.1 导入控件
新建报表窗口,命名随便;

点击向导(类似魔法帽的图标)选择趋势下面的,历史数据向导;

注意,导入这个插件的同时,会自动导入与这个插件相关的一些变量,到下一步写脚本的时候就可以用到了,不需要自己建立相关内存变量;如果第一次做实验或者不熟悉这个插件,不建议自己手动建立相关变量。

1.2 编写脚本
当脚本触发是,intouch将会把脚本中的模拟量点按照自带趋势中的数值写入预定的一个.csv文件当中去。
先将脚本全貌贴上,实际项目中报表需要的模拟量巨大,所以报表显得有点长。。。=。=;

HDWDataDir = "E:\HIS";
HDWDBDir = InfoInTouchAppDir();
HDWStartDate = Report_DB_Date;
HDWStartTime = "00:00:00";
HDWFilename = "D:\Report.csv";

HDWTags ="$Date,$Time,PIT_1101,PIT_1102,PIT_1103,TIT_1101_R,PDIT_1101A_R,PDIT_1101B_R,FIQT_1101A_R,FIQT_1101B_R,+";
HDWTags1 = "PIT_1104,TIT_1102_R,PDIT_1401_R,PDIT_1402_R,PDIT_1403_R,FIQT_1401_R,FIQT_1402_R,FIQT_1403_R,PIT_1412_R,PIT_1413_R,PIT_1414_R,+";
HDWTags2 ="PIT_1202_R,TIT_1201_R,PIT_1201_R,PIT_1204_R,TIT_1202_R,PIT_1205_R,TIT_1203_R,PIT_1206_R,TIT_1204_R,PIT_1207_R,TIT_1205_R,+";
HDWTags3 ="PIT_1203_R,TIT_1206_R,PIT_1208_R,TIT_1207_R,PIT_1209_R,TIT_1208_R,PIT_1210_R,TIT_1209_R,+";
HDWTags4 ="TIT_1301_R,TIT_1302_R,TIT_1303_R,LIT_1302_R,LDIT_1301_R,TIT_1304_R,TIT_1305_R,TIT_1306_R,LIT_1306_R,LDIT_1305_R,+";
HDWTags5 = "TIT_1307_R,LIT_1309_R,TIT_1308_R,TIT_1309_R,TIT_1310_R,LIT_1313_R,LDIT_1312_R,TIT_1324_R,LIT_1340_R,TIT_1322_R,LIT_1334_R,+";
HDWTags6 ="TIT_1311_R,TIT_1312_R,TIT_1313_R,LIT_1317_R,LDIT_1316_R,TIT_1314_R,TIT_1315_R,TIT_1316_R,LIT_1321_R,LDIT_1320_R,+";
HDWTags7 ="TIT_1317_R,TIT_1318_R,TIT_1319_R,LIT_1325_R,LDIT_1324_R,TIT_1320_R,LIT_1328_R,TIT_1321_R,LIT_1331_R,TIT_1323_R,LIT_1337_R,+";
HDWTags8 ="LIT_1501_R,PIT_1415_R,PIT_1416_R,FIQT_1404_R,PIT_1417_R,PIT_1418_R,PIT_1401,PIT_1402,PIT_1403,+";
HDWTags9 = "PIT_1404,PIT_1405,PIT_1406,PIT_1407,PIT_1408,PIT_1409,PIT_1410,PIT_1411,LIT_3101_R,+";
HDWTags10 ="LIT_3105_R,LIT_3106_R,LIT_3201_R,FIQT_3201_R,FIQT_3203_R,LIT_3211_R,LIT_3212_R,FIQT_3202_R+";
HDWTags11 ="LIT_3208_R,LIT_3207_R,LIT_3210_R,LIT_3209_R,PIT_4101_R,LIT_2102_R,LIT_3103_R,+";
HDWTags12 ="FIQT_1101A_SUM,FIQT_1101B_SUM,FIQT_1404_SUM,FIQT_1401_SUM,FIQT_1402_SUM,FIQT_1403_SUM,FIQT_3203_SUM,FIQT_3202_SUM,FIQT_3201_SUM,+";
HDWTags13 ="ZQGL_A_01,ZQGL_A_02,ZQGL_A_03,ZQGL_A_04,ZQGL_A_05,ZQGL_A_06,+";
HDWTags14 ="ZQGL_B_01,ZQGL_B_02,ZQGL_B_03,ZQGL_B_04,ZQGL_B_05,ZQGL_B_06,+";
HDWTags15 ="ZQGL_C_01,ZQGL_C_02,ZQGL_C_03,ZQGL_C_04,ZQGL_C_05,ZQGL_C_06+";
HDWTags16 ="ZQGL_A_07,ZQGL_A_08,ZQGL_A_09,ZQGL_A_10,ZQGL_A_11,ZQGL_A_12,+";
HDWTags17 = "ZQGL_B_07,ZQGL_B_08,ZQGL_B_09,ZQGL_B_10,ZQGL_B_11,ZQGL_B_12+";

HDWTags18 ="ZQGL_C_07,ZQGL_C_08,ZQGL_C_09,ZQGL_C_10,ZQGL_C_11,ZQGL_C_12";

HDWInterval = "1H";
HDWDuration = "23H";
HDWWriteFile = 1;

IF HDWStatus ==1 THEN
#spreadsheet1.csvurl = "D:\Report.csv";
#spreadsheet1.refresh();
#spreadsheet1.displaytoolbar = "False";
#spreadsheet1.ViewOnlyMode = "True";
ENDIF;

1.2.1 第一部分是常规设置部分
HDWDataDir = "E:\HIS";
HDWDBDir = InfoInTouchAppDir();
HDWStartDate = Report_DB_Date;
HDWStartTime = "00:00:00";
HDWFilename = "D:\Report.csv";

这一部分五个参数其中三个非常关键,第一个hdwdatedir,这个要匹配当下工程的历史趋势的路径。路径查询办法见下图。

第二个参数默认即可;
第三个参数这是一个自己建的中间变量,类型是内存消息。这个就是选择的报表日期,我将这个值,赋给hdwstartdate的时候,就将报表定在这一天了。这里日期赋值可能有些麻烦,在本文最后写个专题。
第四个默认即可,从0点开始写,一行一行的。
第五个,是你的初始报表的路径,这个需要自己手动建立一个CSV文件,空的就行,放在这个路径里,当报表运行的时候,这个文件不能处于编辑模式;

这五个参数决定了报表的成败。

1.2.2 报表赋值部分
总脚本的第二部分是报表点写入部分,就是报表的列部分,将我们需要产生报表的标记点,一个一个写进去,这一部比较繁琐。但没什么难点。
HDWTags ="$Date,$Time,PIT_1101,PIT_1102,PIT_1103,TIT_1101_R,PDIT_1101A_R,PDIT_1101B_R,FIQT_1101A_R,FIQT_1101B_R,+";

写入办法就是赋值,HDWTags = “XX,XX,XX,XX”;XX是点名,注意格式双引号,逗号即可。这里需要特别说明的是,HDWTags显然是一个消息类型的内存点,intouch消息类型最多只能写131个字,所以一般来说不足以满足我们需要的数量,就是写不开的。类比上例,可以用字符串衔接的办法写入长的字符串,类似上面加入HDWTags1、HDWTags2,不够了就加,在末尾写个+,然后下面一个消息变量继续写,以满足我们实际需要;

导入插件的时候系统自动给3个,不过大都还是不够,继续自己手动添加即可,没有上限。

直到写到最后一个,不要再带加号了。

这里我喜欢将第一列和第二列分别写入日期和时间,就是系统内部点,有了这个原始报表也好看些,等第三步的时候自己查询看着都方便。反正无限的,加两列很舒服。

这里需要注意的是,标记名一定要写对!一定不能有重复标记名!一定不能超131!格式!就这些。OK了就行。

1.3 显示部分的脚本

第三部分是显示部分的脚本

HDWInterval = "1H";
HDWDuration = "23H";
HDWWriteFile = 1;

IF HDWStatus ==1 THEN
#spreadsheet1.csvurl = "D:\Report.csv";
#spreadsheet1.refresh();
#spreadsheet1.displaytoolbar = "False";
#spreadsheet1.ViewOnlyMode = "True";

这里大多参数比较直观,例如写入数据周期,写入触发变量HdwStatus,刷新等等,不用多数,诸位不熟悉可以除了.csv的路径这一行之外,其他照抄即可。

二、导入office控件做显示
2.1、添加插件
特别—配置—向导安装 

弹出选项卡

选择第二个选项卡,然后下面一大堆,翻一翻不难找,找到这个Microsoft Office Spreadsheet 11.0 点击安装,然后关闭即可。这里可能因为诸位的office版本与我不同稍有出入,本人使用的是2007。

安装完成后点击向导帽子,在ActiveX插件中就多了一个sheet。

双击导入的插件

红色圈出部分要注意一下,这里的sheet后面的数字,要跟你前面的脚本匹配。导入多次后这个数字会自加1.注意一下即可。

到这一步报表写入就结束了。

初始报表的生成工作就完成了,如果成功的话,运行你的脚本,就会将你所有的点写入report.csv,并且在intouch当中显示了。

三、将实际的报表模板,关联到初始报表.csv文件当中去

先说原理,原理就是使用excel从report.csv里面读数,写入实际的报表模板里,所以脚本是写在Excel里的。即EXCEL去另一个EXCEL读数,并且存储到对应单元格。

先说个笨办法:

右键sheet,查看代码。进入脚本编辑器。

Private Sub 读取数据_Click() ‘定义按钮,不用动’
Dim xlApp AsApplication ‘声明,不用动,’
Dim book AsExcel.Workbook ‘声明,不用动’
Dim sheet AsExcel.Worksheet ‘声明,不用动’
Dim StrB(20000) AsString ‘定义一个数组,字符串类型’
Dim StrDate As Date
Dim A As Integer
Dim B As Integer
Set xlApp = NewExcel.Application
Set xlApp =CreateObject("Excel.Application")
xlApp.Visible =True
Set book =xlApp.Workbooks.Open("D:\Report.csv")
Set sheet =book.Sheets("Report")
sheet.Activate
StrDate = sheet.Range("A2").Value
StrB(1) =sheet.Rang(“B2”).Value
xlApp.Quit
Set sheet = Nothing
Set book = Nothing
Set xlApp = Nothing
Range("R69").Value = StrDate
Range(“R23”).Value= StrB(1)
End Sub

第二步读取数据

StrDate = sheet.Range("A2").Value
StrB(1) =sheet.Rang(“B2”).Value

很明显就是将report的A2赋值到StrDate这个数里面了,把B2赋值到数组B的第一位了。

第三步写入数据

Range("R69").Value = StrDate
Range(“R23”).Value= StrB(1)

很明显就是把StrDate的数写入自己的R69里面了,把数组B的第一位写入R23了。

这就很简单了,逐个查询在report里面的位置,然后用这种赋值两次的办法写进来就可以了。

如需了解更多信息,请访问 (工控网)官网 http://www.gongkong.com/

关键词:Intouch,报表制作

联系我们

桌面版

工控网
地 址:北京市海淀区紫竹院路116号嘉豪国际中心B座8层
邮 编:100097
电 话:010-58930088
传 真:010-58930018
网 址:http://www.gongkong.com/
E-mail:welcome@gongkong.com
联系人:工控网

工控宝
您的贴身工控百宝箱!

点击下载