基于iFix历史记录程序开发与优化.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于iFix历史记录程序开发与优化

基于iFix历史记录程序开发与优化   iFix是全球使用最多的组态软件,提供了丰富的API编程接口,可以使得第三方程序使用这些接口通过编程访问iFix实时数据库中的数据,将获得的实时数据保存到关系型数据库中。为了方便数据的读取和转移,减少软件安装复杂度,还可以使用结构化存储的方法将数据保存到文件中。   【关键词】iFix 历史数据 数据库 结构化存储   1 概述   在本项目中,要求将iFix实时数据库里的一部分数据保存到外部数据库中。数据的个数约为300个,需要每秒保存一次,24小时不间断存储。   2 数据流   利用iFix提供的API接口来读取iFix的实时数据库数据,是较为简便的方法,通过调用相关API函数,可直接读写iFix的实时数据库。经过测试,如果读取300个iFix数据,需耗时500ms左右。外部数据库使用SQL Server 2008。   根据上述方案,数据流如图1所示。   3 读取与保存数据   3.1 读取数据的方法   iFix提供了一个EDA的DLL类,通过类中的API接口,可以读取iFix实时数据库中的数据。   这个类主要提供了4个函数,分别为:ReadFloat(),WriteFloat(),ReadAscii()和WriteAscii(),功能为读取浮点值,写入浮点值,读取ASCII码值和写入ASCII码值。   在这里,需要用到的是ReadFloat()这个函数,其函数定义为:   void ReadFloat(LPCTSTR Node, LPCTSTR Tagname, LPCTSTR Field, float * FValue)   其中Node为iFix节点名,Tagname为要读取的标签名,Field为所读取的域名,FValue为当前值。   3.2 保存数据的方法   VS中可以方便的利用标准的SQL语句对SQL Server进行操作。我们每秒需要插入300个数据,如果使用最普遍的Insert语句,效率将非常低。所以,需利用SQL Server 2008的表值参数方法,高效的将数据插入数据库中。表值参数提供一种将客户端应用程序中的多行数据封送到 SQL Server 的简单方式。经测试,利用表值参数的方法批量保存输入,一次插入300个数据只需要100ms,满足用户需求。   3.2.1 定义表型   首先,表值参数以使用CREATE TYPE 语句定义的强类型表结构为基础。 必须先在 SQL Server 中创建一个表类型并定义结构,才能在应用程序中使用表值参数。打开数据库管理器,输入如下语句并执行,便可以建立一个表结构了。   CREATE TYPE TableType AS TABLE (DataID VARCHAR(50), Item VARCHAR(MAX));   3.2.2 在VS中插入数据   表值参数必须要先安装.NET 3.5框架,并确保应用程序中已经引用了 System.Data.SqlClient命名空间。创建表值参数时需要用到一些新的SQL数据类型(如DataTable、DataColumn等)。   首先创建一个本地数据表,确保DataTable中创建符合用户定义的表型的列计数和数据类型。   以下为写入数据到表值参数中,并写入数据库的代码:   //写入数据到表值参数   DataTable dt = GetTableSchema();   DataRow r = dt.NewRow();   r[0] = DataID.ToString();   r[1] = ;   for (int i = 0; i myAL.Count; i++)   {   r[1] = r[1] + (string)myAL[i] + - + Convert.ToString((float)alTagValue[i + 1]) + ,;   }   dt.Rows.Add(r);   TableToDB(dt); //插入DB   //将表类型写入数据库   public void TableToDB(DataTable dt)   {   string TSqlStatement = insert into [HistData].[dbo].[ + RcdDate.ToString() + ](DataID,Item) + SELECT nc.DataID ,nc.Item FROM @NewBulkTvp AS nc;   SqlCommand cmd = new SqlCommand(TSqlStatement, conn);   SqlParameter catPara

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档