Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
cdy816
Mars
提交
b2b0ff90
Mars
项目概览
cdy816
/
Mars
通知
3
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Mars
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b2b0ff90
编写于
2月 07, 2020
作者:
cdy816
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
单个文件保存指定数量的变量的历史记录
上级
628dfe72
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
151 addition
and
425 deletion
+151
-425
DataRunner/His/Compress/CompressEnginer.cs
DataRunner/His/Compress/CompressEnginer.cs
+88
-16
DataRunner/His/HisQuery/DataFileManager.cs
DataRunner/His/HisQuery/DataFileManager.cs
+35
-13
DataRunner/His/HisQuery/QuerySerivce.cs
DataRunner/His/HisQuery/QuerySerivce.cs
+24
-24
DataRunner/His/HisQuery/TimeFile/MinuteTimeFile.cs
DataRunner/His/HisQuery/TimeFile/MinuteTimeFile.cs
+1
-1
DataRunner/His/Serise/SeriseEnginer.cs
DataRunner/His/Serise/SeriseEnginer.cs
+1
-371
DataRunner/Runner.cs
DataRunner/Runner.cs
+2
-0
Mars/.vs/Mars/DesignTimeBuild/.dtbcache
Mars/.vs/Mars/DesignTimeBuild/.dtbcache
+0
-0
Mars/.vs/Mars/v16/.suo
Mars/.vs/Mars/v16/.suo
+0
-0
Mars/.vs/Mars/v16/Server/sqlite3/storage.ide
Mars/.vs/Mars/v16/Server/sqlite3/storage.ide
+0
-0
未找到文件。
DataRunner/His/Compress/CompressEnginer.cs
浏览文件 @
b2b0ff90
...
...
@@ -65,6 +65,11 @@ namespace Cdy.Tag
#
region
...
Properties
...
/// <summary>
/// 单个文件内变量的个数
/// </summary>
public
int
TagCountOneFile
{
get
;
set
;
}
=
100000
;
#
endregion
...
Properties
...
#
region
...
Methods
...
...
...
@@ -74,8 +79,10 @@ namespace Cdy.Tag
/// </summary>
public
void
CalMemory
(
long
size
)
{
/* 内存结构:head+数据区指针+数据区
head:数据大小(4)+变量数量(4)+起始时间(8)
/* 内存结构:Head+[DataRegion]
* Head:数据区域个数(4)+时间(8)+[区域ID(4)+区域地址(8)]
* DataRegion:region head+数据区指针+数据区
region head:数据大小(4)+变量数量(4)
数据区指针:[ID(4) + address(4)]
数据区:[data block]
data block:size+compressType+data
...
...
@@ -177,6 +184,16 @@ namespace Cdy.Tag
/// </summary>
private
void
Compress
()
{
/* 内存结构:Head+[DataRegion]
* Head:数据区域个数(4)+时间(8)+[区域ID(4)+区域地址(8)]
* DataRegion:region head+数据区指针+数据区
region head:数据大小(4)+变量数量(4)
数据区指针:[ID(4) + address(4)]
数据区:[data block]
data block:size+compressType+data
*/
//读取变量个数
int
count
=
mSourceMemory
.
ReadInt
(
9
);
...
...
@@ -188,11 +205,39 @@ namespace Cdy.Tag
//源内存数据块头部信息偏移地址
int
offset
=
21
;
//压缩后内存头大小
int
headoffset
=
16
;
int
mLastDataRegionId
=
-
1
;
Dictionary
<
int
,
long
>
Drids
=
new
Dictionary
<
int
,
long
>();
//记录每个数据区域内ID的个数
Dictionary
<
int
,
int
>
mDRcount
=
new
Dictionary
<
int
,
int
>();
//计算数据区域个数
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
var
id
=
mSourceMemory
.
ReadInt
(
offset
);
var
did
=
id
/
TagCountOneFile
;
if
(
mLastDataRegionId
!=
did
)
{
Drids
.
Add
(
did
,
0
);
mDRcount
.
Add
(
did
,
1
);
mLastDataRegionId
=
did
;
}
else
{
mDRcount
[
did
]++;
}
offset
+=
12
;
}
offset
=
21
;
//数据区头部指针偏移
int
headoffset
=
0
;
//数据区起始地址
int
mHeadAddress
=
-
1
;
//数据区地址
int
mDataPosition
=
count
*
8
+
headoffset
;
int
mDataPosition
=
12
+
Drids
.
Count
*
12
;
mLastDataRegionId
=
-
1
;
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
...
...
@@ -200,26 +245,53 @@ namespace Cdy.Tag
var
qaddr
=
mSourceMemory
.
ReadInt
(
offset
+
4
);
var
len
=
mSourceMemory
.
ReadInt
(
offset
+
8
);
int
rid
=
id
/
TagCountOneFile
;
int
size
=
0
;
if
(
rid
!=
mLastDataRegionId
)
{
//开启一个新的数据区域
if
(
mHeadAddress
>=
0
)
{
mTargetMemory
.
WriteInt
(
mHeadAddress
,
mDataPosition
);
//写入上一个区域数据块的大小
mTargetMemory
.
WriteInt
(
mHeadAddress
+
4
,
mDRcount
[
mLastDataRegionId
]);
//写入变量个数
}
Drids
[
rid
]
=
mHeadAddress
=
mDataPosition
;
headoffset
=
mHeadAddress
+
8
;
mDataPosition
=
headoffset
+
mDRcount
[
rid
]
*
8
+
8
;
mLastDataRegionId
=
rid
;
}
//压缩数据
var
size
=
CompressBlockMemory
(
qaddr
,
mDataPosition
,
len
);
size
=
CompressBlockMemory
(
qaddr
,
mDataPosition
,
len
);
//更新头部指针区域数据
//写入变量ID
mTargetMemory
.
WriteInt
(
headoffset
,
id
);
mTargetMemory
.
WriteInt
(
headoffset
,
id
);
//写入数据区地址
mTargetMemory
.
WriteInt
(
headoffset
+
4
,
mDataPosition
);
////写入数据区大小
//mTargetMemory.WriteInt(headoffset + 8, size);
offset
+=
12
;
headoffset
+=
8
;
//head
offset += 12;
offset
+=
12
;
mDataPosition
+=
size
;
}
mTargetMemory
.
WriteInt
(
0
,
mDataPosition
);
//写入数据的大小
mTargetMemory
.
WriteInt
(
4
,
count
);
//写入变量数量
mTargetMemory
.
WriteDatetime
(
8
,
mCurrentTime
);
//写入时间
if
(
count
>
0
)
{
mTargetMemory
.
WriteInt
(
mHeadAddress
,
mDataPosition
);
//写入上一个区域数据块的大小
mTargetMemory
.
WriteInt
(
mHeadAddress
+
4
,
mDRcount
[
mLastDataRegionId
]);
//写入变量个数
}
mTargetMemory
.
WriteInt
(
0
,
Drids
.
Count
);
mTargetMemory
.
WriteDatetime
(
4
,
mCurrentTime
);
//更新数据区域地址
offset
=
12
;
foreach
(
var
vid
in
Drids
)
{
mTargetMemory
.
WriteInt
(
offset
,
vid
.
Key
);
mTargetMemory
.
WriteLong
(
offset
+
4
,
vid
.
Value
);
offset
+=
12
;
}
}
/// <summary>
...
...
DataRunner/His/HisQuery/DataFileManager.cs
浏览文件 @
b2b0ff90
...
...
@@ -21,7 +21,7 @@ namespace Cdy.Tag
#
region
...
Variables
...
private
Dictionary
<
int
,
YearTimeFile
>
mTimeFileMaps
=
new
Dictionary
<
int
,
YearTimeFile
>();
private
Dictionary
<
int
,
Dictionary
<
int
,
YearTimeFile
>>
mTimeFileMaps
=
new
Dictionary
<
int
,
Dictionary
<
int
,
YearTimeFile
>
>();
private
string
mDatabaseName
;
...
...
@@ -45,6 +45,11 @@ namespace Cdy.Tag
#
region
...
Properties
...
/// <summary>
/// 单个文件内变量的个数
/// </summary>
public
int
TagCountOneFile
{
get
;
set
;
}
#
endregion
...
Properties
...
#
region
...
Methods
...
...
...
@@ -68,7 +73,7 @@ namespace Cdy.Tag
{
foreach
(
var
vv
in
dir
.
GetFiles
())
{
if
(
vv
.
Extension
==
Serise
Enginer
.
DataFileExtends
)
if
(
vv
.
Extension
==
Serise
FileItem
.
DataFileExtends
)
{
ParseFileName
(
vv
);
}
...
...
@@ -86,10 +91,16 @@ namespace Cdy.Tag
/// <param name="fileName"></param>
private
void
ParseFileName
(
System
.
IO
.
FileInfo
file
)
{
string
sname
=
file
.
Name
.
Replace
(
Serise
Enginer
.
DataFileExtends
,
""
);
string
sname
=
file
.
Name
.
Replace
(
Serise
FileItem
.
DataFileExtends
,
""
);
string
stime
=
sname
.
Substring
(
sname
.
Length
-
12
,
12
);
int
yy
=
0
,
mm
=
0
,
dd
=
0
;
int
id
=
-
1
;
int
.
TryParse
(
sname
.
Substring
(
sname
.
Length
-
15
,
3
),
out
id
);
if
(
id
==
-
1
)
return
;
if
(!
int
.
TryParse
(
stime
.
Substring
(
0
,
4
),
out
yy
))
{
return
;
...
...
@@ -112,14 +123,23 @@ namespace Cdy.Tag
YearTimeFile
yt
=
new
YearTimeFile
()
{
TimeKey
=
yy
};
if
(
mTimeFileMaps
.
ContainsKey
(
yy
))
if
(
mTimeFileMaps
.
ContainsKey
(
id
))
{
yt
=
mTimeFileMaps
[
yy
];
if
(
mTimeFileMaps
[
id
].
ContainsKey
(
yy
))
{
yt
=
mTimeFileMaps
[
id
][
yy
];
}
else
{
mTimeFileMaps
[
id
].
Add
(
yy
,
yt
);
}
}
else
{
mTimeFileMaps
.
Add
(
yy
,
yt
);
mTimeFileMaps
.
Add
(
id
,
new
Dictionary
<
int
,
YearTimeFile
>());
mTimeFileMaps
[
id
].
Add
(
yy
,
yt
);
}
yt
.
AddMonth
(
mm
).
AddDay
(
dd
).
AddHour
(
hh
).
AddMinutes
().
ForEach
(
e
=>
{
e
.
AddFile
(
file
.
FullName
);
});
}
...
...
@@ -129,11 +149,13 @@ namespace Cdy.Tag
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public
MinuteTimeFile
GetFile
(
DateTime
time
)
public
MinuteTimeFile
GetFile
(
DateTime
time
,
int
Id
)
{
if
(
mTimeFileMaps
.
ContainsKey
(
time
.
Year
))
int
id
=
Id
/
TagCountOneFile
;
if
(
mTimeFileMaps
.
ContainsKey
(
id
)
&&
mTimeFileMaps
[
id
].
ContainsKey
(
time
.
Year
))
{
return
mTimeFileMaps
[
time
.
Year
].
GetFile
(
time
);
return
mTimeFileMaps
[
id
][
time
.
Year
].
GetFile
(
time
);
}
return
null
;
}
...
...
@@ -144,13 +166,13 @@ namespace Cdy.Tag
/// <param name="starttime"></param>
/// <param name="endtime"></param>
/// <returns></returns>
public
List
<
MinuteTimeFile
>
GetFiles
(
DateTime
starttime
,
DateTime
endtime
)
public
List
<
MinuteTimeFile
>
GetFiles
(
DateTime
starttime
,
DateTime
endtime
,
int
Id
)
{
List
<
MinuteTimeFile
>
re
=
new
List
<
MinuteTimeFile
>();
DateTime
sstart
=
starttime
;
while
(
sstart
<=
endtime
)
{
re
.
Add
(
GetFile
(
sstart
));
re
.
Add
(
GetFile
(
sstart
,
Id
));
sstart
=
sstart
.
AddMinutes
(
1
);
}
return
re
;
...
...
@@ -161,12 +183,12 @@ namespace Cdy.Tag
/// </summary>
/// <param name="times"></param>
/// <returns></returns>
public
Dictionary
<
DateTime
,
MinuteTimeFile
>
GetFiles
(
List
<
DateTime
>
times
)
public
Dictionary
<
DateTime
,
MinuteTimeFile
>
GetFiles
(
List
<
DateTime
>
times
,
int
Id
)
{
Dictionary
<
DateTime
,
MinuteTimeFile
>
re
=
new
Dictionary
<
DateTime
,
MinuteTimeFile
>();
foreach
(
var
vv
in
times
)
{
re
.
Add
(
vv
,
GetFile
(
vv
));
re
.
Add
(
vv
,
GetFile
(
vv
,
Id
));
}
return
re
;
}
...
...
DataRunner/His/HisQuery/QuerySerivce.cs
浏览文件 @
b2b0ff90
...
...
@@ -56,7 +56,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
bool
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -97,7 +97,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
byte
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -139,7 +139,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
short
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -180,7 +180,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
ushort
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -221,7 +221,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
int
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -262,7 +262,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
uint
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -303,7 +303,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
ulong
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -344,7 +344,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
long
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -387,7 +387,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
float
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -429,7 +429,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
double
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -471,7 +471,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
DateTime
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -512,7 +512,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadValue
(
int
id
,
List
<
DateTime
>
times
,
QueryValueMatchType
type
,
HisQueryResult
<
string
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
times
);
var
vfiles
=
GetFileManager
().
GetFiles
(
times
,
id
);
MinuteTimeFile
mPreFile
=
null
;
List
<
DateTime
>
mtime
=
new
List
<
DateTime
>();
foreach
(
var
vv
in
vfiles
)
...
...
@@ -553,7 +553,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
bool
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -570,7 +570,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
byte
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -587,7 +587,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
short
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -604,7 +604,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
ushort
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -621,7 +621,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
int
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -638,7 +638,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
uint
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -655,7 +655,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
long
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -672,7 +672,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
ulong
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -689,7 +689,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
float
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -706,7 +706,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
double
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -723,7 +723,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
DateTime
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
@@ -740,7 +740,7 @@ namespace Cdy.Tag
/// <param name="result"></param>
public
void
ReadAllValue
(
int
id
,
DateTime
startTime
,
DateTime
endTime
,
HisQueryResult
<
string
>
result
)
{
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
);
var
vfiles
=
GetFileManager
().
GetFiles
(
startTime
,
endTime
,
id
);
vfiles
.
ForEach
(
e
=>
{
DateTime
sstart
,
eend
;
e
.
GetTimeSpan
(
startTime
,
endTime
,
out
sstart
,
out
eend
);
...
...
DataRunner/His/HisQuery/TimeFile/MinuteTimeFile.cs
浏览文件 @
b2b0ff90
...
...
@@ -124,7 +124,7 @@ namespace Cdy.Tag
using
(
var
ss
=
DataFileSeriserManager
.
manager
.
GetDefaultFileSersie
())
{
ss
.
OpenFile
(
mDataFile
);
long
offset
=
Serise
Enginer
.
FileHeadSize
;
long
offset
=
Serise
FileItem
.
FileHeadSize
;
DateTime
time
;
do
{
...
...
DataRunner/His/Serise/SeriseEnginer.cs
浏览文件 @
b2b0ff90
...
...
@@ -54,58 +54,8 @@ namespace Cdy.Tag
private
DateTime
mCurrentTime
;
//private DataFileSeriserbase mFileWriter;
//private MemoryBlock mHeadMemory;
private
VarintCodeMemory
mTagIdMemoryCach
;
//变量ID校验和
private
long
mTagIdSum
;
private
int
mTagCount
=
0
;
///// <summary>
///// 变量的数据指针的相对起始地址
///// </summary>
//private Dictionary<int,Dictionary<int, long>> mIdAddrs = new Dictionary<int, Dictionary<int, long>>();
private
SeriseFileItem
[]
mSeriseFile
;
/// <summary>
///
/// </summary>
private
bool
mNeedUpdateTagHeads
=
false
;
/// <summary>
/// 当前数据区首地址
/// </summary>
private
long
mCurrentDataRegion
=
0
;
/// <summary>
/// 上一个数据区域首地址
/// </summary>
private
long
mPreDataRegion
=
0
;
/// <summary>
///
/// </summary>
private
string
mCurrentFileName
=
string
.
Empty
;
/// <summary>
///
/// </summary>
private
int
mFileStartHour
=
0
;
/// <summary>
/// 数据文件扩展名
/// </summary>
public
const
string
DataFileExtends
=
".dbd"
;
/// <summary>
/// 文件头大小
/// </summary>
public
const
int
FileHeadSize
=
72
;
#
endregion
...
Variables
...
...
...
@@ -143,7 +93,7 @@ namespace Cdy.Tag
/// <summary>
/// 单个文件内变量的个数
/// </summary>
public
int
TagCountOneFile
{
get
;
set
;
}
public
int
TagCountOneFile
{
get
;
set
;
}
=
100000
;
/// <summary>
/// 数据库名称
...
...
@@ -177,56 +127,8 @@ namespace Cdy.Tag
mSeriseFile
[
i
].
FileWriter
=
DataFileSeriserManager
.
manager
.
GetSeriser
(
DataSeriser
).
New
();
mSeriseFile
[
i
].
Init
();
}
//mIdAddrs.Clear();
//long offset = GetDataRegionHeaderLength() + CalTagIdsSize();
//int blockcount = FileDuration * 60 / BlockDuration;
//var vv = ServiceLocator.Locator.Resolve<ITagQuery>();
//var tags = vv.ListAllTags().OrderBy(e => e.Id);
//double fileCount = tags.Count() / (TagCountOneFile*1.0);
//fileCount = Math.Floor(fileCount);
//for(int i=0;i<(int)fileCount;i++)
//{
// mIdAddrs.Add(i, new Dictionary<int, long>());
//}
//foreach (var vtag in tags)
//{
// mIdAddrs[vtag.Id/TagCountOneFile].Add(vtag.Id, offset);
// offset += (blockcount * 8);
//}
}
///// <summary>
///// 计算变量Id集合所占的大小
///// </summary>
///// <returns></returns>
//private int CalTagIdsSize()
//{
// if (mTagIdMemoryCach != null) mTagIdMemoryCach.Dispose();
// var aids = ServiceLocator.Locator.Resolve<ITagQuery>().ListAllTags().OrderBy(e => e.Id).ToArray();
// mTagIdSum = 0;
// mTagIdMemoryCach = new VarintCodeMemory((int)(aids.Count() * 4 * 1.2));
// if (aids.Length > 0)
// {
// int preids = aids[0].Id;
// mTagIdSum += preids;
// mTagIdMemoryCach.WriteInt32(preids);
// for (int i = 1; i < aids.Length; i++)
// {
// var id = aids[i].Id;
// mTagIdMemoryCach.WriteInt32(id - preids);
// mTagIdSum += id;
// preids = id;
// }
// }
// return mTagIdMemoryCach.Position + 4;
//}
/// <summary>
///
/// </summary>
...
...
@@ -249,9 +151,6 @@ namespace Cdy.Tag
resetEvent
.
Set
();
closedEvent
.
WaitOne
();
//mIdAddrs.Clear();
//mFileWriter = null;
mProcessMemory
=
null
;
foreach
(
var
vv
in
mSeriseFile
)
{
...
...
@@ -259,8 +158,6 @@ namespace Cdy.Tag
}
mSeriseFile
=
null
;
//mHeadMemory = null;
resetEvent
.
Dispose
();
closedEvent
.
Dispose
();
}
...
...
@@ -295,222 +192,6 @@ namespace Cdy.Tag
closedEvent
.
Set
();
}
///// <summary>
///// 搜索最后一个数据区域
///// </summary>
///// <returns></returns>
//private long SearchLastDataRegion()
//{
// long offset = FileHeadSize;
// while (true)
// {
// var nextaddr = mFileWriter.ReadLong(offset + 8);
// if (nextaddr <= 0)
// {
// break;
// }
// else
// {
// offset = nextaddr;
// }
// }
// mPreDataRegion = offset;
// mFileWriter.GoToEnd();
// mCurrentDataRegion = mFileWriter.Length;
// return 0;
//}
///// <summary>
/////
///// </summary>
///// <param name="time"></param>
///// <returns></returns>
//private string GetDataPath(DateTime time)
//{
// return System.IO.Path.Combine(PathHelper.helper.GetDataPath("HisData"),GetFileName(time));
//}
///// <summary>
///// 检查文件是否存在
///// </summary>
///// <param name="time"></param>
//private bool CheckFile(DateTime time)
//{
// if (!CheckInSameFile(time))
// {
// if (mNeedUpdateTagHeads)
// {
// Init();
// mNeedUpdateTagHeads = false;
// }
// mFileWriter.Flush();
// mFileWriter.Close();
// string sfile = GetDataPath(time);
// if (mFileWriter.CreatOrOpenFile(sfile))
// {
// AppendFileHeader(time, this.DatabaseName);
// //新建文件
// mCurrentDataRegion = FileHeadSize;
// mPreDataRegion = -1;
// AppendDataRegionHeader();
// }
// else
// {
// if (mFileWriter.Length < 8)
// {
// AppendFileHeader(time, this.DatabaseName);
// //新建文件
// mCurrentDataRegion = FileHeadSize;
// mPreDataRegion = -1;
// AppendDataRegionHeader();
// }
// else
// {
// //打开已有文件
// SearchLastDataRegion();
// AppendDataRegionHeader();
// }
// }
// }
// else
// {
// if (mNeedUpdateTagHeads)
// {
// Init();
// SearchLastDataRegion();
// AppendDataRegionHeader();
// mNeedUpdateTagHeads = false;
// }
// }
// return true;
//}
///// <summary>
/////
///// </summary>
///// <param name="time1"></param>
///// <param name="time2"></param>
///// <returns></returns>
//public bool CheckInSameFile(DateTime time1)
//{
// return GetFileName(time1) == mCurrentFileName;
//}
///// <summary>
/////
///// </summary>
///// <param name="time"></param>
///// <returns></returns>
//public string GetFileName(DateTime time)
//{
// return DatabaseName + time.ToString("yyyyMMdd") + FileDuration.ToString("D2") + (time.Hour/ FileDuration).ToString("D2")+ DataFileExtends;
//}
///// <summary>
/////
///// </summary>
///// <returns></returns>
//private int GetDataRegionHeaderLength()
//{
// //头部结构:Pre DataRegion(8) + Next DataRegion(8) + Datatime(8)+ tagcount(4)+ tagid sum(8)+file duration(4)+block duration(4)+Time tick duration(4)
// return 8 + 8 + 8 + 4 + 8 + 4 + 4 + 4;
//}
///// <summary>
/////
///// </summary>
//private void AppendFileHeader(DateTime time, string databaseName)
//{
// DateTime date = new DateTime(time.Year, time.Month, time.Day, ((time.Hour/FileDuration) * FileDuration), 0, 0);
// mFileWriter.Write(date, 0);
// byte[] nameBytes = new byte[64];
// var ntmp = Encoding.UTF8.GetBytes(databaseName);
// Buffer.BlockCopy(ntmp, 0, nameBytes, 0, Math.Min(64, ntmp.Length));
// mFileWriter.Write(nameBytes, 8);
//}
///// <summary>
/////
///// </summary>
//private void AppendDataRegionHeader()
//{
// var size = GeneratorDataRegionHeader();
// mFileWriter.Append(mHeadMemory.Buffers, 0, size);
// //更新上个DataRegion 的Next DataRegion Pointer 指针
// if (mPreDataRegion>=0)
// {
// mFileWriter.Write(mCurrentDataRegion, mPreDataRegion + 8);
// }
// mPreDataRegion = mCurrentDataRegion;
//}
///// <summary>
///// 生成文件头部
///// <paramref name="offset">偏移位置</paramref>
///// </summary>
//private int GeneratorDataRegionHeader()
//{
// //文件头部结构:Pre DataRegion(8) + Next DataRegion(8) + Datatime(8)+tagcount(4)+ tagid sum(8) +file duration(4)+ block duration(4)+Time tick duration(4)+ { len + [tag id]}+ [data blockpoint(8)]
// int blockcount = FileDuration * 60 / BlockDuration;
// int len = GetDataRegionHeaderLength() + mTagCount * (blockcount * 4);
// len += mTagIdMemoryCach.Position + 4;
// if (mHeadMemory != null)
// {
// if (len > mHeadMemory.Length)
// {
// mHeadMemory.ReAlloc(len);
// }
// else
// {
// mHeadMemory.Clear();
// }
// }
// else
// {
// mHeadMemory = new MemoryBlock(len);
// }
// mHeadMemory.Position = 0;
// mHeadMemory.Write((long)mPreDataRegion);//更新Pre DataRegion 指针
// mHeadMemory.Write((long)0); //更新Next DataRegion 指针
// mHeadMemory.Write(mCurrentTime); //写入时间
// mHeadMemory.Write(mTagCount); //写入变量个数
// mHeadMemory.Write(mTagIdSum); //写入Id 校验和
// mHeadMemory.Write(FileDuration); //写入文件持续时间
// mHeadMemory.Write(BlockDuration); //写入数据块持续时间
// mHeadMemory.Write(HisEnginer.MemoryTimeTick); //写入时间间隔
// //写入变量编号列表
// mHeadMemory.Write(mTagIdMemoryCach.Position);//写入压缩后的数组的长度
// mHeadMemory.Write(mTagIdMemoryCach.Buffer, 0, mTagIdMemoryCach.Position);//写入压缩数据
// return len;
//}
///// <summary>
///// 更新数据块文件指针
///// </summary>
///// <param name="id"></param>
///// <param name="datapointer"></param>
//public void UpdateDataBlockPointer(int id, long datapointer, DateTime dateTime)
//{
// int bindex = ((dateTime.Hour - mFileStartHour) * 60 + dateTime.Minute)/ BlockDuration;
// int icount = id / TagCountOneFile;
// long ids = mCurrentDataRegion + mIdAddrs[icount][id] + bindex * 8; //当前数据区域地址+数据指针的起始地址+指针偏移
// mFileWriter.Write(BitConverter.GetBytes(datapointer), ids);
//}
/// <summary>
/// 执行存储到磁盘
/// </summary>
...
...
@@ -535,58 +216,8 @@ namespace Cdy.Tag
Parallel
.
ForEach
(
memoryAddrs
,
(
keyval
)
=>
{
mSeriseFile
[
keyval
.
Key
].
SaveToFile
(
mProcessMemory
,
keyval
.
Value
,
mCurrentTime
);
});
//var totalsize = mProcessMemory.ReadInt(0);
//var count = mProcessMemory.ReadInt(4);
//var time = mProcessMemory.ReadDateTime(8);
//mTagCount = count;
//mCurrentTime = time;
//int offset = 16;
////判断变量的ID列表是否被修改了
//for (int i=0;i<count;i++)
//{
// var id = mProcessMemory.ReadInt(offset);
// if(!mIdAddrs.ContainsKey(id))
// {
// mNeedUpdateTagHeads = true;
// break;
// }
// offset += 8;
//}
//if (!CheckFile(time))
// return;
//offset = 16;
//int start = count * 8 + offset;//计算出数据起始地址
//this.mFileWriter.Append(mProcessMemory.Buffers, start, totalsize - start); //直接拷贝数据块
//var pos = mFileWriter.CurrentPostion;
//mFileStartHour = time.Hour / FileDuration;
//for (int i = 0; i < count; i++)
//{
// var id = mProcessMemory.ReadInt(offset);
// offset += 4;
// var addr = mProcessMemory.ReadInt(offset) + mCurrentDataRegion;
// offset += 4;
// UpdateDataBlockPointer(id, addr,time);
//}
//mCurrentDataRegion = pos;
//Flush();
}
///// <summary>
/////
///// </summary>
//public void Flush()
//{
// mFileWriter.Flush();
//}
#
endregion
...
Methods
...
#
region
...
Interfaces
...
...
...
@@ -989,7 +620,6 @@ namespace Cdy.Tag
var
totalsize
=
mProcessMemory
.
ReadInt
(
dataOffset
);
var
count
=
mProcessMemory
.
ReadInt
(
dataOffset
+
4
);
//var time = mProcessMemory.ReadDateTime(dataOffset + 8);
mTagCount
=
count
;
mCurrentTime
=
time
;
long
offset
=
8
+
dataOffset
;
...
...
DataRunner/Runner.cs
浏览文件 @
b2b0ff90
...
...
@@ -133,6 +133,7 @@ namespace Cdy.Tag
InitPath
();
mHisFileManager
=
new
DataFileManager
(
mDatabaseName
);
mHisFileManager
.
TagCountOneFile
=
mHisDatabase
.
Setting
.
TagCountOneFile
;
var
task
=
mHisFileManager
.
Int
();
...
...
@@ -147,6 +148,7 @@ namespace Cdy.Tag
hisEnginer
.
Init
();
compressEnginer
=
new
CompressEnginer
(
hisEnginer
.
CurrentMemory
.
Length
);
compressEnginer
.
TagCountOneFile
=
mHisDatabase
.
Setting
.
TagCountOneFile
;
seriseEnginer
=
new
SeriseEnginer
()
{
DatabaseName
=
database
};
seriseEnginer
.
FileDuration
=
mHisDatabase
.
Setting
.
FileDataDuration
;
...
...
Mars/.vs/Mars/DesignTimeBuild/.dtbcache
浏览文件 @
b2b0ff90
无法预览此类型文件
Mars/.vs/Mars/v16/.suo
浏览文件 @
b2b0ff90
无法预览此类型文件
Mars/.vs/Mars/v16/Server/sqlite3/storage.ide
浏览文件 @
b2b0ff90
无法预览此类型文件
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录