一切从DB2501开始。
TotalCmd文本查询,发现在以下两个文件中包含'DB2501'信息。
- ombstx\offline\00000004\SUBBLK.DBT
- AMOBJS\AMDBase.db
SUBBLK为dBase数据文件,可以微软自带的dBase 5.0 ODBC 驱动连接查询。
AMDBase.db文件
- 原以为是Sqlite文件,但使用SqliteSpy3打开无效;
- 使用文本文件打开该文件,发现在文件开头包括大段“WATCOM International Corp., Copyright (c) 1987, 1994”字样,查Google判断可能为:
- Paradox数据库
- SQL Anywhere数据库
- 使用微软自带的Parodox ODBC驱动,均打不开该文件;
- 查Siemens安装确实有安装SQL Anywhere,目录在C:\Program Files\Common Files\Siemens\SQLANY,程序为ASA 9.0.2.3476,因此判定数据文件AMOBJS\AMDBase.db为 ASA 文件。
ASA数据服务本地启动脚本:
1 set path=%path%;"C:\Program Files\Common Files\Siemens\SQLANY" 2 start dbeng9.exe -r -n amdbase AMDBase.db
数据库DBA有密码不知,可参考以下文章修改为sql,之后发现这步不是必须的。
- http://pialion.bokee.com/5679910.html
- http://blog.163.com/soldier_200/blog/static/15521233200910195727860/
- 可用WinHEX直接替换上行为下行
- 24E4569B244B1E64F707513A8385281C8E89B9B6F57290B81E450C6323FCDE6890770C1B45015901590159014E014E014E15
- 24363BDF7DB577B28245676DC2DBD6E7F26428C3552297F56CF58C0F8CC571BA15C95EBC43015901590159014E014E014E17
ASA客户端连接方法1,不好用:
1 set path=%path%;"C:\Program Files\Common Files\Siemens\SQLANY" 2 start dbisqlc.exe
- 配置连接配置以下就好,通过共享内存访问:
- 登录:用户名dba,密码sql
- 数据库:服务器名AMDBase
客户端连接方法2,有时不灵:
- 注册Sybase SQL Anywhere 5.0 ODBC驱动
1 Windows Registry Editor Version 5.00 2 3 [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI] 4 5 [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers] 6 "Sybase SQL Anywhere 5.0"="Installed" 7 8 [HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0] 9 "Driver"="C:\\Program Files\\Common Files\\Siemens\\SQLANY\\WOD50T.DLL" 10 "Setup"="C:\\Program Files\\Common Files\\Siemens\\SQLANY\\WOD50T.DLL"
客户端连接方式3,推荐:
- regsvr32 dbodbc9.dll,然后直接是使用
数据查询工具,推荐:
- 安装Advanced Query Tool:
- http://dldx.csdn.net/fd.php?i=75366454398154&s=4c484a7f3ce58d4eb207672208141f22
- 如上启动服务后,ODBC中添加对应AMDBase的连接,配置与dbisqlc一致;
- Advanced Query Tool相关数据导出:
- 选择ASA 数据库,如上配置后, 导出DBA.S7UVAttribWinCC 和 DBA.S7UVVariable表数据。
- 选择Paradox数据库,指定目录ombstx\offline\00000004,导出subblk和baustein表数据。
分析数据
- S7UVVariable
- Step7的块信息
SELECT ObjId, State, PVName, BlockTypName, Connection, AddressParam from DBA.S7UVVariable WHERE ObjId <> 0 ORDER BY ObjId
- S7UVAttribWinCC
- Step7 与WinCC相关的Tag点
- 其中有一个Long Binary类型的Data字段,保存了相关Tag点信息,分解字段信息如下:
1 Select R165005T165001, 2 BYTE_SUBSTR(Data,0, 58) AS Name, 3 BYTE_SUBSTR(Data,59, 102) AS SType, 4 BYTE_SUBSTR(Data,161, 4) AS Type, 5 BYTE_SUBSTR(Data,165, 4) AS ByteLen, 6 BYTE_SUBSTR(Data,169, 4) AS OutFlag, 7 BYTE_SUBSTR(Data,173, 4) AS cycy, 8 BYTE_SUBSTR(Data,177, 4) AS Address, 9 BYTE_SUBSTR(Data,181, 4) AS Zero1, 10 BYTE_SUBSTR(Data,185, 136) AS BlockTypName, 11 BYTE_SUBSTR(Data,321, 8) AS UNK1, 12 BYTE_SUBSTR(Data,329, 8) AS UNK2, 13 BYTE_SUBSTR(Data,337, 72) AS Zero2 14 From DBA.S7UVAttribWinCC where R165005T165001 = 267 or R165005T165001 = 213
- 处理好数据的SQL是,返回数据其中
SELECT R165005T165001, CONVERT(CHAR, BYTE_SUBSTR(Data, 0, CHARINDEX( CHAR(0), BYTE_SUBSTR(Data,0, 58)))) AS Name, CONVERT(CHAR, BYTE_SUBSTR(Data, 59, CHARINDEX( CHAR(0), BYTE_SUBSTR(Data,59, 102)))) AS SType, CONVERT(INT,BYTE_SUBSTR(Data,164, 1)*power(2,32)+BYTE_SUBSTR(Data,163, 1)*power(2,16)+BYTE_SUBSTR(Data,162, 1)*power(2,8)+BYTE_SUBSTR(Data,161, 1)) AS Type, CONVERT(INT,BYTE_SUBSTR(Data,168, 1)*power(2,32)+BYTE_SUBSTR(Data,167, 1)*power(2,16)+BYTE_SUBSTR(Data,166, 1)*power(2,8)+BYTE_SUBSTR(Data,165, 1)) AS Length, CONVERT(CHAR,CONVERT(INT,(BYTE_SUBSTR(Data,180, 1)*power(2,32)+BYTE_SUBSTR(Data,179, 1)*power(2,16)+BYTE_SUBSTR(Data,178, 1)*power(2,8)+BYTE_SUBSTR(Data,177, 1))/16)) +'.'+ CONVERT(CHAR,MOD(CONVERT(INT,BYTE_SUBSTR(Data,177, 1)),16)) AS Address, CONVERT(CHAR, BYTE_SUBSTR(Data, 185, CHARINDEX( CHAR(0), BYTE_SUBSTR(Data,185, 136)))) AS BlockTypName FROM DBA.S7UVAttribWinCC where R165005T165001 = 267 or R165005T165001 = 213
-
-
- Type:BOOL/1;BYTE/3;INT/4;WORD/5;REAL/8;STRING/10;
-
浙公网安备 33010602011771号