KingSCADA历史库及其他关系数据库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
KingSCADA
历史库及其他关系数据库
常见问题解答
北京亚控科技发展有限公司
2013年02月
目录
1. KingSCADA历史库 (1)
1.1 KingSCADA保存的历史数据,我希望对其进行修改,可以吗? (1)
1.2 启动KingSCADA运行系统,信息窗口提示找不到历史服务? (1)
1.3 启动KingSCADA运行系统,信息窗口提示历史服务无法启动?新建一
个工程,运行正常。
(1)
1.4 启动KingSCADA运行系统,提示加载历史库服务失败?新建一个工
程,运行正常。
(1)
1.5 我使用了自己编写的VC等程序,希望能调用KingSCADA保存的历史数
据文件,请问可以实现吗? (2)
1.6 请问目前版本的KingSCADA软件历史数据存储及文件格式是什么?2
1.7 请问如何访问KingSCADA历史库中的数据?KingSCADA中的历史库
文件是否可以使用其他应用程序打开? (3)
1.8 KingSCADA历史库文件是否可以修改、删除?如果不慎删除后能否恢复? (3)
1.9 在KingSCADA软件中变量的历史记录方式有哪几种? (3)
1.10 KingSCADA的历史库容量有多大?历史信息能存多少天的? (4)
1.11 在KingSCADA运行环境中能否动态修改历史数据记录的存储天数? (4)
1.12 用什么方式查询KingSCADA历史库中保存的原始数据? (4)
1.13 查询出来的KingSCADA历史库中原始数据后面的质量戳代表什么含义? (4)
2. 其他数据库 (4)
2.1 KingSCADA采集的数据能保存到第三方的数据库如SQL、ORACLE等吗? (4)
2.2 我希望KingSCADA将采集的数据保存到网络中的另一台计算机上的
SQL或ORACLE等数据库,如何操作? (5)
2.3 请问KingSCADA软件与SQL数据库交互的一般配置过程如何? (5)
2.4 KingSCADA对SQL数据库写数据,写入没有成功,请问需要注意什么
问题? (5)
2.5 如何判断KingSCADA与外部数据库的连接状态? (5)
2.6 在KingSCADA中能否对Access数据库进行压缩,该如何实现? (5)
2.7 利用表格模板和SQLCreateTable()函数创建数据库表格,为什么创建不
成功? (6)
2.8 用SQLDropTable()函数删除一个数据库表格,为什么删不掉? (6)
2.9 用SQLGetRecord()函数为什么不能返回当前选择集中的指定序号的记录? (6)
2.10 KS与SQL2008 连接,在2008server 64 位操作系统,使用SQLconnect ()函数时,信息窗口提示:”[Microsoft][ODBC 驱动程序管理器] 在指定的
DSN 中,驱动程序和应用程序之间的体系结构不匹配“ (6)
2.11 KS的离散类型变量不能直接插入到Oracle数据库中,其他的数据类型
可以? (7)
2.12 MYSQL数据库建立ODBC数据源时,服务器地址使用127.0.0.1 或local
都能测试连接成功,用本机IP就连接失败?? (7)
2.13 通过调用数据集函数KDBGetDataset()对access数据库进行操作时,一直报错“对象关闭时,不允许操作。
DBAccess: Open the source recordset failed!”? (7)
1. KingSCADA 历史库
1.1 KingSCADA 保存的历史数据,我希望对其进行修改,可以吗?
不可以,KingSCADA 保存的历史数据文件不开放用户来修改。
1.2 启动KingSCADA 运行系统,信息窗口提示找不到历史服务?
1)360 阻止\卸载了KingSCADA 的报警、历史服务程序。
关闭360,或在360 里把KingSCADA 设为例外,重装KingSCADA。
2)也可以手动安装KingSCADA 的报警、历史服务程序:
在操作系统-开始-运行里执行:
C:\Program Files\KingSCADA\bin\AEserver.exe –I
C:\Program Files\KingSCADA\bin\HistoryServer.exe –I
1.3 启动KingSCADA 运行系统,信息窗口提示历史服务无法启动?新建一个工程,运
行正常。
工程为网络模式,但是所设IP 地址非本机IP,改为单机模式,或设置正确IP。
1.4 启动KingSCADA 运行系统,提示加载历史库服务失败?新建一个工程,运行正常。
可能是工程的历史数据存储路径不是默认的工程路径下,设置的路径不存在,改一下存储路径。
1.5 我使用了自己编写的VC 等程序,希望能调用KingSCADA 保存的历史数据文件,
请问可以实现吗?
KingSCADA 针对用户的这种需求,提供了100 多个API 接口,可以实现与KingSCADA 系统的数据交互。
详情请跟亚控技术部联系。
1.6 请问目前版本的KingSCADA 软件历史数据存储及文件格式是什么?
KingSCADA 历史记录文件有下面四种类型的文件:
(1)临时数据文件(*.ArcTmp)
存储最近一段时间的原始数据。
文件名格式为YYYYMMDDHHXXXXXXX.AcrTmp,YYYY——年,MM——月,DD——日,HH——小时,XXXXXXX——文件序号。
年、月、日、小时的数值是根据生成数据时刻的格林威治时间确定。
若在临时文件没有被压缩到arc 文件前,重新启动,会重新生成一个临时文件。
(2)归档文件(*.arc)
保存的是一天内的压缩数据,文件名格式为YYYYMMDDXXXXXXX.arc
(3)特征值文件(*.ev)
存放的是原始数据特征值,文件名格式为YYYYXXXXXXX.ev
(4)临时特征值文件(*.EvTmp)
这是存储临时特征值数据的文件,将根据特征值算法过滤出的数据,在下个月到来归档之前,先存放在临时特征值文件中。
文件名格式为YYYYXXXXXXX.EvTmp。
1.7 请问如何访问KingSCADA 历史库中的数据?KingSCADA 中的历史库文件是否可
以使用其他应用程序打开?
KingSCADA 中的历史库文件是KingSCADA 自定义的文件格式,所以无法使用其他应用程序打开,可以通过KingSCADA 提供的报表控件、历史趋势曲线来获取历史库中的数据。
1.8 KingSCADA 历史库文件是否可以修改、删除?如果不慎删除后能否恢复?
KingSCADA 历史库文件用户是不能够修改的,只能够进行查询。
KingSCADA 历史库文件是以文件格式保存在计算机里的,所以可以删除掉的,但是要注意如果一旦删除此文件,将无法查询到该时期的历史数据。
如果不慎将历史库文件删除的话,将无法进行恢复。
1.9 在KingSCADA 软件中变量的历史记录方式有哪几种?
无:选择该项,则该变量不进行历史记录
改变:系统运行时,变量的实时值在发生变化,如果变量的当前值与上一次记录的历史数据值之间的差值大于设置的死区范围时,该变量的值才会被记录到历史库中,这种方式适用于数据变化较快的场合。
间隔:无论变量变化与否,系统运行时按定义的时间间隔将变量的值记录到历史库中,每隔设定的时间对变量的值进行一次记录。
最小定义时间间隔单位为 1 秒,范围1-3600。
这种方式适用于数据变化缓慢的场合,缺省设置为60 秒。
备份:有些设备带有一定数量的数据存储器,可以存储一段时间的设备采集到的数据,但这些设备往往只是简单的记录数据,而不能进行历史数据的查询、浏览等操作,而且必须通过上位机的处理才可以看到。
此时选择该项,KingSCADA 在运行时,不再直接向历史库中记录该变量的数值,而是通过驱动程序将设备中存储的历史记录读取上来,并按照约定的时间格式和变量类型插入到KingSCADA 的历史库中,这样保证了历史库的完整性。
每次采集记录:系统运行时,按照变量的采集频率进行数据记录,每到一次采集频率,记录一次数据。
该功能只适用于IO 变量,内存变量没有该记录方式。
该功能应慎用,因为当数据量比较大,且采集频率比较快时,使用“每次采集记录”,存储的历史
数据文件会消耗很多的磁盘空间。
1.10 KingSCADA 的历史库容量有多大?历史信息能存多少天的?
KingSCADA 历史库容量本身没有限制,与计算机硬盘大小有关系,历史信息最长能保存8000 天。
1.11 在KingSCADA 运行环境中能否动态修改历史数据记录的存储天数?
不能动态修改。
只能在开发环境中通过系统设置-->历史库服务设置-->历史库服务设置对话框中进行设置。
1.12 用什么方式查询KingSCADA 历史库中保存的原始数据?
可以用数据集函数KDBKSRawData(),具体使用方法请参考函数手册。
1.13 查询出来的KingSCADA 历史库中原始数据后面的质量戳代表什么含义?
质量戳的含义如下:
十进制描述信息
262336 原始数据、好的数据
262144 原始数据、坏数据
1074004000 网络连接、原始数据、尚未取得设备数据(没有采集到数据)
1879310368 开机( Bad ),原始数据,尚未取得设备数据
2147745792 关机( Bad ),原始数据,坏数据(数据溢出补码:-2147221504)1074003968 网络连接,原始数据,坏数据
1879048224 开机( Bad ),尚未取得设备数据
1073741856 网络连接,尚未取得设备数据
2. 其他数据库
2.1 KingSCADA 采集的数据能保存到第三方的数据库如SQL、ORACLE 等吗?
可以,详细说明请参考KingSCADA 的使用手册。
2.2 我希望KingSCADA 将采集的数据保存到网络中的另一台计算机上的SQL 或
ORACLE 等数据库,如何操作?
可以,但一般不推荐直接在运行KingSCADA 的计算机上直接配置网络ODBC 数据源,因为网络的不稳定会造成一系列的通讯问题。
推荐方式如下:
请在运行KingSCADA 的计算机和网络中的数据库计算机同时安装SQL或ORACLE 数据库,对这两台计算机上的SQL 或ORACLE 数据库进行同步(数据库软件提供同步的功能),KingSCADA 软件直接与本机的数据库通讯读写数据(这样可以避免网络不
稳定对KingSCADA 软件的影响,防止数据的丢失)。
2.3 请问KingSCADA 软件与SQL 数据库交互的一般配置过程如何?
可以参考KingSCADA 用户手册的第十八章数据库访问SQL。
同时KingSCADA 还支持通过数据集函数与关系库进行数据交换,使用标准的SQL 语句即可。
2.4 KingSCADA 对SQL 数据库写数据,写入没有成功,请问需要注意什么问题?
需要注意的事项如下:
A、KingSCADA 与数据源是否连接成功。
B、数据库中的表格的字段名与KingSCADA 记录体定义的字段名是否相同。
C、数据库表格的字段类型与KingSCADA 变量的类型是否符合。
D、表格中使用的字段名是否有date 和time、in 等关键字,如果有请改为其他字段名。
E、数据库字段中是否包含有#字,ODBC 数据源不支持该字符使用。
2.5 如何判断KingSCADA 与外部数据库的连接状态?
通过SQLConnect 函数的返回值来判断,如果是0 表明与数据库连接成功,如果是负数则表明连接失败。
2.6 在KingSCADA 中能否对Access 数据库进行压缩,该如何实现?
亚控提供了对Access 数据库进行压缩处理的批处理程序,在KingSCADA 中使用StartApp 函数调用此程序即可,批处理程序可以使用记事本打开并编辑,针对具体的应用只需要修改批处理程序中的office 的安装路径以及mdb 数据库的路径/文件名即可。
如有需要请向亚控索取。
2.7 利用表格模板和SQLCreateTable()函数创建数据库表格,为什么创建不成功?
可能原因是表格模板中设置的字段名称与数据库中的关键字冲突(如:date、time
等等)造成的,将其字段名更改为其它名称即可。
2.8 用SQLDropTable()函数删除一个数据库表格,为什么删不掉?
如果这个表格正在被使用,是不能被删除的。
比如刚执行过SQLSelect()命令。
2.9 用SQLGetRecord()函数为什么不能返回当前选择集中的指定序号的记录?
这个函数如果不用类似 SQLSelect()等函数选择数据库中的某个表,是不能得到
指定序号的记录的。
同理,SQLNumRows(ConnectID)函数也需要先选择数据表。
2.10 KS 与SQL2008 连接,在2008server 64 位操作系统,使用SQLconnect()函数时,
信息窗口提示:”[Microsoft][ODBC 驱动程序管理器] 在指定的DSN 中,驱
动程序和应用程序之间的体系结构不匹配“
因为操作系统是64 位和32 位的问题,解决方法:
C:\Windows\SysWOW64\odbcad32.exe 利用这个odbc 为创建就可以连接成功。
下图中默认的是32位的ODBC数据源的快捷方式,需要把路径指定到64位的ODBC 的驱动程序上。
2.11 KS 的离散类型变量不能直接插入到Oracle 数据库中,其他的数据类型可以?
Oracle 数据库不支持离散类型的数据,只能把离散类型变量赋值给整形变量或文本,
然后再插入到oracle 数据库中。
2.12 MYSQL 数据库建立ODBC 数据源时,服务器地址使用127.0.0.1 或local 都能测试
连接成功,用本机IP 就连接失败??
原因是用户root 的角色不够。
2.13 通过调用数据集函数KDBGetDataset()对access 数据库进行操作时,一直报错“对
象关闭时,不允许操作。
DBAccess: Open the source recordset failed!”?
KDBGetDataset("DatasetName", ConnectStr, "insert into test values('a') "); 或KDBGetDataset1("DatasetName", "ConnectID", "insert into test values('a')");函数是用来执行查询语句的(例如:KDBGetDataset("DatasetName", ConnectStr, "select * from test"),而不是执行那些非查询的语句,所以执行完成之后会保存记录集。
如果使用它进行插入
操作,插入操作只会返回影响行数,并不会产生记录集,导致获得记录集的时候发生异
“数据库”常见问题解答
常。
因此如果要执行非查询语句的之后,应该使用KDBExecuteStatement 或者KDBExecuteStatement1 函数。
北京亚控科技发展有限公司8。