工业库通过opc采集kingscada数据以及scada展示工业库数据
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
工业库通过opc采集KingSCADA数据以及scada展示工业库数据
目录
工业库通过opc采集KingSCADA数据 (2)
SCADA展示工业库数据 (8)
工业库中变量在KingGraphic引用 (11)
工业库通过opc采集KingSCADA数据
本文档提出的方法是通过导出KS的变量,再编辑成工业库支持的导入表格,直接将KS的变量导入到工业库变量表中完成采集。下面以SCADADEMO工程的float类型变量为例,其他数据类型与此相同。
1.建立OPC采集器
选择“开始—程序—KingHistorian3.0—采集器配置工具—管理员登陆(如图1),密码:sa”。点击“确定”进入图2对话框
图1 管理员登陆界面
图2 采集器安装与配置工具界面
点击“新建”弹出新建采集器配置页面,进行如下图配置
图3 新建采集器基本对话框配置
图4 新建采集器工业库对话框配置
图5 新建采集器配置OPC Server对话框配置
点击“确定”,提示创建成功,完成OPC采集器配置选中opc采集器,点击右边菜单栏“启动”
图6 启动OPC采集器
2.从采集器检索导出变量
选择“开始—程序—KingHistorian3.0—客户端管理工具”,进入到系统管理平台
图7 系统管理平台
点击左边“系统管理—变量管理器”,在变量管理器中通过采集器检索
图8 变量管理器中检索scada变量
图9 变量管理器中检索OPC采集器KS变量
备注:SCADA需要运行,SCADA变量基本属性中“允许其他应用访问”前需要打钩。
选中要导出的变量,保存
图10 检索到的变量导出到excel文件1
图10 检索到的变量导出到excel文件2
导出表格如下
图11 工业库变量导出表
表中可以看出,数据源地址的格式为Local.变量名
3.把变量导入到工业库中
在“变量管理器—变量组根组”下,右键,导入变量—从文件,将刚才导出的变量导入到变量根组下面
图12 从文件导入变量
点击“确定”,添加变量成功。
图13 添加变量
打开实时查看器,将自动刷新频率改为1s
图14 实时查看器1
图15 实时查看器2
这样工业库就可以通过opc读取KingSCADA数据。
SCADA展示工业库数据
打开scada开发界面,建立一个画面,在画面上建立一个报表,报表命名默认为Report1,
图16 scada画面报表显示
另外在画面上建立一个按钮,上面文本改为“查询”如图
图17 建立查询按钮
双击按钮,如图
图18 命令语言写在鼠标左键按下时
在按钮左键按下时写,如图
KDBDisConnect("Handle1");
KDBGetConnectID("Handle1","DSN=wang;ServerAddress=127.0.0.1;ServerPort=5678;UID= sa;pwd=sa;NetworkTimeout=0");
KDBGetDataset1("MyDataset", "Handle1", "select TagName, DataTime,DataValue from realtime");
Report1.SetDataset1("MyDataset");
图19 scada命令语言
bool KDBGetConnectID(string strConnectIDName, string ConnectStr)
功能:
连接数据库,获得一个连接句柄,并保持与数据库的连接和打开状态。数据库作为服务器,提供数据服务时,需要和客户端建立服务连接,因为数据库一般都是要为多用户、多程序服务的,服务连接是一种关键的、有限的资源,如果不需要服务了,就要把服务连接给断掉,释放资源,如KDBGetDataset()函数,每执行1次,就创建1次连接,执行完SQL命令后,就关闭连接,下一次执行,再重新连接。
但是,如果客户端对数据库的访问是连续而密集的,那么频繁的建立、关闭连接,会极大地降低数据库性能,甚至造成数据库服务器堵塞,为了避免频繁建立、关闭数据库连接带来的的开销,我们提供获取句柄方式,实现对数据库的连接复用。
用户可通过KDBGetConnectID()方法建立一个数据库连接,利用这个连接,用KDBGetDataset1方法向数据库发送SQL命令,数据库执行完SQL命令,返回操作结果,并不关闭连接,该连接句柄可以一直使用,直到调用KDBDisConnect()函数将其断开。通过获取句柄方法,使得一个数据库连接方法可以得到高效、安全的复用。
长期占用数据库连接而不释放,可能会影响到数据库对其它用户的服务,建议只在需要这种方式的情况下使用,不要滥用。
因为网络、数据库本身的稳定性原因,即使没有执行释放连接句柄的脚本,时间长了,连接句柄也可能会自动失效,在网络好、数据库访问量不太大的情况下,1个连接句柄大概能坚持几天的时间,建议在执行SQL命令的脚本里,增加获取返回值的语句,来判断是否需要重新获取连接句柄。例句:
bool tmpbool;
tmpbool=KDBGetDataset1("MyDataset", "Handle1", "select * from Table_LotCols");
if (tmpbool==0)
{
KDBDisConnect("Handle1");
KDBGetConnectID("Handle1","DSN=wang;DATABASE=pubs;UID=sa; PWD=");
KDBGetDataset1("MyDataset", "Handle1", "select * from Table_LotCols");
}
参数:
strConnectIDName:与数据库连接的句柄名称,字符串类型
ConnectStr:数据库连接字符串,字符串类型
返回值:
true:连接成功
false:通讯失败
例如:
KingSCADA以sa身份登录(无密码)和名为wang的SQL Server中的pubs数据库连接,并获得名为Handle1的句柄。
KDBGetConnectID ("Handle1", "DSN=wang; DATABASE=pubs; UID=sa; PWD=");
bool KDBGetDataset1(string DatasetName, string strConnectIDName, string SqlStr)
功能:
通过连接句柄,从数据库中获取数据集,获取完毕后不断开和数据库的连接。
参数:
DatasetName:数据集名称,字符串类型
strConnectIDName:与数据连接的句柄名称,字符串类型
SqlStr:SQL查询语句,字符串类型
返回值:
true:获得数据集成功
false:获得数据集失败
例如:
KDBGetDataset1("MyDataset", "Handle1", "select * from Table_LotCols");
执行此函数得到一个名为"MyDataset"的数据集,该数据集中的记录符合查询条件