Compare commits
716
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b2276c086c | ||
|
|
4fa462661c | ||
|
|
2b30d0cf34 | ||
|
|
df2c56e6c4 | ||
|
|
a997c3d7be | ||
|
|
3c964f2aab | ||
|
|
c445b3e098 | ||
|
|
2ea2a2592e | ||
|
|
27072598cd | ||
|
|
4a2d4772d7 | ||
|
|
2bf00606d3 | ||
|
|
3773e1d96c | ||
|
|
19ddc753c7 | ||
|
|
0c41c750e8 | ||
|
|
4bfd5c8e11 | ||
|
|
f0fb70e38b | ||
|
|
6e5bcafec0 | ||
|
|
d5cb18c910 | ||
|
|
3a2069b255 | ||
|
|
80c651dbfd | ||
|
|
5a3b9b57c4 | ||
|
|
ead350eef3 | ||
|
|
b43657a4db | ||
|
|
8fffb9e366 | ||
|
|
0fdd229141 | ||
|
|
2f1ada3f5b | ||
|
|
988a8c6642 | ||
|
|
42ee9eaee3 | ||
|
|
3f28051d79 | ||
|
|
65f13cc868 | ||
|
|
cd8ba3cda3 | ||
|
|
a5936c8f19 | ||
|
|
2842425673 | ||
|
|
06a401a1ff | ||
|
|
3a2fc50fec | ||
|
|
38a58ed8b7 | ||
|
|
c7cba20de0 | ||
|
|
6311df49c3 | ||
|
|
f1d32a39ba | ||
|
|
224b53f774 | ||
|
|
1e2777c5e7 | ||
|
|
c3c21649fb | ||
|
|
99ccabc142 | ||
|
|
f1e6e94450 | ||
|
|
320cddb177 | ||
|
|
42002e3fa4 | ||
|
|
77cabfd712 | ||
|
|
c933e2d759 | ||
|
|
f3f0a46627 | ||
|
|
b5fb4c2947 | ||
|
|
f6cce9df3c | ||
|
|
c0385c0782 | ||
|
|
db43bdb652 | ||
|
|
6bdc10f4a7 | ||
|
|
9692dc7f4f | ||
|
|
6795793858 | ||
|
|
a2c564d789 | ||
|
|
3bc9e731e8 | ||
|
|
95c5f09238 | ||
|
|
0a45d66c0b | ||
|
|
96408eaef3 | ||
|
|
cae3ca7cdf | ||
|
|
c8adc093e0 | ||
|
|
4395516216 | ||
|
|
9281b52464 | ||
|
|
6571de7c32 | ||
|
|
a75d66e028 | ||
|
|
e839148a6f | ||
|
|
65b502a9b1 | ||
|
|
9cde62b2e2 | ||
|
|
cc86c38246 | ||
|
|
357df87f49 | ||
|
|
4b33da565c | ||
|
|
d11f855325 | ||
|
|
eef1f31a21 | ||
|
|
b878ee96a5 | ||
|
|
97eed27458 | ||
|
|
fe08550dc3 | ||
|
|
8a0ae8080f | ||
|
|
ab4025e55f | ||
|
|
22fffe602c | ||
|
|
e4c0219783 | ||
|
|
3362fdfaff | ||
|
|
6093db4502 | ||
|
|
5e7598667b | ||
|
|
4fe8729b85 | ||
|
|
b1dd6666f1 | ||
|
|
a3613889e1 | ||
|
|
7b87d63531 | ||
|
|
d838c78a8a | ||
|
|
7a8bef501a | ||
|
|
9863b54bc8 | ||
|
|
e57c6a6a02 | ||
|
|
afa215534c | ||
|
|
780d44166e | ||
|
|
35e4078dda | ||
|
|
47e09584f2 | ||
|
|
fc8e82c0e8 | ||
|
|
b729b08da2 | ||
|
|
3209ff303c | ||
|
|
41693d9c83 | ||
|
|
8f02f4ff31 | ||
|
|
1525bb7c1a | ||
|
|
2aeaf42325 | ||
|
|
bf4fb469da | ||
|
|
efd0515295 | ||
|
|
be8ac28bc7 | ||
|
|
56dc89ac82 | ||
|
|
62ffc94c49 | ||
|
|
50a38bc557 | ||
|
|
3e643854bc | ||
|
|
0daefb93bb | ||
|
|
f5731c67a0 | ||
|
|
d2ae5f3e83 | ||
|
|
c4d332b68b | ||
|
|
1daa0212ef | ||
|
|
1748a83ec8 | ||
|
|
b3d6b5a59f | ||
|
|
891795b101 | ||
|
|
a20b0761fd | ||
|
|
3b9e8d754d | ||
|
|
fed3281525 | ||
|
|
c1d966d86a | ||
|
|
b2d2f8c13b | ||
|
|
4e5e3d63e1 | ||
|
|
25602fb914 | ||
|
|
602d0d5308 | ||
|
|
f95198e40e | ||
|
|
d2b2bbb94b | ||
|
|
a4246c7ea4 | ||
|
|
498fc21412 | ||
|
|
3f07a506ad | ||
|
|
fb74e2d785 | ||
|
|
3a2290570d | ||
|
|
3b68e3f9fd | ||
|
|
3184b1da8e | ||
|
|
b70a10e697 | ||
|
|
3433bbbebe | ||
|
|
4c0a797e98 | ||
|
|
203c2498ac | ||
|
|
2023ea5221 | ||
|
|
cbb3d4f735 | ||
|
|
8acf219ba2 | ||
|
|
68884cd7df | ||
|
|
1629d82d65 | ||
|
|
17ab11bdf1 | ||
|
|
d2ef959f15 | ||
|
|
21b00e9b83 | ||
|
|
3d7aaaaa3d | ||
|
|
705f7760af | ||
|
|
3b385d592d | ||
|
|
cf6a16656b | ||
|
|
f50f9bfa5b | ||
|
|
77d8c95930 | ||
|
|
57c2019405 | ||
|
|
46432bc61b | ||
|
|
a4360f6993 | ||
|
|
97e0a764b8 | ||
|
|
7409af70ac | ||
|
|
783d51e71a | ||
|
|
a710ab7457 | ||
|
|
6a428e3c76 | ||
|
|
2e56b8e5cf | ||
|
|
1a4c18fa35 | ||
|
|
153d031125 | ||
|
|
5d4c7dfe68 | ||
|
|
021beeb47f | ||
|
|
1140d67c75 | ||
|
|
f0d26a36be | ||
|
|
6afb10351e | ||
|
|
2f3259d063 | ||
|
|
30a9396e4a | ||
|
|
2a94347f3e | ||
|
|
30f5e6c935 | ||
|
|
0ad8bc6d75 | ||
|
|
c076d6b343 | ||
|
|
64e32751c0 | ||
|
|
279c8eefb4 | ||
|
|
b931ed62ff | ||
|
|
05665288ab | ||
|
|
8af89136e7 | ||
|
|
5b6461fa0a | ||
|
|
1f51924bc8 | ||
|
|
b1f3b72a96 | ||
|
|
dfc0661300 | ||
|
|
f747755301 | ||
|
|
ad2c1d615f | ||
|
|
11ad6d39ee | ||
|
|
0f394f622b | ||
|
|
09c542e1e6 | ||
|
|
d772a3d531 | ||
|
|
87206ebe79 | ||
|
|
f4c77feeef | ||
|
|
ae6d77efc1 | ||
|
|
8318ed33e1 | ||
|
|
c4c86b36d2 | ||
|
|
990b695db6 | ||
|
|
33f050ef71 | ||
|
|
026a95e3ac | ||
|
|
4fd9030812 | ||
|
|
45d138ece3 | ||
|
|
4a884a09a1 | ||
|
|
a524915f28 | ||
|
|
7982526790 | ||
|
|
b866c45e9b | ||
|
|
0073ac8b9e | ||
|
|
36d661c75e | ||
|
|
e3f1f2711b | ||
|
|
f9ae8c54e1 | ||
|
|
ad7abe5471 | ||
|
|
a027f3f544 | ||
|
|
0930df5e64 | ||
|
|
1c5bf76bb3 | ||
|
|
d2d697ae80 | ||
|
|
60f30e4c41 | ||
|
|
ecccfab7a6 | ||
|
|
1691c634c6 | ||
|
|
900a2d660c | ||
|
|
eaf60f3292 | ||
|
|
bc0de96ad9 | ||
|
|
a770f5a9b8 | ||
|
|
0fbc9e2bad | ||
|
|
ed5cd89d6a | ||
|
|
dd5b20ab38 | ||
|
|
3f35506b26 | ||
|
|
1ee7e00928 | ||
|
|
ffbfd5ebd5 | ||
|
|
7a2afd1bdc | ||
|
|
30f9ea19dd | ||
|
|
2ec8683b27 | ||
|
|
4f59f23c6f | ||
|
|
daac273edb | ||
|
|
edb084260f | ||
|
|
8370c7c2e7 | ||
|
|
4a394cc5d5 | ||
|
|
f4db55cc0b | ||
|
|
b4f41a2f1f | ||
|
|
5b9156d670 | ||
|
|
bebb83f6fc | ||
|
|
130b59fc91 | ||
|
|
b2a7cfb0d4 | ||
|
|
b67857f658 | ||
|
|
046fab05c0 | ||
|
|
6004a65572 | ||
|
|
0962efd159 | ||
|
|
cb1a471248 | ||
|
|
8da049219a | ||
|
|
91b55eb19c | ||
|
|
6b582bea64 | ||
|
|
61910932c2 | ||
|
|
1ecf528ff0 | ||
|
|
9a5ee99a82 | ||
|
|
cf626d7b91 | ||
|
|
b9e8eeab00 | ||
|
|
b880b62924 | ||
|
|
36f8bfa32f | ||
|
|
8be3b53db4 | ||
|
|
95759e70b4 | ||
|
|
2e6a17121f | ||
|
|
ed21db65c3 | ||
|
|
d29a425880 | ||
|
|
a4139d7a73 | ||
|
|
a6a517b6ea | ||
|
|
07f36f2945 | ||
|
|
e2048ed64c | ||
|
|
90b62779fd | ||
|
|
1c6488d621 | ||
|
|
62e9f612fc | ||
|
|
9e9a01bd43 | ||
|
|
6dcd40c640 | ||
|
|
b54de856af | ||
|
|
118ce9797f | ||
|
|
36ae8479ca | ||
|
|
9ca9d41ddc | ||
|
|
4f26815e68 | ||
|
|
abd68f9a44 | ||
|
|
ae8a0ca4c1 | ||
|
|
ac5684a2b5 | ||
|
|
0f738be73e | ||
|
|
4b85db202e | ||
|
|
96c300d34f | ||
|
|
dbdf1f8fb6 | ||
|
|
6158ee93dc | ||
|
|
6270e0c417 | ||
|
|
67ba9986f2 | ||
|
|
d2e8f4f0e3 | ||
|
|
c9ea85b7b8 | ||
|
|
86ed8b13bf | ||
|
|
328c170888 | ||
|
|
ee31628417 | ||
|
|
267a6557df | ||
|
|
177d17cb81 | ||
|
|
4d0441d9a2 | ||
|
|
01523d3765 | ||
|
|
751f3b29bb | ||
|
|
969041354b | ||
|
|
ba3fcad44d | ||
|
|
877c8446ae | ||
|
|
ae6ee631c6 | ||
|
|
155a3a3113 | ||
|
|
c00f90ed8a | ||
|
|
285facc3fd | ||
|
|
b9d1fe5de7 | ||
|
|
56e519b4e4 | ||
|
|
33f5274a6d | ||
|
|
f1f662a419 | ||
|
|
00fc9ea847 | ||
|
|
b0a534315e | ||
|
|
158bba0d27 | ||
|
|
4a1eb91c2f | ||
|
|
ae876a649a | ||
|
|
e608c9fd6b | ||
|
|
a8ba5d5113 | ||
|
|
2bae912fa0 | ||
|
|
451faf1586 | ||
|
|
1a49390ba8 | ||
|
|
395e159522 | ||
|
|
fefd846f13 | ||
|
|
19d54d4990 | ||
|
|
e428897822 | ||
|
|
1b402566ed | ||
|
|
5d23bcade3 | ||
|
|
56d68f0b63 | ||
|
|
c16e9a8d56 | ||
|
|
955e55f327 | ||
|
|
fbd9c976eb | ||
|
|
2c0ae68db0 | ||
|
|
9a42e199e3 | ||
|
|
e3bb64ef0f | ||
|
|
4361227975 | ||
|
|
c5d550259f | ||
|
|
ab140cc6af | ||
|
|
43ce2552a2 | ||
|
|
d6880fc1b7 | ||
|
|
4b450846df | ||
|
|
95fb7ab9cc | ||
|
|
c5db2c0138 | ||
|
|
deabff9a18 | ||
|
|
fc81344857 | ||
|
|
fd35f20501 | ||
|
|
80f4308ae1 | ||
|
|
33f823b2d8 | ||
|
|
5ad4a07965 | ||
|
|
03900e453e | ||
|
|
e96692405c | ||
|
|
4f70997a38 | ||
|
|
f3a61411f5 | ||
|
|
f20acf0e11 | ||
|
|
57e413d6ff | ||
|
|
12abe09661 | ||
|
|
4e09cf5adb | ||
|
|
938da3ac62 | ||
|
|
3c59cd1bee | ||
|
|
8578c7f220 | ||
|
|
f23fc0d4c4 | ||
|
|
10b17c250c | ||
|
|
8d47659660 | ||
|
|
08a08282b5 | ||
|
|
851c51aa7c | ||
|
|
ecc92176f3 | ||
|
|
2a97a8f584 | ||
|
|
c18f06af07 | ||
|
|
b9b609cabf | ||
|
|
f96bf993d8 | ||
|
|
899b379cf7 | ||
|
|
868d16d8ee | ||
|
|
bfe7c5a29e | ||
|
|
c7c1c21ab3 | ||
|
|
fe9cfa42ff | ||
|
|
32762f0fdb | ||
|
|
d42ad8c5cf | ||
|
|
2eaf2b044c | ||
|
|
0b400fcbd0 | ||
|
|
7facefb305 | ||
|
|
917051f072 | ||
|
|
589fd9cf18 | ||
|
|
4914ded61d | ||
|
|
1af0b71503 | ||
|
|
2f1a8cc9d6 | ||
|
|
32047ef76a | ||
|
|
18f7de5f97 | ||
|
|
6d3fa9b110 | ||
|
|
eea94d1d9f | ||
|
|
a6ba6e26b2 | ||
|
|
c75e3d08d3 | ||
|
|
43a32adb7e | ||
|
|
9a7ed9668b | ||
|
|
068aee3cbd | ||
|
|
2710823931 | ||
|
|
6150c5b808 | ||
|
|
3c93e56b67 | ||
|
|
af13e2f2b4 | ||
|
|
4d018a8ba8 | ||
|
|
df89050d78 | ||
|
|
6071d7f598 | ||
|
|
1b767f6298 | ||
|
|
8da5512eb0 | ||
|
|
1133a2d5bf | ||
|
|
c8ff5f8813 | ||
|
|
1f0bbc0d4e | ||
|
|
ba549cbaee | ||
|
|
1a8a6defd9 | ||
|
|
9a5f2c1a60 | ||
|
|
ee89158ae3 | ||
|
|
15e9c25dcf | ||
|
|
c826b40e80 | ||
|
|
804cf2aaea | ||
|
|
47511ef873 | ||
|
|
43caffd73d | ||
|
|
0d0355c65a | ||
|
|
dfddc8a980 | ||
|
|
68c3ccbef6 | ||
|
|
ff28d507cf | ||
|
|
2c00ed6dc4 | ||
|
|
cd84c82475 | ||
|
|
e324de985f | ||
|
|
0e45ef6689 | ||
|
|
edc48d8723 | ||
|
|
3630af4a59 | ||
|
|
d1e0d1466d | ||
|
|
bbffc3b406 | ||
|
|
9bc9db1792 | ||
|
|
19c9e3a2da | ||
|
|
9a79ff1344 | ||
|
|
021f17c774 | ||
|
|
513c808f2b | ||
|
|
09a0968b76 | ||
|
|
351157dbba | ||
|
|
0494054171 | ||
|
|
587f6dffd0 | ||
|
|
a35716733d | ||
|
|
44761ff411 | ||
|
|
5f7a80b826 | ||
|
|
99337ba7d9 | ||
|
|
772080ae3b | ||
|
|
9b5ee442a6 | ||
|
|
51b3e994c3 | ||
|
|
335fce3e39 | ||
|
|
44fc7b92fd | ||
|
|
0f5c4b083d | ||
|
|
5996fda348 | ||
|
|
339d79595d | ||
|
|
a2a3d5940e | ||
|
|
62913cf68f | ||
|
|
3b70baeff0 | ||
|
|
bfa69ef611 | ||
|
|
8c7bd51ca8 | ||
|
|
87fa7fb669 | ||
|
|
7205682d75 | ||
|
|
235da5e9e1 | ||
|
|
13b30b2caf | ||
|
|
b5e2a7bdc9 | ||
|
|
078bd8aaf4 | ||
|
|
cef5dc3c10 | ||
|
|
1355777fe0 | ||
|
|
f82da6e4c8 | ||
|
|
6c181cdb67 | ||
|
|
a0aea713b0 | ||
|
|
709636e82b | ||
|
|
273f2b73d4 | ||
|
|
c74047c292 | ||
|
|
dd72d6f046 | ||
|
|
f80181e53e | ||
|
|
7988cd60ba | ||
|
|
057e4fa240 | ||
|
|
398661b763 | ||
|
|
6809c75613 | ||
|
|
3e674b972a | ||
|
|
3a6b734aee | ||
|
|
554709538b | ||
|
|
47efa15dd5 | ||
|
|
a8f42cbb63 | ||
|
|
a975b5d0f4 | ||
|
|
af551b07bf | ||
|
|
84b48c4ecc | ||
|
|
16de6c5d8b | ||
|
|
3b81f1a143 | ||
|
|
aa04ea620b | ||
|
|
3a28e33437 | ||
|
|
95f9b01cb0 | ||
|
|
6309796af5 | ||
|
|
2a2eae0c6a | ||
|
|
11c47964a9 | ||
|
|
4c89c0f7c4 | ||
|
|
2106e82ede | ||
|
|
cd15ab2432 | ||
|
|
ac7c737d1b | ||
|
|
827a9f7c58 | ||
|
|
f1ef16e1a3 | ||
|
|
7613613fad | ||
|
|
9d01d565df | ||
|
|
9f5c89db06 | ||
|
|
0568966ba6 | ||
|
|
62d725d879 | ||
|
|
81151935bc | ||
|
|
bec7287531 | ||
|
|
db3a40d817 | ||
|
|
0a1966d5f9 | ||
|
|
cfe55e430a | ||
|
|
2642e3cc46 | ||
|
|
4f1e7507f9 | ||
|
|
3a2ab6c286 | ||
|
|
fc95847377 | ||
|
|
c5769bed0c | ||
|
|
24413482bc | ||
|
|
65b5164f0b | ||
|
|
b98af02b55 | ||
|
|
4e32d037ea | ||
|
|
5ea9c51f77 | ||
|
|
08c0a61110 | ||
|
|
fdb1e112dc | ||
|
|
870b49d8ad | ||
|
|
17c77758c6 | ||
|
|
3f0124825d | ||
|
|
5507a65170 | ||
|
|
b2099ad68c | ||
|
|
9d1698b462 | ||
|
|
847956f708 | ||
|
|
95d5d16c83 | ||
|
|
b36a76f413 | ||
|
|
1f05cc420c | ||
|
|
eeaf1e1682 | ||
|
|
1905d3644e | ||
|
|
39197ddd71 | ||
|
|
8b8198e298 | ||
|
|
b57ffac9bc | ||
|
|
1dc35e6135 | ||
|
|
5aec3c1ecc | ||
|
|
3603d31add | ||
|
|
be326dae5f | ||
|
|
ce3328fbf6 | ||
|
|
9724e8779a | ||
|
|
f33bc4f167 | ||
|
|
d84588650f | ||
|
|
02747a975a | ||
|
|
5d78f7428b | ||
|
|
d5544d3041 | ||
|
|
d02e06cb9a | ||
|
|
988bcd6387 | ||
|
|
56294bbffc | ||
|
|
3a8f9ea2e0 | ||
|
|
6d9a7e2385 | ||
|
|
dd24c8b073 | ||
|
|
4e12942f5f | ||
|
|
a81858ee9f | ||
|
|
3b211b8644 | ||
|
|
0732e8360f | ||
|
|
c53cb8ace0 | ||
|
|
a58fe1f997 | ||
|
|
cb1a66381f | ||
|
|
535038bce1 | ||
|
|
e651244601 | ||
|
|
b63408cc68 | ||
|
|
bb3a6ff4f3 | ||
|
|
ce0b8af4a0 | ||
|
|
1bc3e5d6eb | ||
|
|
08c2d3b0d8 | ||
|
|
4fda48f7e7 | ||
|
|
dd08ca770d | ||
|
|
c7e87c95da | ||
|
|
79e80e8b6d | ||
|
|
689841cd2d | ||
|
|
0cc21f40af | ||
|
|
e4da4929e4 | ||
|
|
8a846a774f | ||
|
|
51aa0f4e43 | ||
|
|
4e9d1c8281 | ||
|
|
5e790e5d07 | ||
|
|
931a4bcc00 | ||
|
|
d6ae50f4dd | ||
|
|
ef004ce92e | ||
|
|
df6741cf1a | ||
|
|
f083fe568e | ||
|
|
a8e808a510 | ||
|
|
27972aff64 | ||
|
|
0468d9abf5 | ||
|
|
bebb5e5909 | ||
|
|
71c4f8f32f | ||
|
|
1a8ef4f1be | ||
|
|
6be8af6d63 | ||
|
|
68ca5c4901 | ||
|
|
79e1fff45e | ||
|
|
eb142244e4 | ||
|
|
baf7f84343 | ||
|
|
0fc8bb4ea0 | ||
|
|
25856496d8 | ||
|
|
ebf7c97bc6 | ||
|
|
9bfa70d5c1 | ||
|
|
80beb9d54b | ||
|
|
aff25e307d | ||
|
|
ce6896b584 | ||
|
|
9b1a427369 | ||
|
|
78f9b10255 | ||
|
|
061ab99486 | ||
|
|
ef96c06328 | ||
|
|
8f5291332f | ||
|
|
747195fc10 | ||
|
|
0e8bbec3bc | ||
|
|
141b9a7b4c | ||
|
|
595f0c514e | ||
|
|
e1dfe758cd | ||
|
|
6eaa9dad90 | ||
|
|
be9d912489 | ||
|
|
d7e65ff04b | ||
|
|
ff70a11cad | ||
|
|
e201c0ea66 | ||
|
|
1c093caff3 | ||
|
|
48484e1dbb | ||
|
|
068c51157e | ||
|
|
e8e1be644b | ||
|
|
d971831ab8 | ||
|
|
a432bbb5c6 | ||
|
|
95a0cebcf8 | ||
|
|
d22158404d | ||
|
|
4770f3e393 | ||
|
|
d287902f62 | ||
|
|
f74fff9b51 | ||
|
|
bdefc0b8fa | ||
|
|
afa213f8d5 | ||
|
|
7af4e9465c | ||
|
|
6e1b02ebd5 | ||
|
|
93d5398f10 | ||
|
|
baae5655d4 | ||
|
|
b1862e2f02 | ||
|
|
3e7ad6c06c | ||
|
|
768fb69653 | ||
|
|
21183ca801 | ||
|
|
13b3aca95f | ||
|
|
a21766b944 | ||
|
|
6f701adb9e | ||
|
|
e4c6bf5aa6 | ||
|
|
a1edfcc71a | ||
|
|
e2a8d66e48 | ||
|
|
6cf3bd6160 | ||
|
|
84c8ec26b6 | ||
|
|
d27c1b89ad | ||
|
|
f87cbe9e54 | ||
|
|
2a96af3503 | ||
|
|
1e5e0508e4 | ||
|
|
1baba9ee6d | ||
|
|
724872eb43 | ||
|
|
69fde570ce | ||
|
|
9495b9f3a3 | ||
|
|
cdca702738 | ||
|
|
f5786ef93d | ||
|
|
1c27f0df4c | ||
|
|
3f9973f8b8 | ||
|
|
be07d04f67 | ||
|
|
c950cc231c | ||
|
|
8dc45484b0 | ||
|
|
35815fe78a | ||
|
|
b5f8d06e5b | ||
|
|
a9d6fa631c | ||
|
|
878e7be9fa | ||
|
|
4cf4192ebb | ||
|
|
5325d7f6ee | ||
|
|
f54430ccf6 | ||
|
|
71ae636410 | ||
|
|
3732d3255f | ||
|
|
56a9984626 | ||
|
|
29d64c69eb | ||
|
|
63a15fc1de | ||
|
|
d2f3a937ec | ||
|
|
8c15fe34ee | ||
|
|
57793ed382 | ||
|
|
fea9b01922 | ||
|
|
a33e4de467 | ||
|
|
5a1d77dd87 | ||
|
|
ea05871b19 | ||
|
|
229c87f920 | ||
|
|
dd8feaa963 | ||
|
|
8507511776 | ||
|
|
1e8d2975f0 | ||
|
|
1fb76a2167 | ||
|
|
34f8bb226f | ||
|
|
bc3fb0f8a0 | ||
|
|
9416b79b38 | ||
|
|
20171e99a6 | ||
|
|
822ef33da8 | ||
|
|
3bfb34a6ea | ||
|
|
c28828fcdd | ||
|
|
889a370f90 | ||
|
|
a369127850 | ||
|
|
82a3574222 | ||
|
|
f3fc3d3ba4 | ||
|
|
a5a139aff6 | ||
|
|
09da203962 | ||
|
|
77ad6a529d | ||
|
|
54658bdd38 | ||
|
|
809897342a | ||
|
|
70767de3fc | ||
|
|
d62c1ff106 | ||
|
|
bf583e3061 | ||
|
|
270a46982d | ||
|
|
659315c519 | ||
|
|
04db3f975e | ||
|
|
c0e18458aa | ||
|
|
d09316a34a | ||
|
|
8c0ebcb871 | ||
|
|
fcdf1ea16b | ||
|
|
d6261e4d80 | ||
|
|
9f5c4e7347 | ||
|
|
90e58266a9 | ||
|
|
5b5f0ac41e | ||
|
|
ddca028eb2 | ||
|
|
fea7d0dc85 | ||
|
|
1f67899a5c | ||
|
|
2945049288 | ||
|
|
070a76aade | ||
|
|
2c100c7150 | ||
|
|
19b23ea212 | ||
|
|
e5edb90bfd | ||
|
|
2ec611964f | ||
|
|
c007bca797 | ||
|
|
767796662e | ||
|
|
7b321abb30 |
+56
-22
@@ -1,13 +1,13 @@
|
||||
AppDiagnostic/bin/
|
||||
AppDiagnostic/obj/
|
||||
Common/bin/
|
||||
Common/obj/
|
||||
Config/bin/
|
||||
Config/obj/
|
||||
DataMatrix4Net/bin/
|
||||
DataMatrix4Net/obj/
|
||||
DataStreamInterface/bin/
|
||||
DataStreamInterface/obj/
|
||||
DataStreamInterfaceTest/bin/
|
||||
DataStreamInterfaceTest/obj/
|
||||
DataStreamMeter/bin/
|
||||
DataStreamMeter/obj/
|
||||
Decrypt/bin/
|
||||
Decrypt/obj/
|
||||
DeviceTest/bin/
|
||||
@@ -18,42 +18,76 @@ Encrypt/bin/
|
||||
Encrypt/obj/
|
||||
EventViewer/bin/
|
||||
EventViewer/obj/
|
||||
Events/bin/
|
||||
Events/obj/
|
||||
FeatureVectorCalculator/bin/
|
||||
FeatureVectorCalculator/obj/
|
||||
GemCard/bin
|
||||
GemCard/obj
|
||||
GenCode128/bin
|
||||
GenCode128/obj
|
||||
GraphLib/bin
|
||||
GraphLib/obj
|
||||
MergeResultsDBs/bin
|
||||
MergeResultsDBs/obj
|
||||
TracingDB/bin
|
||||
TracingDB/obj
|
||||
ResetBatchNr/bin
|
||||
ResetBatchNr/obj
|
||||
RestClient/bin
|
||||
RestClient/obj
|
||||
GemCard/bin/
|
||||
GemCard/obj/
|
||||
GenCode128/bin/
|
||||
GenCode128/obj/
|
||||
GenericTest/bin/
|
||||
GenericTest/obj/
|
||||
GraphLib/bin/
|
||||
GraphLib/obj/
|
||||
LabelPrinting/bin/
|
||||
LabelPrinting/obj/
|
||||
MergeResultsDBs/bin/
|
||||
MergeResultsDBs/obj/
|
||||
NfcC7_Dll/bin/
|
||||
NfcC7_Dll/obj/
|
||||
NfcC7_DLL.Tests/bin/
|
||||
NfcC7_DLL.Tests/obj/
|
||||
OrderManagement/bin/
|
||||
OrderManagement/obj/
|
||||
ProductionTracing/bin/
|
||||
ProductionTracing/obj/
|
||||
RecordProcessing/bin/
|
||||
RecordProcessing/obj/
|
||||
ResetBatchNr/bin/
|
||||
ResetBatchNr/obj/
|
||||
RestClient/bin/
|
||||
RestClient/obj/
|
||||
Results/bin/
|
||||
Results/obj/
|
||||
ResultsBrowser/bin/
|
||||
ResultsBrowser/obj/
|
||||
ResultsParser/bin/
|
||||
ResultsParser/obj/
|
||||
S640TestApp/bin/
|
||||
S640TestApp/obj/
|
||||
SharedComponents/bin/
|
||||
SharedComponents/obj/
|
||||
SharedDatabase/bin/
|
||||
SharedDatabase/obj/
|
||||
SchematicDrawing/bin/
|
||||
SchematicDrawing/obj/
|
||||
Statistics/bin/
|
||||
Statistics/obj/
|
||||
TBF/bin/
|
||||
TBF/obj/
|
||||
TBFTests/bin/
|
||||
TBFTests/obj/
|
||||
ToFirstMonitor/bin/
|
||||
ToFirstMonitor/obj/
|
||||
ToSecondMonitor/bin/
|
||||
ToSecondMonitor/obj/
|
||||
Users/bin/
|
||||
Users/obj/
|
||||
UserManagement/bin/
|
||||
UserManagement/obj/
|
||||
WorkflowConfigurator/bin/
|
||||
WorkflowConfigurator/obj/
|
||||
Workplace/bin/
|
||||
Workplace/obj/
|
||||
DataStreamInterfaceTest/bin/
|
||||
DataStreamInterfaceTest/obj/
|
||||
DataStreamMeter/bin/
|
||||
DataStreamMeter/obj/
|
||||
Events/bin/
|
||||
Events/obj/
|
||||
TracingDB/bin/
|
||||
TracingDB/obj/
|
||||
Users/bin/
|
||||
Users/obj/
|
||||
.vs/
|
||||
.idea/
|
||||
*.suo
|
||||
*.bak
|
||||
TBF.sln.DotSettings.user
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||
</startup>
|
||||
<log4net>
|
||||
<appender name="LogCacheAppender" type="Namespace.LogCacheAppender, AssemblyName">
|
||||
<param name="Cache" value="YourCacheInstance" />
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<root>
|
||||
<level value="DEBUG" />
|
||||
<appender-ref ref="LogCacheAppender" />
|
||||
</root>
|
||||
</log4net>
|
||||
</configuration>
|
||||
+32
-61
@@ -1,16 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{1D1EEF9C-7F41-43D3-BD09-5054D00F7A23}</ProjectGuid>
|
||||
<ProjectGuid>{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>DataStreamInterfaceTest</RootNamespace>
|
||||
<AssemblyName>DataStreamInterfaceTest</AssemblyName>
|
||||
<RootNamespace>AppDiagnostic</RootNamespace>
|
||||
<AssemblyName>AppDiagnostic</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@@ -32,68 +33,40 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ActivityLog.cs" />
|
||||
<Compile Include="DemoMainWnd.cs">
|
||||
<Compile Include="BufferedListView.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DiagApi.cs" />
|
||||
<Compile Include="LogAdapter.cs" />
|
||||
<Compile Include="LogFilter.cs" />
|
||||
<Compile Include="MainForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="DemoMainWnd.Designer.cs">
|
||||
<DependentUpon>DemoMainWnd.cs</DependentUpon>
|
||||
<Compile Include="MainForm.Designer.cs">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GetDblValueDlg.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GetDblValueDlg.designer.cs">
|
||||
<DependentUpon>GetDblValueDlg.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GetFrameBoundariesDlg.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GetFrameBoundariesDlg.designer.cs">
|
||||
<DependentUpon>GetFrameBoundariesDlg.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GetIntegerNumberDlg.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GetIntegerNumberDlg.Designer.cs">
|
||||
<DependentUpon>GetIntegerNumberDlg.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GetStateDlg.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GetStateDlg.designer.cs">
|
||||
<DependentUpon>GetStateDlg.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="LviIDComparer.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="DemoMainWnd.resx">
|
||||
<DependentUpon>DemoMainWnd.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GetDblValueDlg.resx">
|
||||
<DependentUpon>GetDblValueDlg.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GetFrameBoundariesDlg.resx">
|
||||
<DependentUpon>GetFrameBoundariesDlg.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GetIntegerNumberDlg.resx">
|
||||
<DependentUpon>GetIntegerNumberDlg.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GetStateDlg.resx">
|
||||
<DependentUpon>GetStateDlg.cs</DependentUpon>
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
@@ -103,7 +76,9 @@
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
@@ -118,17 +93,13 @@
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DataStreamInterface\DataStreamInterface.csproj">
|
||||
<Project>{7ebeea14-91c4-48d7-af0a-7a4bc3ff9a28}</Project>
|
||||
<Name>DataStreamInterface</Name>
|
||||
<ProjectReference Include="..\SharedComponents\SharedComponents.csproj">
|
||||
<Project>{8f942729-f454-4c99-ba6c-746962065ae3}</Project>
|
||||
<Name>SharedComponents</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\TBF_icon.ico" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
public class BufferedListView : ListView
|
||||
{
|
||||
public BufferedListView()
|
||||
{
|
||||
// Zapne dvojité bufferovanie pre ListView
|
||||
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
|
||||
this.UpdateStyles();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AppDiagnostic
|
||||
{
|
||||
public class DiagApi
|
||||
{
|
||||
private static MainForm diagWindow; // Udržiava referenciu na existujúce okno
|
||||
|
||||
public DiagApi()
|
||||
{
|
||||
if (diagWindow == null || diagWindow.IsDisposed) // Ak okno neexistuje, vytvoríme ho
|
||||
{
|
||||
diagWindow = new MainForm();
|
||||
diagWindow.FormClosing += (s, e) =>
|
||||
{
|
||||
diagWindow = null; // Keď sa zavrie, vyčistíme referenciu
|
||||
};
|
||||
diagWindow.Show();
|
||||
}
|
||||
else
|
||||
{
|
||||
diagWindow.BringToFront(); // Ak už beží, len ho presunieme na vrch
|
||||
diagWindow.WindowState = FormWindowState.Normal; // Ak je minimalizované, obnovíme ho
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
using SharedComponents;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AppDiagnostic
|
||||
{
|
||||
public class LogAdapter
|
||||
{
|
||||
private ListView _listView;
|
||||
public string _filterText = string.Empty;
|
||||
private bool _isUserScrolling = false; // Indikátor, že používateľ manuálne scrolluje
|
||||
private bool _autoScrollEnabled = true; // Indikátor, že automatické scrollovanie je povolené
|
||||
private Timer _refreshTimer;
|
||||
private const int RefreshInterval = 1000;
|
||||
|
||||
public LogAdapter(ListView listView)
|
||||
{
|
||||
_listView = listView;
|
||||
|
||||
// Nastavenie ListView
|
||||
_listView.View = View.Details;
|
||||
_listView.Columns.Clear();
|
||||
_listView.Columns.Add("Logs");
|
||||
|
||||
_listView.Scrollable = true;
|
||||
|
||||
// Nastavenie šírky stĺpca na celú šírku ListView
|
||||
AdjustColumnWidth();
|
||||
|
||||
// Udalosť pre dynamickú zmenu veľkosti stĺpca pri zmene veľkosti ListView
|
||||
_listView.Resize += (sender, args) => AdjustColumnWidth();
|
||||
|
||||
// Pridanie udalosti pre manuálne skrolovanie
|
||||
_listView.MouseWheel += ListView_MouseWheel;
|
||||
|
||||
// Inicializácia časovača na pravidelný refresh
|
||||
_refreshTimer = new Timer { Interval = RefreshInterval };
|
||||
_refreshTimer.Tick += (sender, args) => RefreshListView();
|
||||
_refreshTimer.Start();
|
||||
}
|
||||
|
||||
private void ListView_MouseWheel(object sender, MouseEventArgs e)
|
||||
{
|
||||
_isUserScrolling = true;
|
||||
|
||||
// Ak sa manuálnym scrollovaním používateľ dostane na koniec, obnovíme automatické scrollovanie
|
||||
if (IsOnLastItem())
|
||||
{
|
||||
_isUserScrolling = false;
|
||||
_autoScrollEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_autoScrollEnabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void RefreshListView()
|
||||
{
|
||||
//LiveLogCache.Instance.AddLog(string.Format("-------------------------------RunDeviceAfter()-------------------------------"));
|
||||
|
||||
if (_listView.InvokeRequired)
|
||||
{
|
||||
_listView.Invoke(new Action(RefreshListView));
|
||||
return;
|
||||
}
|
||||
|
||||
_listView.BeginUpdate();
|
||||
try
|
||||
{
|
||||
// Získanie pozície prvého viditeľného prvku pre stabilizáciu scrollovania
|
||||
int topIndexBeforeRefresh = _listView.TopItem?.Index ?? 0;
|
||||
|
||||
// Pred pridaním nových položiek si pamätáme, či bol používateľ na poslednej položke
|
||||
bool wasOnLastItem = IsOnLastItem();
|
||||
|
||||
// Uchovanie aktuálne označených položiek (indexov)
|
||||
var selectedIndices = _listView.SelectedIndices.Cast<int>().ToList();
|
||||
|
||||
// Načítanie logov
|
||||
var logs = LiveLogCache.Instance.GetLogs(0, LiveLogCache.Instance.GetCount())
|
||||
.Where(log => string.IsNullOrEmpty(_filterText) ||
|
||||
log.IndexOf(_filterText, StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
.ToList();
|
||||
|
||||
// Vymazanie existujúcich položiek a pridanie nových
|
||||
_listView.Items.Clear();
|
||||
|
||||
foreach (var log in logs)
|
||||
{
|
||||
var item = new ListViewItem(log)
|
||||
{
|
||||
BackColor = _listView.Items.Count % 2 == 0 ? Color.White : Color.FromArgb(240, 240, 240)
|
||||
};
|
||||
_listView.Items.Add(item);
|
||||
}
|
||||
|
||||
// Obnovenie označených položiek
|
||||
foreach (var index in selectedIndices)
|
||||
{
|
||||
if (index < _listView.Items.Count)
|
||||
{
|
||||
_listView.Items[index].Selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Ak bol používateľ na poslednom prvku, nastavíme focus a scroll na posledný prvok
|
||||
if (_autoScrollEnabled && wasOnLastItem && _listView.Items.Count > 0)
|
||||
{
|
||||
var lastItemIndex = _listView.Items.Count - 1;
|
||||
_listView.EnsureVisible(lastItemIndex);
|
||||
_listView.Items[lastItemIndex].Focused = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ak používateľ nebol na spodku, vrátime sa na predchádzajúcu pozíciu scrollu
|
||||
if (topIndexBeforeRefresh < _listView.Items.Count)
|
||||
{
|
||||
_listView.TopItem = _listView.Items[topIndexBeforeRefresh];
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_listView.EndUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ApplyFilter(string filterText)
|
||||
{
|
||||
_filterText = filterText?.Trim() ?? string.Empty;
|
||||
RefreshListView();
|
||||
}
|
||||
|
||||
private bool IsOnLastItem()
|
||||
{
|
||||
if (_listView.Items.Count == 0)
|
||||
return false;
|
||||
|
||||
// Získame poslednú položku
|
||||
int lastItemIndex = _listView.Items.Count - 1;
|
||||
var lastItem = _listView.Items[lastItemIndex];
|
||||
|
||||
// Overíme, či je posledná položka úplne viditeľná
|
||||
return lastItem.Bounds.Bottom <= _listView.ClientRectangle.Bottom;
|
||||
}
|
||||
|
||||
public void EnableAutoScroll()
|
||||
{
|
||||
_autoScrollEnabled = true;
|
||||
}
|
||||
|
||||
public void DisableAutoScroll()
|
||||
{
|
||||
_autoScrollEnabled = false;
|
||||
}
|
||||
|
||||
private void AdjustColumnWidth()
|
||||
{
|
||||
if (_listView.Columns.Count > 0)
|
||||
{
|
||||
_listView.Columns[0].Width = _listView.ClientSize.Width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
using SharedComponents;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AppDiagnostic
|
||||
{
|
||||
public class LogFilter
|
||||
{
|
||||
private ListView _listView;
|
||||
private string _filterText = string.Empty; // Pre uloženie aktuálneho filtrovaného reťazca
|
||||
|
||||
// Konstruktor
|
||||
public LogFilter(ListView listView)
|
||||
{
|
||||
_listView = listView;
|
||||
}
|
||||
|
||||
// Metóda na aplikovanie filtra na ListView
|
||||
public void ApplyFilter(string filterText)
|
||||
{
|
||||
_filterText = filterText.ToLower(); // Ukladáme text filtra bez ohľadu na veľkosť písmen
|
||||
|
||||
// Po aplikovaní filtra obnovíme zobrazenie
|
||||
RefreshListView();
|
||||
}
|
||||
|
||||
public void RefreshListView()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Skontrolujeme, či sme na hlavnom vlákne a v prípade potreby použijeme Invoke
|
||||
if (_listView.InvokeRequired)
|
||||
{
|
||||
// Použijeme Invoke, ak nie sme na hlavnom vlákne
|
||||
_listView.Invoke(new Action(RefreshListView));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Vymazanie existujúcich položiek
|
||||
_listView.Items.Clear();
|
||||
|
||||
// Načítame všetky logy (ideálne z cache alebo databázy)
|
||||
var logs = LiveLogCache.Instance.GetLogs(0, LiveLogCache.Instance.Logs.Count);
|
||||
|
||||
// Pridáme len tie logy, ktoré spĺňajú filter
|
||||
foreach (var log in logs)
|
||||
{
|
||||
if (log.ToLower().Contains(_filterText)) // Kontrola, či log obsahuje filter text
|
||||
{
|
||||
var listViewItem = new ListViewItem(log);
|
||||
|
||||
// Striedanie farieb riadkov
|
||||
if (_listView.Items.Count % 2 == 0) // Párny index => biela
|
||||
{
|
||||
listViewItem.BackColor = Color.White;
|
||||
}
|
||||
else // Nepárny index => svetlá sivá
|
||||
{
|
||||
listViewItem.BackColor = Color.FromArgb(240, 240, 240); // Veľmi svetlá sivá
|
||||
}
|
||||
|
||||
// Pridanie efektu pre novú položku
|
||||
ApplyNewItemEffect(listViewItem);
|
||||
|
||||
// Pridanie položky do ListView
|
||||
_listView.Items.Add(listViewItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Zachytíme výnimku, ak sa niečo pokazí, a zobrazíme ju užívateľovi
|
||||
MessageBox.Show($"An error occurred while refreshing the log view: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
|
||||
// Môžete pridať ďalšie metódy na zobrazenie alebo efekt pre nové položky, ak je to potrebné
|
||||
private void ApplyNewItemEffect(ListViewItem item)
|
||||
{
|
||||
// Prípadný efekt pre nový pridaný log
|
||||
// Môžete pridať animáciu alebo zmenu farby atď.
|
||||
item.ForeColor = Color.Green; // Napríklad zmeníme farbu písma na zelenú
|
||||
}
|
||||
}
|
||||
}
|
||||
Generated
+278
@@ -0,0 +1,278 @@
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AppDiagnostic
|
||||
{
|
||||
partial class MainForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
//private BufferedListView memoListView;
|
||||
private System.Windows.Forms.ColumnHeader columnHeaderTime;
|
||||
private System.Windows.Forms.ColumnHeader columnHeaderMessage;
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.columnHeaderTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeaderMessage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.refreshMemoButton = new System.Windows.Forms.Button();
|
||||
this.button6 = new System.Windows.Forms.Button();
|
||||
this.button7 = new System.Windows.Forms.Button();
|
||||
this.filterManagementPanel = new System.Windows.Forms.Panel();
|
||||
this.button5 = new System.Windows.Forms.Button();
|
||||
this.filterButton = new System.Windows.Forms.Button();
|
||||
this.filterTextBox = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.wndControlPanel = new System.Windows.Forms.Panel();
|
||||
this.button2 = new System.Windows.Forms.Button();
|
||||
this.flowControlsPanel = new System.Windows.Forms.Panel();
|
||||
this.runButton = new System.Windows.Forms.Button();
|
||||
this.stopButton = new System.Windows.Forms.Button();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.memoListView = new BufferedListView();
|
||||
this.panel1.SuspendLayout();
|
||||
this.filterManagementPanel.SuspendLayout();
|
||||
this.wndControlPanel.SuspendLayout();
|
||||
this.flowControlsPanel.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// columnHeaderTime
|
||||
//
|
||||
this.columnHeaderTime.Text = "Time";
|
||||
this.columnHeaderTime.Width = 150;
|
||||
//
|
||||
// columnHeaderMessage
|
||||
//
|
||||
this.columnHeaderMessage.Text = "Message";
|
||||
this.columnHeaderMessage.Width = 350;
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.panel1.Controls.Add(this.refreshMemoButton);
|
||||
this.panel1.Controls.Add(this.button6);
|
||||
this.panel1.Controls.Add(this.button7);
|
||||
this.panel1.Location = new System.Drawing.Point(189, 356);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(283, 26);
|
||||
this.panel1.TabIndex = 16;
|
||||
//
|
||||
// refreshMemoButton
|
||||
//
|
||||
this.refreshMemoButton.Location = new System.Drawing.Point(108, 0);
|
||||
this.refreshMemoButton.Name = "refreshMemoButton";
|
||||
this.refreshMemoButton.Size = new System.Drawing.Size(84, 26);
|
||||
this.refreshMemoButton.TabIndex = 17;
|
||||
this.refreshMemoButton.Text = "Refresh memo";
|
||||
this.refreshMemoButton.UseVisualStyleBackColor = true;
|
||||
this.refreshMemoButton.Click += new System.EventHandler(this.refreshMemoButton_Click);
|
||||
//
|
||||
// button6
|
||||
//
|
||||
this.button6.Location = new System.Drawing.Point(0, 0);
|
||||
this.button6.Name = "button6";
|
||||
this.button6.Size = new System.Drawing.Size(102, 26);
|
||||
this.button6.TabIndex = 4;
|
||||
this.button6.Text = "Clean diag cache";
|
||||
this.button6.UseVisualStyleBackColor = true;
|
||||
this.button6.Click += new System.EventHandler(this.button6_Click);
|
||||
//
|
||||
// button7
|
||||
//
|
||||
this.button7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.button7.Location = new System.Drawing.Point(198, 0);
|
||||
this.button7.Name = "button7";
|
||||
this.button7.Size = new System.Drawing.Size(72, 26);
|
||||
this.button7.TabIndex = 5;
|
||||
this.button7.Text = "Save logs";
|
||||
this.button7.UseVisualStyleBackColor = true;
|
||||
this.button7.Click += new System.EventHandler(this.button7_Click);
|
||||
//
|
||||
// filterManagementPanel
|
||||
//
|
||||
this.filterManagementPanel.Controls.Add(this.button5);
|
||||
this.filterManagementPanel.Controls.Add(this.filterButton);
|
||||
this.filterManagementPanel.Controls.Add(this.filterTextBox);
|
||||
this.filterManagementPanel.Controls.Add(this.label2);
|
||||
this.filterManagementPanel.Location = new System.Drawing.Point(127, 6);
|
||||
this.filterManagementPanel.Name = "filterManagementPanel";
|
||||
this.filterManagementPanel.Size = new System.Drawing.Size(393, 26);
|
||||
this.filterManagementPanel.TabIndex = 15;
|
||||
//
|
||||
// button5
|
||||
//
|
||||
this.button5.Enabled = false;
|
||||
this.button5.Location = new System.Drawing.Point(294, 4);
|
||||
this.button5.Name = "button5";
|
||||
this.button5.Size = new System.Drawing.Size(81, 20);
|
||||
this.button5.TabIndex = 11;
|
||||
this.button5.Text = "Add new filter";
|
||||
this.button5.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// filterButton
|
||||
//
|
||||
this.filterButton.Location = new System.Drawing.Point(225, 4);
|
||||
this.filterButton.Name = "filterButton";
|
||||
this.filterButton.Size = new System.Drawing.Size(64, 20);
|
||||
this.filterButton.TabIndex = 10;
|
||||
this.filterButton.Text = "Set filter";
|
||||
this.filterButton.UseVisualStyleBackColor = true;
|
||||
this.filterButton.Click += new System.EventHandler(this.filterButton_Click_1);
|
||||
//
|
||||
// filterTextBox
|
||||
//
|
||||
this.filterTextBox.Location = new System.Drawing.Point(33, 4);
|
||||
this.filterTextBox.Name = "filterTextBox";
|
||||
this.filterTextBox.Size = new System.Drawing.Size(187, 20);
|
||||
this.filterTextBox.TabIndex = 7;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(3, 8);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(29, 13);
|
||||
this.label2.TabIndex = 6;
|
||||
this.label2.Text = "Filter";
|
||||
//
|
||||
// wndControlPanel
|
||||
//
|
||||
this.wndControlPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.wndControlPanel.Controls.Add(this.button2);
|
||||
this.wndControlPanel.Location = new System.Drawing.Point(831, 356);
|
||||
this.wndControlPanel.Name = "wndControlPanel";
|
||||
this.wndControlPanel.Size = new System.Drawing.Size(70, 26);
|
||||
this.wndControlPanel.TabIndex = 14;
|
||||
//
|
||||
// button2
|
||||
//
|
||||
this.button2.Location = new System.Drawing.Point(3, 0);
|
||||
this.button2.Name = "button2";
|
||||
this.button2.Size = new System.Drawing.Size(64, 26);
|
||||
this.button2.TabIndex = 2;
|
||||
this.button2.Text = "Close";
|
||||
this.button2.UseVisualStyleBackColor = true;
|
||||
this.button2.Click += new System.EventHandler(this.button2_Click);
|
||||
//
|
||||
// flowControlsPanel
|
||||
//
|
||||
this.flowControlsPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.flowControlsPanel.Controls.Add(this.runButton);
|
||||
this.flowControlsPanel.Controls.Add(this.stopButton);
|
||||
this.flowControlsPanel.Location = new System.Drawing.Point(12, 356);
|
||||
this.flowControlsPanel.Name = "flowControlsPanel";
|
||||
this.flowControlsPanel.Size = new System.Drawing.Size(133, 26);
|
||||
this.flowControlsPanel.TabIndex = 13;
|
||||
//
|
||||
// runButton
|
||||
//
|
||||
this.runButton.Enabled = false;
|
||||
this.runButton.Location = new System.Drawing.Point(0, 0);
|
||||
this.runButton.Name = "runButton";
|
||||
this.runButton.Size = new System.Drawing.Size(64, 26);
|
||||
this.runButton.TabIndex = 4;
|
||||
this.runButton.Text = "Run";
|
||||
this.runButton.UseVisualStyleBackColor = true;
|
||||
this.runButton.Click += new System.EventHandler(this.runButton_Click);
|
||||
//
|
||||
// stopButton
|
||||
//
|
||||
this.stopButton.Location = new System.Drawing.Point(69, 0);
|
||||
this.stopButton.Name = "stopButton";
|
||||
this.stopButton.Size = new System.Drawing.Size(64, 26);
|
||||
this.stopButton.TabIndex = 5;
|
||||
this.stopButton.Text = "Stop";
|
||||
this.stopButton.UseVisualStyleBackColor = true;
|
||||
this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(12, 19);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(76, 13);
|
||||
this.label1.TabIndex = 12;
|
||||
this.label1.Text = "Flow of events";
|
||||
//
|
||||
// memoListView
|
||||
//
|
||||
this.memoListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.memoListView.FullRowSelect = true;
|
||||
this.memoListView.GridLines = true;
|
||||
this.memoListView.HideSelection = false;
|
||||
this.memoListView.Location = new System.Drawing.Point(12, 38);
|
||||
this.memoListView.Name = "memoListView";
|
||||
this.memoListView.Size = new System.Drawing.Size(889, 312);
|
||||
this.memoListView.TabIndex = 0;
|
||||
this.memoListView.UseCompatibleStateImageBehavior = false;
|
||||
this.memoListView.View = System.Windows.Forms.View.Details;
|
||||
|
||||
this.memoListView.DoubleClick += new System.EventHandler(this.MemoListView_DoubleClick);
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(913, 388);
|
||||
this.Controls.Add(this.memoListView);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.filterManagementPanel);
|
||||
this.Controls.Add(this.wndControlPanel);
|
||||
this.Controls.Add(this.flowControlsPanel);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Name = "MainForm";
|
||||
this.Text = "Application live diagnostic";
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.filterManagementPanel.ResumeLayout(false);
|
||||
this.filterManagementPanel.PerformLayout();
|
||||
this.wndControlPanel.ResumeLayout(false);
|
||||
this.flowControlsPanel.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Panel panel1;
|
||||
private System.Windows.Forms.Button button6;
|
||||
private System.Windows.Forms.Button button7;
|
||||
private System.Windows.Forms.Panel filterManagementPanel;
|
||||
private System.Windows.Forms.Button button5;
|
||||
private System.Windows.Forms.Button filterButton;
|
||||
private System.Windows.Forms.TextBox filterTextBox;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Panel wndControlPanel;
|
||||
private System.Windows.Forms.Button button2;
|
||||
private System.Windows.Forms.Panel flowControlsPanel;
|
||||
private System.Windows.Forms.Button runButton;
|
||||
private System.Windows.Forms.Button stopButton;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Button refreshMemoButton;
|
||||
private BufferedListView memoListView;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,268 @@
|
||||
using log4net.Config;
|
||||
using log4net;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using log4net.Appender;
|
||||
using SharedComponents;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
using System.IO; // Pre File.WriteAllLines a prácu so súbormi
|
||||
using System.Linq;
|
||||
|
||||
namespace AppDiagnostic
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
private bool stopUpdate = false; // Premenná na zastavenie aktualizácie
|
||||
private int lastDisplayedLogIndex = 0;
|
||||
private bool autoScrollEnabled = true; // Automatický posun, predvolene povolený
|
||||
private MainForm appDiagnosticForm;
|
||||
private Timer refreshTimer;
|
||||
private LogAdapter _logAdapter; // Pre LogAdapter
|
||||
private LogFilter _logFilter; // LogFilter objekt pre filtráciu
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
this.Icon = Properties.Resources.TBF_icon;
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
// Inicializujeme LogAdapter a priradíme ho k memoListView
|
||||
_logAdapter = new LogAdapter(memoListView);
|
||||
|
||||
RefreshLogView();
|
||||
|
||||
// Pripojenie na udalosť pri pridaní nového logu
|
||||
// nakoľko sa memo refreshuje cyklicky, tak refresh na udalosť nepotrebujem
|
||||
//LiveLogCache.Instance.LogAdded += OnLogAdded;
|
||||
|
||||
// Vytvoríme LogFilter objekt
|
||||
//_logFilter = new LogFilter(memoListView);
|
||||
}
|
||||
|
||||
private void OnLogAdded(string log)
|
||||
{
|
||||
try
|
||||
{
|
||||
RefreshLogView();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"Error in OnLogAdded: {ex.Message}");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshLogView()
|
||||
{
|
||||
// Skontrolujte, či voláme z iného vlákna
|
||||
if (InvokeRequired)
|
||||
{
|
||||
Invoke((Action)RefreshLogView);
|
||||
return;
|
||||
}
|
||||
|
||||
memoListView.BeginUpdate(); // Zabraňuje vizuálnym aktualizáciám počas vykresľovania
|
||||
|
||||
try
|
||||
{
|
||||
// Skontrolujte, či je užívateľ na poslednom viditeľnom zázname
|
||||
if (memoListView.Items.Count > 0)
|
||||
{
|
||||
var lastVisibleIndex = memoListView.TopItem.Index + memoListView.ClientRectangle.Height / memoListView.Items[0].Bounds.Height;
|
||||
autoScrollEnabled = lastVisibleIndex >= memoListView.Items.Count - 1;
|
||||
}
|
||||
|
||||
// Získajte nové logy od posledného indexu
|
||||
var logs = LiveLogCache.Instance.GetLogs(lastDisplayedLogIndex, LiveLogCache.Instance.Logs.Count - lastDisplayedLogIndex);
|
||||
|
||||
// Pridajte len nové logy
|
||||
foreach (var log in logs)
|
||||
{
|
||||
memoListView.Items.Add(new ListViewItem(log));
|
||||
}
|
||||
|
||||
// Aktualizujte posledný zobrazený index
|
||||
lastDisplayedLogIndex = LiveLogCache.Instance.Logs.Count;
|
||||
|
||||
// Ak je autoScrollEnabled, posuňte sa na posledný záznam
|
||||
if (autoScrollEnabled && memoListView.Items.Count > 0)
|
||||
{
|
||||
memoListView.EnsureVisible(memoListView.Items.Count - 1);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
memoListView.EndUpdate(); // Umožní vizuálne aktualizácie
|
||||
}
|
||||
}
|
||||
|
||||
// Táto metóda sa spustí pri scrollovaní v memoListView (tzn. ak sa používateľ dostane na spodok listu)
|
||||
private void memoListView_Scroll(object sender, EventArgs e)
|
||||
{
|
||||
// Skontrolujte, či používateľ dosiahol spodok ListView
|
||||
if (memoListView.Items.Count > 0 &&
|
||||
memoListView.Items[memoListView.Items.Count - 1].Bounds.Bottom <= memoListView.ClientSize.Height)
|
||||
{
|
||||
// Ak áno, načítame ďalšie logy
|
||||
RefreshLogView();
|
||||
}
|
||||
}
|
||||
|
||||
private void button6_Click(object sender, EventArgs e)
|
||||
{
|
||||
//LiveLogCache.Instance.AddLog("Nový log z hlavnej aplikácie");
|
||||
|
||||
LiveLogCache.Instance.ClearLogs();
|
||||
ClearListView();
|
||||
}
|
||||
|
||||
private void runButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (stopUpdate) // Ak je časovač zastavený, spustíme ho
|
||||
{
|
||||
stopUpdate = false; // Zastav aktualizáciu
|
||||
runButton.Enabled = false; // Zakážeme tlačidlo Start počas behu
|
||||
stopButton.Enabled = true; // Povolenie tlačidla Stop
|
||||
refreshTimer.Start();
|
||||
}
|
||||
}
|
||||
|
||||
private void stopButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!stopUpdate) // Ak časovač beží, môžeme ho zastaviť
|
||||
{
|
||||
stopUpdate = true; // Spusti aktualizáciu
|
||||
runButton.Enabled = true; // Povolenie tlačidla Start
|
||||
stopButton.Enabled = false; // Zakážeme tlačidlo Stop
|
||||
refreshTimer.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
private void ClearListView()
|
||||
{
|
||||
if (InvokeRequired)
|
||||
{
|
||||
Invoke(new Action(ClearListView));
|
||||
return;
|
||||
}
|
||||
|
||||
memoListView.Items.Clear();
|
||||
}
|
||||
|
||||
private void refreshMemoButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void button7_Click(object sender, EventArgs e)
|
||||
{
|
||||
SaveLogsToFile();
|
||||
//LiveLogCache.Instance.AddLog("Toto je nový log.");
|
||||
}
|
||||
|
||||
protected override void OnFormClosing(FormClosingEventArgs e)
|
||||
{
|
||||
// Odpojenie udalosti, keď sa okno zatvára, inak môže po opätovnom spustení okna a pridaní nového itemu do listu zhhodiť program
|
||||
// nakoľko sa memo refreshuje cyklicky, tak refresh na udalosť nepotrebujem
|
||||
//LiveLogCache.Instance.LogAdded -= OnLogAdded;
|
||||
|
||||
_logAdapter = null;
|
||||
|
||||
base.OnFormClosing(e);
|
||||
}
|
||||
|
||||
private void filterButton_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
// Aplikujeme filter na základe textu z filterTextBox
|
||||
string filterText = filterTextBox.Text;
|
||||
//_logFilter.ApplyFilter(filterText); // Aplikovanie filtra
|
||||
_logAdapter.ApplyFilter(filterText);
|
||||
}
|
||||
private void SubForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Vaša logika pri uzatváraní formy
|
||||
// this.Hide(); // Podforma sa len skryje
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Ošetrenie výnimky
|
||||
MessageBox.Show("Chyba pri zatváraní pod-aplikácie: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveLogsToFile()
|
||||
{
|
||||
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
|
||||
{
|
||||
saveFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
|
||||
saveFileDialog.Title = "Save TBF live logs";
|
||||
saveFileDialog.DefaultExt = "txt";
|
||||
saveFileDialog.FileName = "TBFLiveLogs.txt";
|
||||
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Načítanie všetkých logov z LiveLogCache
|
||||
var logs = LiveLogCache.Instance.GetLogs(0, LiveLogCache.Instance.GetCount());
|
||||
|
||||
// Uloženie logov do vybraného súboru
|
||||
File.WriteAllLines(saveFileDialog.FileName, logs);
|
||||
|
||||
MessageBox.Show("Logs saved successfully.", "Save TBF live logs", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"An error occurred while saving TBF live logs: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
//this.Hide(); // Podforma sa len skryje
|
||||
}
|
||||
|
||||
private void MemoListView_DoubleClick(object sender, EventArgs e)
|
||||
{
|
||||
if (memoListView.SelectedItems.Count > 0)
|
||||
{
|
||||
var selectedItem = memoListView.SelectedItems[0];
|
||||
int selectedIndex = memoListView.Items.IndexOf(selectedItem);
|
||||
|
||||
if (selectedIndex >= 0)
|
||||
{
|
||||
// Zrušenie filtra
|
||||
_logAdapter._filterText = string.Empty;
|
||||
|
||||
// Načítanie logov od indexu vybraného riadku
|
||||
var logs = LiveLogCache.Instance.GetLogs(selectedIndex, LiveLogCache.Instance.GetCount() - selectedIndex);
|
||||
|
||||
// Obnovenie ListView s novými údajmi
|
||||
memoListView.BeginUpdate();
|
||||
memoListView.Items.Clear();
|
||||
foreach (var log in logs)
|
||||
{
|
||||
var item = new ListViewItem(log)
|
||||
{
|
||||
BackColor = memoListView.Items.Count % 2 == 0 ? Color.White : Color.FromArgb(240, 240, 240)
|
||||
};
|
||||
memoListView.Items.Add(item);
|
||||
}
|
||||
memoListView.EndUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AppDiagnostic
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new MainForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("AppDiagnostic")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("AppDiagnostic")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("fa9abad1-7184-4295-ade8-d44f2e3de6b2")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace AppDiagnostic.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AppDiagnostic.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon TBF_icon {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("TBF_icon", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-41
@@ -117,46 +117,8 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="okButton.Text" xml:space="preserve">
|
||||
<value>OK</value>
|
||||
</data>
|
||||
<data name="groupBox1.Text" xml:space="preserve">
|
||||
<value>Wodomierz 1</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Nr seryjny:</value>
|
||||
</data>
|
||||
<data name="groupBox2.Text" xml:space="preserve">
|
||||
<value>Wodomierz 2</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Nr seryjny:</value>
|
||||
</data>
|
||||
<data name="groupBox3.Text" xml:space="preserve">
|
||||
<value>Wodomierz 3</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>Nr seryjny:</value>
|
||||
</data>
|
||||
<data name="groupBox4.Text" xml:space="preserve">
|
||||
<value>Wodomierz 4</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>Nr seryjny:</value>
|
||||
</data>
|
||||
<data name="groupBox5.Text" xml:space="preserve">
|
||||
<value>Wodomierz 5</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>Nr seryjny:</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Wodomierz 6</value>
|
||||
</data>
|
||||
<data name="groupBox6.Text" xml:space="preserve">
|
||||
<value>Nr seryjny:</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Data</value>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="TBF_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\TBF_icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace DataStreamInterfaceTest.Properties
|
||||
namespace AppDiagnostic.Properties
|
||||
{
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="3.0.3" targetFramework="net472" />
|
||||
</packages>
|
||||
+10
-4
@@ -17,7 +17,7 @@
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DefineConstants>TRACE;DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
@@ -30,6 +30,9 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Drawing" />
|
||||
@@ -60,18 +63,21 @@
|
||||
<Compile Include="Forms\ModelessForm.designer.cs">
|
||||
<DependentUpon>ModelessForm.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Formulas.cs" />
|
||||
<Compile Include="CurrentUser.cs" />
|
||||
<Compile Include="GlobalData.cs" />
|
||||
<Compile Include="IMeasurementCorrection.cs" />
|
||||
<Compile Include="IOrderInfo.cs" />
|
||||
<Compile Include="IParamsProvider.cs" />
|
||||
<Compile Include="Iperl\OptoTelegramRaw.cs" />
|
||||
<Compile Include="IUncertainty.cs" />
|
||||
<Compile Include="IUser.cs" />
|
||||
<Compile Include="Printers\PrintersCommon.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="QuitAppException.cs" />
|
||||
<Compile Include="StatisticalMetrics.cs" />
|
||||
<Compile Include="Iperl\OptoTelegramRaw.cs" />
|
||||
<Compile Include="SerializableDictionary.cs" />
|
||||
<Compile Include="StatisticalMetrics.cs" />
|
||||
<Compile Include="Telegram.cs" />
|
||||
<Compile Include="UIControls\CoolButtonCtrl.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
@@ -84,6 +90,7 @@
|
||||
<Compile Include="Utils.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Forms\ListViewEx.resx">
|
||||
<DependentUpon>ListViewEx.cs</DependentUpon>
|
||||
@@ -92,7 +99,6 @@
|
||||
<DependentUpon>ModelessForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
||||
@@ -1,40 +1,41 @@
|
||||
///
|
||||
/// Copyright (c) 2016-2022 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2021-2022 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Windows.Forms;
|
||||
using Common;
|
||||
using Users.Entities;
|
||||
|
||||
namespace Users
|
||||
namespace Common
|
||||
{
|
||||
class UserAndForm
|
||||
{
|
||||
public readonly User User;
|
||||
public readonly IUser User;
|
||||
public readonly Form Form;
|
||||
|
||||
public UserAndForm(User user, Form form)
|
||||
public UserAndForm(IUser user, Form form)
|
||||
{
|
||||
User = user;
|
||||
Form = form;
|
||||
}
|
||||
}
|
||||
|
||||
public class CurrentUser
|
||||
public static class CurrentUser
|
||||
{
|
||||
public static DBSettings RemoteUsersDB = null;
|
||||
public const string AdminUsername = "admin";
|
||||
public const string AdminPassword = "staratura";
|
||||
|
||||
public static int MinPasswdLength = 0;
|
||||
public static int PasswdExpirationPeriodDays = 0;
|
||||
|
||||
public static DBSettings RemoteUsersDB = null;
|
||||
public static DBSettings LocalUsersDB = null;
|
||||
|
||||
|
||||
static readonly Stack<UserAndForm> userStack = new Stack<UserAndForm>();
|
||||
|
||||
public static AuthorizedAs AuthorizedAs;
|
||||
public static Common.AuthorizedAs AuthorizedAs;
|
||||
public static DateTime LastAuthorization = DateTime.Now;
|
||||
|
||||
public static int MinPasswdLength = 0;
|
||||
public static int PasswdExpirationPeriodDays = 0;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Push a new user into the stack of users and form references.
|
||||
@@ -42,7 +43,7 @@ namespace Users
|
||||
/// </summary>
|
||||
/// <param name="newUser">New user</param>
|
||||
/// <param name="currentForm">Reference to the current form</param>
|
||||
public static void Change(User newUser, Form currentForm)
|
||||
public static void Change(IUser newUser, Form currentForm)
|
||||
{
|
||||
if (userStack.Count > 0 && userStack.Peek().Form == currentForm)
|
||||
{
|
||||
@@ -72,19 +73,39 @@ namespace Users
|
||||
/// <summary>
|
||||
/// Return the user currenty at the top of the stack of users.
|
||||
/// </summary>
|
||||
public static User User()
|
||||
public static IUser User()
|
||||
{
|
||||
return (userStack.Count > 0) ? userStack.Peek().User : null; /// TODO: Return default user when stack is empty
|
||||
}
|
||||
|
||||
public static IUser User2;
|
||||
public static IUser User3;
|
||||
|
||||
/// <summary>
|
||||
/// Return the current user name or an empty string
|
||||
/// </summary>
|
||||
public static string UserName()
|
||||
{
|
||||
return (User() != null) ? User().UserName : string.Empty;
|
||||
if (User() == null || User().UserName == null)
|
||||
return string.Empty;
|
||||
else if (User2 == null || User2.UserName == null)
|
||||
return User().UserName;
|
||||
else if (User3 == null || User3.UserName == null)
|
||||
return string.Format("{0},{1}", User().UserName, User2.UserName);
|
||||
else
|
||||
return string.Format("{0},{1},{2}", User().UserName, User2.UserName, User3.UserName);
|
||||
}
|
||||
|
||||
public static string GetEncodedString(string legalizator)
|
||||
{
|
||||
if (User() == null || User().UserName == null) return string.Empty;
|
||||
return string.Format("{0}~{1}~{2}",
|
||||
User().UserName,
|
||||
User().FullName == null ? string.Empty : User().FullName,
|
||||
legalizator == null ? string.Empty : legalizator);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Return the current user number or 0
|
||||
/// </summary>
|
||||
+88
-43
@@ -1,9 +1,10 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2022 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Common
|
||||
{
|
||||
@@ -76,44 +77,6 @@ namespace Common
|
||||
Count
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Obsolete - replaced by enum ProcedureSelection (above) in 3.1 and newer
|
||||
/// </summary>
|
||||
public enum RemoteDBUse
|
||||
{
|
||||
[Description("Local DB only")] LocalDBOnly,
|
||||
[Description("Remote DB only")] RemoteDBOnly,
|
||||
[Description("Both DB-s, local 1st")] BothDBsLocalFirst,
|
||||
[Description("Both DB-s, remote 1st")] BothDBsRemoteFirst,
|
||||
Count
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Obsolete - Contains a procedure name and a database specification (local/remote).
|
||||
/// </summary>
|
||||
public class ProcedureInfo
|
||||
{
|
||||
public readonly string Name;
|
||||
public readonly bool IsRemote;
|
||||
|
||||
public ProcedureInfo(string name, bool isRemote)
|
||||
{
|
||||
Name = name;
|
||||
IsRemote = isRemote;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test designation mode for IperlLogger and IperlHead opto data files
|
||||
/// </summary>
|
||||
public enum DesigMode
|
||||
{
|
||||
Auto,
|
||||
Based_on_procedure,
|
||||
As_specified,
|
||||
Count
|
||||
}
|
||||
|
||||
public enum LoginMethod
|
||||
{
|
||||
UserName, /// = alias, abbreviation
|
||||
@@ -223,16 +186,70 @@ namespace Common
|
||||
Count,
|
||||
}
|
||||
|
||||
public enum FlowNames
|
||||
{
|
||||
QnQtQmin = 0,
|
||||
Q3Q2Q1 = 1,
|
||||
QpQi = 2,
|
||||
Count,
|
||||
}
|
||||
|
||||
public enum ProfileType
|
||||
{
|
||||
Q3R,
|
||||
QnClassColdWater,
|
||||
QnClassHotWater,
|
||||
QpQi,
|
||||
CompoundQ3RQ3R,
|
||||
CompoundQnClassQnClass,
|
||||
CompoundQ3RQnClass,
|
||||
CompoundQnClassQ3R,
|
||||
CompoundQpQiQpQi,
|
||||
Manual,
|
||||
Count,
|
||||
}
|
||||
|
||||
public enum FlowId
|
||||
{
|
||||
Any,
|
||||
Q4,
|
||||
Q3,
|
||||
Q2,
|
||||
Q1,
|
||||
Q4Main,
|
||||
Q3Main,
|
||||
Q2Main,
|
||||
Q1Main,
|
||||
Q4Aux,
|
||||
Q3Aux,
|
||||
Q2Aux,
|
||||
Q1Aux,
|
||||
Qmax,
|
||||
Qn,
|
||||
Qt,
|
||||
Qmin,
|
||||
QmaxMain,
|
||||
QnMain,
|
||||
QtMain,
|
||||
QminMain,
|
||||
QmaxAux,
|
||||
QnAux,
|
||||
QtAux,
|
||||
QminAux,
|
||||
Qp,
|
||||
Qp10,
|
||||
Qi,
|
||||
QpMain,
|
||||
Qp10Main,
|
||||
QiMain,
|
||||
QpAux,
|
||||
Qp10Aux,
|
||||
QiAux,
|
||||
Qdetected,
|
||||
Qfall,
|
||||
Qrise,
|
||||
}
|
||||
|
||||
public enum ErrorLimitType
|
||||
{
|
||||
Manual,
|
||||
@@ -273,11 +290,20 @@ namespace Common
|
||||
CompoundAux,
|
||||
Compound,
|
||||
HeatMeterVolume,
|
||||
HeatMeterEnergy,
|
||||
HeatMeterMass,//...MF
|
||||
HeatMeterEnergy,
|
||||
SingleOrCompound, /// Only used when querying results
|
||||
}
|
||||
|
||||
public enum Medium
|
||||
public enum PulsesTypeByQuantity : short
|
||||
{
|
||||
[Description("dm3")] Volume_dm3,
|
||||
[Description("kg")] Mass_kg,
|
||||
|
||||
Count
|
||||
}
|
||||
|
||||
public enum Medium
|
||||
{
|
||||
[Description("")] NotSpecified,
|
||||
#if LANG_PL
|
||||
@@ -342,7 +368,6 @@ namespace Common
|
||||
[Description("")] NotSpecified,
|
||||
[Description("U0")] U0, /// ?
|
||||
[Description("D0")] D0, /// ?
|
||||
///
|
||||
Count
|
||||
}
|
||||
|
||||
@@ -505,8 +530,10 @@ namespace Common
|
||||
public enum TestProfile
|
||||
{
|
||||
UserDefined,
|
||||
UserDefinedCompound,
|
||||
UserDefinedHeatMeter,
|
||||
Protected, /// The first protected one
|
||||
ProtectedCompound,
|
||||
ProtectedHeatMeter,
|
||||
}
|
||||
|
||||
@@ -681,7 +708,16 @@ namespace Common
|
||||
Count,
|
||||
}
|
||||
|
||||
public enum ImageRotation
|
||||
public enum DivResolution : int
|
||||
{
|
||||
[Description("1 ms (0.25 s)")] _1ms = 0,
|
||||
[Description("2 ms (0.5 s)")] _2ms = 1,
|
||||
[Description("4 ms (1 s)")] _4ms = 2,
|
||||
[Description("8 ms (2 s)")] _8ms = 3,
|
||||
Count,
|
||||
}
|
||||
|
||||
public enum ImageRotation
|
||||
{
|
||||
[Description("0 deg")] None,
|
||||
[Description("90 deg")] Deg90,
|
||||
@@ -803,6 +839,15 @@ namespace Common
|
||||
E63 = (1L << 62),
|
||||
}
|
||||
|
||||
//...MF
|
||||
public enum FlowType : int
|
||||
{
|
||||
none,
|
||||
volume,
|
||||
mass,
|
||||
Count,
|
||||
}
|
||||
|
||||
#region iPERL enums
|
||||
|
||||
public enum Side
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
using System;
|
||||
///
|
||||
/// Copyright (c) 2021-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
|
||||
namespace Common.Forms
|
||||
{
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
using System;
|
||||
///
|
||||
/// Copyright (c) 2021-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
@@ -53,20 +56,20 @@ namespace Common.Forms
|
||||
public event EventHandler<MessageEventArgs> UpdateMessageHandler;
|
||||
void OnUpdateMessage(object sender, MessageEventArgs args)
|
||||
{
|
||||
if (args.Message != null) label1.Text = args.Message;
|
||||
if (args != null && args.Message != null) label1.Text = args.Message;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Called from the state machine when an operation forces a modeless dialog close.
|
||||
/// </summary>
|
||||
public static void CloseForm()
|
||||
public void CloseForm()
|
||||
{
|
||||
if (CloseFormHandler == null) return;
|
||||
try { CloseFormHandler(null, null); }
|
||||
catch (Exception) { }
|
||||
}
|
||||
static public event EventHandler<EventArgs> CloseFormHandler;
|
||||
public event EventHandler<EventArgs> CloseFormHandler;
|
||||
void OnCloseForm(object sender, EventArgs args)
|
||||
{
|
||||
DialogResult = DialogResult.Cancel;
|
||||
|
||||
+2
-2
@@ -213,9 +213,9 @@ namespace Common
|
||||
/// </summary>
|
||||
public static double ErrorFromVolumes(double measuredVolume, double trueVolume)
|
||||
{
|
||||
if (trueVolume <= float.Epsilon)
|
||||
if (Math.Abs(trueVolume) <= float.Epsilon)
|
||||
{
|
||||
if (measuredVolume <= float.Epsilon)
|
||||
if (Math.Abs(measuredVolume) <= float.Epsilon)
|
||||
{
|
||||
log.WarnFormat("ErrorFromVolumes({0},{1}) returns {2}", measuredVolume, trueVolume, -100.0);
|
||||
return -100.0;
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
///
|
||||
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
|
||||
namespace Common
|
||||
{
|
||||
public static class GlobalData
|
||||
{
|
||||
public static double SampleDensity = 0; /// sample water density measured in an accredited labo [kg/m3]
|
||||
public static double SampleTemp = 0; /// sample temperature when density measured in an accredited labo [°C]
|
||||
public static double Buoyancy = 0;
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ namespace Common
|
||||
int Number { get; }
|
||||
|
||||
/// Access rights
|
||||
bool IsPowerUser();
|
||||
bool IsMemberOf(GID group);
|
||||
bool IsMemberOf(GID[] groups);
|
||||
bool IsCorrectPassword(string password);
|
||||
|
||||
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Common")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2020-2022")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2020")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
||||
+110
-3
@@ -33,6 +33,20 @@ namespace Common
|
||||
[Description("m3/m")] m3pm, /// 1 m3/m = 60 m3/h
|
||||
[Description("cf/s")] cfs, /// 1 cubic foot per second = 101.9406477312 m3/h
|
||||
|
||||
|
||||
[Description("g/s")] gps, /// 1 g/s = 0.0036 t/h
|
||||
[Description("g/min")] gpm, /// 1 g/min = 0.00006 t/h
|
||||
[Description("g/h")] gph, /// 1 g/h = 0.000001 t/h
|
||||
[Description("kg/s")] kgps, /// 1 kg/s = 3.6 t/h
|
||||
[Description("kg/min")] kgpm, /// 1 kg/min = 0.06 t/h
|
||||
[Description("kg/h")] kgph, /// 1 kg/h = 0.001 t/h
|
||||
[Description("t/s")] tps, /// 1 t/s = 3600 t/h
|
||||
[Description("t/min")] tpm, /// 1 t/min = 60 t/h
|
||||
[Description("t/h")] tph, /// 1 t/h = 1 t/h
|
||||
[Description("lb/s")] lbps, /// 1 lb/s ≈ 1.633 t/h
|
||||
[Description("lb/min")] lbpm, /// 1 lb/min ≈ 0.027216 t/h
|
||||
[Description("lb/h")] lbph, /// 1 lb/h ≈ 0.0004536 t/h
|
||||
|
||||
[Description("g")] g, /// 0.001 kg
|
||||
[Description("oz")] oz, /// 0.0283495231 kg
|
||||
[Description("lb")] lb, /// 0.45359237 kg
|
||||
@@ -105,6 +119,14 @@ namespace Common
|
||||
///
|
||||
[Description("pulse/kWh")] ppkWh, /// * 1 pulse/kWh
|
||||
[Description("kWh/pulse")] kWhpp, /// 1 kWh/pulse
|
||||
|
||||
///
|
||||
[Description("A")] A, /// *1 A
|
||||
[Description("mA")] mA, /// 1 mA = 0.001 A
|
||||
///
|
||||
[Description("V")] V, /// *1 V
|
||||
[Description("mV")] mV, /// 1 mV = 0.001 V
|
||||
|
||||
|
||||
Count
|
||||
}
|
||||
@@ -135,6 +157,8 @@ namespace Common
|
||||
[Description("Boolean")] Boolean,
|
||||
[Description("Datum und Uhrzeit")] DateTime,
|
||||
[Description("Aufgezählt")] Enumerated,
|
||||
[Description("Strom")] Current,
|
||||
[Description("Spannung")] Voltage,
|
||||
#elif LANG_PL
|
||||
[Description("Objętość")] Volume,
|
||||
[Description("Przepływ")] Flow,
|
||||
@@ -158,6 +182,8 @@ namespace Common
|
||||
[Description("Boolean")] Boolean,
|
||||
[Description("Data i czas")] DateTime,
|
||||
[Description("Wyliczone")] Enumerated,
|
||||
[Description("Prąd")] Current,
|
||||
[Description("Napięcie")] Voltage,
|
||||
#elif LANG_CS
|
||||
[Description("Objem")] Volume,
|
||||
[Description("Průtok")] Flow,
|
||||
@@ -181,6 +207,8 @@ namespace Common
|
||||
[Description("Boolean")] Boolean,
|
||||
[Description("Datum a čas")] DateTime,
|
||||
[Description("Vyjmenované")] Enumerated,
|
||||
[Description("Proud")] Current,
|
||||
[Description("Napětí")] Voltage,
|
||||
#elif LANG_IT
|
||||
[Description("Volume")] Volume,
|
||||
[Description("Flusso")] Flow,
|
||||
@@ -204,10 +232,16 @@ namespace Common
|
||||
[Description("Boolean")] Boolean,
|
||||
[Description("Data e ora")] DateTime,
|
||||
[Description("Enumerato")] Enumerated,
|
||||
[Description("Corrente")] Current,
|
||||
[Description("Voltaggio")] Voltage,
|
||||
#else
|
||||
[Description("RegisterReader")] RegisterReader,
|
||||
[Description("MultiFunctionalVariables")] MultiFunctionalVariables,
|
||||
[Description("VolumeFlow")] VolumeFlow,
|
||||
[Description("Volume")] Volume,
|
||||
[Description("Flow")] Flow,
|
||||
[Description("Mass")] Mass,
|
||||
[Description("MassFlow")] MassFlow,
|
||||
[Description("Mass")] Mass,
|
||||
[Description("Time")] Time,
|
||||
[Description("Temperature")] Temperature,
|
||||
[Description("Pressure")] Pressure,
|
||||
@@ -218,6 +252,8 @@ namespace Common
|
||||
[Description("Energy")] Energy,
|
||||
[Description("Pulses")] Pulses,
|
||||
[Description("Pulses/liter")] PulsePerLtr,
|
||||
[Description("Pulses/kg")] PulsePerKilogram, //...MF
|
||||
[Description("Pulses/Unit")] PulsePerUnit,//...MF
|
||||
[Description("Pulses/kWh")] PulsePerKWh,
|
||||
[Description("Conductivity")] Conductivity,
|
||||
|
||||
@@ -227,6 +263,8 @@ namespace Common
|
||||
[Description("Boolean")] Boolean,
|
||||
[Description("Date and time")] DateTime,
|
||||
[Description("Enumerated")] Enumerated,
|
||||
[Description("Current")] Current,
|
||||
[Description("Voltage")] Voltage,
|
||||
#endif
|
||||
Count,
|
||||
}
|
||||
@@ -242,7 +280,8 @@ namespace Common
|
||||
{
|
||||
return unit == Unit.l || unit == Unit.m3ph || unit == Unit.kg || unit == Unit.s || unit == Unit.C ||
|
||||
unit == Unit.bar || unit == Unit.RPct || unit == Unit.Pct || unit == Unit.mm || unit == Unit.kgpm3 ||
|
||||
unit == Unit.J || unit == Unit.uSpcm || unit == Unit.ppl || unit == Unit.ppkWh;
|
||||
unit == Unit.J || unit == Unit.uSpcm || unit == Unit.ppl || unit == Unit.ppkWh || unit == Unit.A ||
|
||||
unit == Unit.V;
|
||||
}
|
||||
|
||||
public static bool IsQuantity(Unit unit, Quantity quantity)
|
||||
@@ -259,29 +298,72 @@ namespace Common
|
||||
return Quantity.Pulses;
|
||||
|
||||
case Unit.ml:
|
||||
return Quantity.Volume;
|
||||
case Unit.l:
|
||||
return Quantity.Volume;
|
||||
case Unit.dm3:
|
||||
return Quantity.Volume;
|
||||
case Unit.USgal:
|
||||
return Quantity.Volume;
|
||||
case Unit.UKgal:
|
||||
return Quantity.Volume;
|
||||
case Unit.cf:
|
||||
return Quantity.Volume;
|
||||
case Unit.m3:
|
||||
return Quantity.Volume;
|
||||
|
||||
case Unit.lph:
|
||||
return Quantity.Flow;
|
||||
case Unit.cfph:
|
||||
return Quantity.Flow;
|
||||
case Unit.lpm:
|
||||
return Quantity.Flow;
|
||||
case Unit.USgalpm:
|
||||
return Quantity.Flow;
|
||||
case Unit.m3ph:
|
||||
return Quantity.Flow;
|
||||
case Unit.lps:
|
||||
return Quantity.Flow;
|
||||
case Unit.USgalps:
|
||||
return Quantity.Flow;
|
||||
case Unit.m3pm:
|
||||
return Quantity.Flow;
|
||||
case Unit.cfs:
|
||||
return Quantity.Flow;
|
||||
|
||||
case Unit.gps:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.gpm:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.gph:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.kgps:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.kgpm:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.kgph:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.tps:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.tpm:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.tph:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.lbps:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.lbpm:
|
||||
return Quantity.MassFlow;
|
||||
case Unit.lbph:
|
||||
return Quantity.MassFlow;
|
||||
|
||||
case Unit.g:
|
||||
return Quantity.Mass;
|
||||
case Unit.oz:
|
||||
return Quantity.Mass;
|
||||
case Unit.lb:
|
||||
return Quantity.Mass;
|
||||
case Unit.kg:
|
||||
return Quantity.Mass;
|
||||
case Unit.t:
|
||||
return Quantity.Mass;
|
||||
|
||||
@@ -351,14 +433,24 @@ namespace Common
|
||||
case Unit.ppkWh:
|
||||
case Unit.kWhpp:
|
||||
return Quantity.PulsePerKWh;
|
||||
|
||||
case Unit.A:
|
||||
case Unit.mA:
|
||||
return Quantity.Current;
|
||||
|
||||
case Unit.V:
|
||||
case Unit.mV:
|
||||
return Quantity.Voltage;
|
||||
|
||||
default:
|
||||
return Quantity.Number;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsVolume(Unit unit) { return IsQuantity(unit, Quantity.Volume); }
|
||||
public static bool IsVolumeFlow(Unit unit) { return IsQuantity(unit, Quantity.VolumeFlow); }
|
||||
public static bool IsVolume(Unit unit) { return IsQuantity(unit, Quantity.Volume); }
|
||||
public static bool IsFlow(Unit unit) { return IsQuantity(unit, Quantity.Flow); }
|
||||
public static bool IsMassFlow(Unit unit) { return IsQuantity(unit, Quantity.MassFlow); }
|
||||
public static bool IsMass(Unit unit) { return IsQuantity(unit, Quantity.Mass); }
|
||||
public static bool IsTime(Unit unit) { return IsQuantity(unit, Quantity.Time); }
|
||||
public static bool IsTemperature(Unit unit) { return IsQuantity(unit, Quantity.Temperature); }
|
||||
@@ -372,6 +464,8 @@ namespace Common
|
||||
public static bool IsPulsePerLtr(Unit unit) { return IsQuantity(unit, Quantity.PulsePerLtr); }
|
||||
public static bool IsPulsePerKWh(Unit unit) { return IsQuantity(unit, Quantity.PulsePerKWh); }
|
||||
public static bool IsConductivity(Unit unit) { return IsQuantity(unit, Quantity.Conductivity); }
|
||||
public static bool IsCurrent(Unit unit) { return IsQuantity(unit, Quantity.Current); }
|
||||
public static bool IsVoltage(Unit unit) { return IsQuantity(unit, Quantity.Voltage); }
|
||||
|
||||
|
||||
|
||||
@@ -455,6 +549,13 @@ namespace Common
|
||||
case Unit.dm3pp:
|
||||
case Unit.lpdeg:
|
||||
case Unit.dm3pdeg: return (v <= float.Epsilon) ? 0 : 1/v;
|
||||
|
||||
/// Current: internal representation in A
|
||||
case Unit.mA: return 1000 * v; /// 1000 mA = 1 A
|
||||
|
||||
/// Voltage: internal representation in V
|
||||
case Unit.mV: return 1000 * v; /// 1000 mV = 1 V
|
||||
|
||||
|
||||
default: return v; /// Do not convert
|
||||
}
|
||||
@@ -534,6 +635,12 @@ namespace Common
|
||||
|
||||
/// Electrical conductivity
|
||||
case Unit.mSpm: return 10 * v;
|
||||
|
||||
/// Current: internal representation in A
|
||||
case Unit.mA: return 0.001 * v; /// 1 mA = 0.001 A
|
||||
|
||||
/// Voltage: internal representation in V
|
||||
case Unit.mV: return 0.001 * v; /// 1 mV = 0.001 V
|
||||
|
||||
/// Invert
|
||||
case Unit.kWhpp:
|
||||
|
||||
+269
-2
@@ -1,11 +1,11 @@
|
||||
///
|
||||
/// Copyright (c) 2021-2022 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2021-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
|
||||
namespace Common
|
||||
{
|
||||
public class Utils
|
||||
public static class Utils
|
||||
{
|
||||
public static string GetTestName(string name, int repeats, int repetitionNr)
|
||||
{
|
||||
@@ -20,6 +20,29 @@ namespace Common
|
||||
return (format == "F0") ? value.ToString("F0") : value.ToString(format).TrimEnd(new char[] { '0' });
|
||||
}
|
||||
|
||||
public static FlowNames ProfileType2FlowNames(ProfileType pt, bool isAux = false)
|
||||
{
|
||||
switch (pt)
|
||||
{
|
||||
case ProfileType.Q3R:
|
||||
case ProfileType.CompoundQ3RQ3R:
|
||||
return FlowNames.Q3Q2Q1;
|
||||
case ProfileType.CompoundQ3RQnClass:
|
||||
return isAux ? FlowNames.QnQtQmin : FlowNames.Q3Q2Q1;
|
||||
case ProfileType.QnClassColdWater:
|
||||
case ProfileType.QnClassHotWater:
|
||||
case ProfileType.CompoundQnClassQnClass:
|
||||
return FlowNames.QnQtQmin;
|
||||
case ProfileType.CompoundQnClassQ3R:
|
||||
return isAux ? FlowNames.Q3Q2Q1 : FlowNames.QnQtQmin;
|
||||
case ProfileType.QpQi:
|
||||
case ProfileType.CompoundQpQiQpQi:
|
||||
return FlowNames.QpQi;
|
||||
default:
|
||||
return FlowNames.Q3Q2Q1;
|
||||
}
|
||||
}
|
||||
|
||||
public static string SignificantDigitsToFmt(double value, int sigDigits)
|
||||
{
|
||||
if (sigDigits == 6)
|
||||
@@ -92,5 +115,249 @@ namespace Common
|
||||
else return "F5";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get either Q1 or Qmin flow for a given Qn and metrological class
|
||||
/// </summary>
|
||||
/// <param name="Qn">Nominal flow in m3/h</param>
|
||||
/// <param name="metroClass">Metrological class ("A" ,"B", "C" or "R#")</param>
|
||||
/// <param name="medium">NotSpecified, ColdWater or HotWater</param>
|
||||
/// <param name="Qdflt">Default flow when metrologic does not match pattern</param>
|
||||
/// <returns>Q1 or Qmin flow in m3/h</returns>
|
||||
public static double GetQ1Qmin(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(metroClass)) return Qdflt;
|
||||
|
||||
int metroClassRatio;
|
||||
if ((metroClass[0] == 'R') && int.TryParse(metroClass.Substring(1), out metroClassRatio) && (metroClassRatio > 0))
|
||||
{
|
||||
return Qn / (double)metroClassRatio;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (medium == Medium.HotWater)
|
||||
{
|
||||
switch (metroClass)
|
||||
{
|
||||
case "A": return (Qn < 15) ? (0.04 * Qn) : (0.08 * Qn);
|
||||
case "B": return (Qn < 15) ? (0.02 * Qn) : (0.04 * Qn);
|
||||
case "C": return (Qn < 15) ? (0.01 * Qn) : (0.02 * Qn);
|
||||
case "D": return (Qn < 15) ? (0.01 * Qn) : Qdflt;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (metroClass)
|
||||
{
|
||||
case "A": return (Qn < 15) ? (0.04 * Qn) : (0.08 * Qn);
|
||||
case "B": return (Qn < 15) ? (0.02 * Qn) : (0.03 * Qn);
|
||||
case "C": return (Qn < 15) ? (0.01 * Qn) : (0.006 * Qn);
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Qdflt;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get either Q2 or Qt flow for a given Qn and metrological class
|
||||
/// </summary>
|
||||
/// <param name="Qn">Nominal flow in m3/h</param>
|
||||
/// <param name="metroClass">Metrological class ("A" ,"B", "C" or "R#")</param>
|
||||
/// <param name="medium">NotSpecified, ColdWater or HotWater</param>
|
||||
/// <param name="Qdflt">Default flow when metrologic does not match pattern</param>
|
||||
/// <returns>Q2 or Qt flow in m3/h</returns>
|
||||
public static double GetQ2Qt(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(metroClass)) return Qdflt;
|
||||
|
||||
int metroClassRatio;
|
||||
if ((metroClass[0] == 'R') && int.TryParse(metroClass.Substring(1), out metroClassRatio) && (metroClassRatio > 0))
|
||||
{
|
||||
return 1.6 * Qn / (double)metroClassRatio;
|
||||
}
|
||||
|
||||
if (medium == Medium.HotWater)
|
||||
{
|
||||
switch (metroClass)
|
||||
{
|
||||
case "A": return (Qn < 15) ? (0.1 * Qn) : (0.2 * Qn);
|
||||
case "B": return (Qn < 15) ? (0.08 * Qn) : (0.15 * Qn);
|
||||
case "C": return (Qn < 15) ? (0.06 * Qn) : (0.1 * Qn);
|
||||
case "D": return (Qn < 15) ? (0.015 * Qn) : Qdflt;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (metroClass)
|
||||
{
|
||||
case "A": return (Qn < 15) ? (0.1 * Qn) : (0.3 * Qn);
|
||||
case "B": return (Qn < 15) ? (0.08 * Qn) : (0.2 * Qn);
|
||||
case "C": return (Qn < 15) ? (0.015 * Qn) : (0.015 * Qn);
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
return Qdflt;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get either Q4 or Qmax flow for a given Qn and metrological class
|
||||
/// </summary>
|
||||
/// <param name="Qn">Nominal flow in m3/h</param>
|
||||
/// <param name="metroClass">Metrological class ("A" ,"B", "C" or "R#")</param>
|
||||
/// <param name="medium">NotSpecified, ColdWater or HotWater</param>
|
||||
/// <param name="Qdflt">Default flow when metrologic does not match pattern</param>
|
||||
/// <returns>Q4 or Qmax flow in m3/h</returns>
|
||||
public static double GetQ4Qmax(double Qn, string metroClass, Medium medium = Medium.ColdWater, double Qdflt = 0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(metroClass)) return Qdflt;
|
||||
|
||||
switch (metroClass[0])
|
||||
{
|
||||
case 'A':
|
||||
case 'B':
|
||||
case 'C':
|
||||
case 'D':
|
||||
return 2 * Qn;
|
||||
case 'R':
|
||||
return 1.25 * Qn;
|
||||
default:
|
||||
return Qdflt;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Checks requirements on the password regardless of the password history
|
||||
/// </summary>
|
||||
/// <param name="password">Password</param>
|
||||
/// <returns>true when the password is OK</returns>
|
||||
public static bool IsPasswordMeetsRequirements(string password, out string explanation)
|
||||
{
|
||||
int length = string.IsNullOrEmpty(password) ? 0 : password.Length;
|
||||
|
||||
/// Password length must be at least 6
|
||||
if (length < CurrentUser.MinPasswdLength)
|
||||
{
|
||||
explanation = string.Format("Password must have at least {0} characters", CurrentUser.MinPasswdLength);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
explanation = string.Empty;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// getHash encrypts a string
|
||||
/// </summary>
|
||||
/// <param name="text">the string to encrypt</param>
|
||||
/// <returns></returns>
|
||||
public static string GetHash(string text)
|
||||
{
|
||||
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(text);
|
||||
System.Security.Cryptography.SHA512Managed hashstring = new System.Security.Cryptography.SHA512Managed();
|
||||
byte[] hash = hashstring.ComputeHash(bytes);
|
||||
string hashString = string.Empty;
|
||||
foreach (byte x in hash)
|
||||
{
|
||||
hashString += String.Format("{0:x2}", x);
|
||||
}
|
||||
return hashString;
|
||||
}
|
||||
|
||||
public static string EncodedStrToUserName(string encodedStr)
|
||||
{
|
||||
string[] subStrings = encodedStr.Split(new char[] { '~' });
|
||||
return (subStrings.Length >= 1) ? subStrings[0] : string.Empty;
|
||||
}
|
||||
|
||||
public static string EncodedStrToFullName(string encodedStr)
|
||||
{
|
||||
string[] subStrings = encodedStr.Split(new char[] { '~' });
|
||||
return (subStrings.Length >= 2) ? subStrings[1] : string.Empty;
|
||||
}
|
||||
|
||||
public static string EncodedStrToLegalizator(string encodedStr)
|
||||
{
|
||||
string[] subStrings = encodedStr.Split(new char[] { '~' });
|
||||
return (subStrings.Length >= 3) ? subStrings[2] : string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns 'true' when authentication data are valid for a power user.
|
||||
/// </summary>
|
||||
/// <param name="userName">User name</param>
|
||||
/// <param name="password">Password</param>
|
||||
/// <returns>true = authenticated, false = refused</returns>
|
||||
public static bool IsPowerUser(string userName, string password)
|
||||
{
|
||||
DateTime date = DateTime.Now.Date;
|
||||
int number = (date.Year % 10) + 10 * (date.Month - 1) + 120 * date.Day;
|
||||
string passwordOfDay = Convert.ToString(number, 8);
|
||||
|
||||
return (userName.Equals("milan") && password.Equals("kraken")) ||
|
||||
(userName.Equals("bumi") && password.Equals("70630")) ||
|
||||
(userName.Equals("igor") && password.Equals("mojronko8")) ||
|
||||
(userName.Equals("lubo1212") && password.Equals("Tatry52")) ||
|
||||
(userName.Equals("Michal") && password.Equals("Plok789456123")) ||
|
||||
(userName.Equals("martin") && password.Equals("vaclavek84")) ||
|
||||
(userName.Equals("pakan") && password.Equals("kuriatko")) ||
|
||||
(userName.Equals("jan") && password.Equals("jaugust")) ||
|
||||
(userName.Equals("JCermak") && password.Equals("Zt6911")) ||
|
||||
(userName.Equals("gilles") && password.Equals("alibaba")) ||
|
||||
(userName.Equals("michal") && password.Equals("mojnelson8")) ||
|
||||
(userName.Equals("marek") && password.Equals("mareciino")) ||
|
||||
#if DEBUG
|
||||
(userName.Equals("Sensus Developers") && password.Equals("5fbg12gf5hn8nhy1fr")) ||
|
||||
#endif
|
||||
(userName.Equals(passwordOfDay) && password.Equals(passwordOfDay));
|
||||
}
|
||||
|
||||
public static void CalculateFeatureVector(Iperl.OptoTelegramRaw[] optoData, int optoDataCount, int startIx, int endIx, ref float[] x)
|
||||
{
|
||||
if (startIx < 0 || endIx >= optoDataCount || startIx >= endIx) return;
|
||||
|
||||
int n = 0;
|
||||
Int64 sumFlow = 0;
|
||||
Int64 sumFlow2 = 0;
|
||||
Int64 sumEmf = 0;
|
||||
Int64 sumEmf2 = 0;
|
||||
Int64 sumMagF = 0;
|
||||
Int64 sumMagF2 = 0;
|
||||
Int64 sumImp = 0;
|
||||
Int64 sumImp2 = 0;
|
||||
|
||||
for (int ix = startIx; ix <= endIx; ix++)
|
||||
{
|
||||
if (optoData[ix].Flags == Iperl.OptoTelegramFlags.OK ||
|
||||
optoData[ix].Flags == Iperl.OptoTelegramFlags.OK_TestStart ||
|
||||
optoData[ix].Flags == Iperl.OptoTelegramFlags.OK_TestEnd)
|
||||
{
|
||||
n++;
|
||||
sumFlow += optoData[ix].FlowRaw;
|
||||
sumFlow2 += ((int)optoData[ix].FlowRaw * (int)optoData[ix].FlowRaw);
|
||||
sumEmf += (int)optoData[ix].EmfRaw;
|
||||
sumEmf2 += ((Int64)optoData[ix].EmfRaw * (Int64)optoData[ix].EmfRaw);
|
||||
sumMagF += optoData[ix].MagneticFieldRaw;
|
||||
sumMagF2 += ((int)optoData[ix].MagneticFieldRaw * (int)optoData[ix].MagneticFieldRaw);
|
||||
sumImp += optoData[ix].Impedance;
|
||||
sumImp2 += ((int)optoData[ix].Impedance * (int)optoData[ix].Impedance);
|
||||
}
|
||||
}
|
||||
|
||||
if (n >= 2)
|
||||
{
|
||||
if (x.Length > 0) x[0] = ((float)sumFlow2 - (float)sumFlow * (float)sumFlow / n) / (n - 1);
|
||||
if (x.Length > 1) x[1] = ((float)sumEmf2 - (float)sumEmf * (float)sumEmf / n) / (n - 1);
|
||||
if (x.Length > 2) x[2] = ((float)sumMagF2 - (float)sumMagF * (float)sumMagF / n) / (n - 1);
|
||||
if (x.Length > 3) x[3] = ((float)sumImp2 - (float)sumImp * (float)sumImp / n) / (n - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="2.0.15" targetFramework="net472" />
|
||||
</packages>
|
||||
@@ -19,7 +19,7 @@
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;TURA_IPERL;IPERL;ORACLE_DB;LANG_SK</DefineConstants>
|
||||
<DefineConstants>TRACE;DEBUG;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
@@ -30,7 +30,7 @@
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE;TURA_IPERL;IPERL;ORACLE_DB;LANG_SK</DefineConstants>
|
||||
<DefineConstants>TRACE;JUZNA_AFRIKA_NEW;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
@@ -43,7 +43,7 @@
|
||||
<HintPath>..\packages\Iesi.Collections.4.0.0.4000\lib\net40\Iesi.Collections.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="log4net">
|
||||
<HintPath>..\packages\log4net.2.0.2\lib\net40-full\log4net.dll</HintPath>
|
||||
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MySql.Data">
|
||||
<HintPath>..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll</HintPath>
|
||||
@@ -117,12 +117,12 @@
|
||||
<Compile Include="Mappings\UncertaintyMap.cs" />
|
||||
<Compile Include="Mappings\UserMap.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="PurchaseResources.cs" />
|
||||
<Compile Include="Resources\Strings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Strings.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Utils.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Resources\Strings.cs.resx" />
|
||||
@@ -141,10 +141,6 @@
|
||||
<Project>{c8939821-ba5c-4988-a3d0-bf53b74865c7}</Project>
|
||||
<Name>Common</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Users\Users.csproj">
|
||||
<Project>{6E5CB0E9-E1B6-4E5D-AC6E-B1049E180F2B}</Project>
|
||||
<Name>Users</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
|
||||
+11
-3
@@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using System;
|
||||
|
||||
//formulas.cs has been added cause iPerl from master-2 ...MF
|
||||
|
||||
namespace Config
|
||||
{
|
||||
public class Data : Users.CurrentUser
|
||||
public class Data
|
||||
{
|
||||
public const string AdminUsername = "admin";
|
||||
public const string AdminPassword = "staratura";
|
||||
@@ -38,12 +40,18 @@ namespace Config
|
||||
public const int CompoundWMsCount = 3;
|
||||
public const int HeatMetersCount = 0;
|
||||
public const int MaxPartNr = 3;
|
||||
#elif RUM_MOB || TURA_SPECIAL
|
||||
#elif RUM_MOB
|
||||
public const int WMsCount = 8;
|
||||
public const int LineSize = 8;
|
||||
public const int CompoundWMsCount = 1;
|
||||
public const int HeatMetersCount = 0;
|
||||
public const int MaxPartNr = WMsCount / LineSize;
|
||||
#elif TURA_SPECIAL
|
||||
public const int WMsCount = 6;
|
||||
public const int LineSize = 6;
|
||||
public const int CompoundWMsCount = 1;
|
||||
public const int HeatMetersCount = 0;
|
||||
public const int MaxPartNr = WMsCount / LineSize;
|
||||
#elif DEWA_300 || FUZHOU_100 || ROMA_200 || LUXEMBURG_40
|
||||
public const int WMsCount = 10;
|
||||
public const int LineSize = 10;
|
||||
|
||||
@@ -13,8 +13,8 @@ namespace Config.Entities
|
||||
public virtual int ItemNr { get; set; }
|
||||
public virtual string Name { get; set; }
|
||||
public virtual string OriName { get; set; } /// Not mapped to database
|
||||
public virtual float Qfrom { get; set; } /// Water flow in [m3/h]
|
||||
public virtual float Qto { get; set; } /// Water flow in [m3/h]
|
||||
public virtual double Qfrom { get; set; } /// Water flow in [m3/h]
|
||||
public virtual double Qto { get; set; } /// Water flow in [m3/h]
|
||||
public virtual Unit FlowUnit { get; set; } /// Not mapped to database, used in UI
|
||||
public virtual string Selector { get; set; }
|
||||
public virtual string TempMtrUp { get; set; }
|
||||
@@ -22,6 +22,9 @@ namespace Config.Entities
|
||||
public virtual string PressMtrUp { get; set; }
|
||||
public virtual string PressMtrDown { get; set; }
|
||||
public virtual string PressMtrDelta { get; set; }
|
||||
public virtual string ElectricMtrUp { get; set; }
|
||||
public virtual string ElectricMtrDown { get; set; }
|
||||
public virtual string ElectricMtrDelta { get; set; }
|
||||
public virtual string StopBFValve { get; set; }
|
||||
|
||||
/// Valves
|
||||
@@ -59,6 +62,9 @@ namespace Config.Entities
|
||||
result.PressMtrUp = PressMtrUp;
|
||||
result.PressMtrDown = PressMtrDown;
|
||||
result.PressMtrDelta = PressMtrDelta;
|
||||
result.ElectricMtrUp = ElectricMtrUp;
|
||||
result.ElectricMtrDown = ElectricMtrDown;
|
||||
result.ElectricMtrDelta = ElectricMtrDelta;
|
||||
result.StopBFValve = StopBFValve;
|
||||
result.ValvesOpen = ValvesOpen;
|
||||
result.ValvesClose = ValvesClose;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2019 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -14,11 +14,11 @@ namespace Config.Entities
|
||||
public virtual int ItemNr { get; set; }
|
||||
public virtual string Name { get; set; }
|
||||
public virtual string ClassName { get; set; }
|
||||
public virtual string ParentName { get; set; }
|
||||
public virtual DebugMode Mode { get; set; }
|
||||
public virtual LogLevel Logging { get; set; }
|
||||
public virtual string Parent { get; set; }
|
||||
public virtual DebugMode DebugMode { get; set; }
|
||||
public virtual LogLevel LogLevel { get; set; }
|
||||
public virtual string Parameters { get; set; }
|
||||
public virtual IList<MeasurementCorrection> Corrections { get; set; }
|
||||
public virtual IList<MeasurementCorrection> Corrections { get; set; }
|
||||
public virtual IList<Uncertainty> Uncertainties { get; set; }
|
||||
|
||||
/// ------------- Additional stuff not mapped into the database -------------
|
||||
@@ -38,9 +38,9 @@ namespace Config.Entities
|
||||
result.ItemNr = itemNr;
|
||||
result.Name = name;
|
||||
result.ClassName = className;
|
||||
result.ParentName = parentName;
|
||||
result.Mode = debugLevel;
|
||||
result.Logging = logLevel;
|
||||
result.Parent = parentName;
|
||||
result.DebugMode = debugLevel;
|
||||
result.LogLevel = logLevel;
|
||||
result.Parameters = parameters;
|
||||
return result;
|
||||
}
|
||||
@@ -52,9 +52,9 @@ namespace Config.Entities
|
||||
result.ItemNr = ItemNr;
|
||||
result.Name = Name;
|
||||
result.ClassName = ClassName;
|
||||
result.ParentName = ParentName;
|
||||
result.Mode = Mode;
|
||||
result.Logging = Logging;
|
||||
result.Parent = Parent;
|
||||
result.DebugMode = DebugMode;
|
||||
result.LogLevel = LogLevel;
|
||||
result.Parameters = Parameters;
|
||||
return result;
|
||||
}
|
||||
@@ -63,9 +63,9 @@ namespace Config.Entities
|
||||
{
|
||||
output.WriteLine(Name);
|
||||
output.WriteLine(ClassName);
|
||||
output.WriteLine(ParentName);
|
||||
output.WriteLine(Mode.ToString());
|
||||
output.WriteLine(Logging.ToString());
|
||||
output.WriteLine(Parent);
|
||||
output.WriteLine(DebugMode.ToString());
|
||||
output.WriteLine(LogLevel.ToString());
|
||||
output.Write(Parameters);
|
||||
|
||||
output.Close();
|
||||
@@ -77,28 +77,28 @@ namespace Config.Entities
|
||||
|
||||
result.Name = input.ReadLine();
|
||||
result.ClassName = input.ReadLine();
|
||||
result.ParentName = input.ReadLine();
|
||||
result.Parent = input.ReadLine();
|
||||
|
||||
string line = input.ReadLine();
|
||||
if (line.Equals(DebugMode.DetectedOff.ToString())) result.Mode = DebugMode.DetectedOff;
|
||||
else if (line.Equals(DebugMode.DetectedOn.ToString())) result.Mode = DebugMode.DetectedOn;
|
||||
else if (line.Equals(DebugMode.Normal.ToString())) result.Mode = DebugMode.Normal;
|
||||
else if (line.Equals(DebugMode.AutoDetect.ToString())) result.Mode = DebugMode.AutoDetect;
|
||||
else if (line.Equals(DebugMode.FailureDuringOperation.ToString())) result.Mode = DebugMode.FailureDuringOperation;
|
||||
else if (line.Equals(DebugMode.Off.ToString())) result.Mode = DebugMode.Off;
|
||||
else if (line.Equals(DebugMode.Record.ToString())) result.Mode = DebugMode.Record;
|
||||
else if (line.Equals(DebugMode.Replay.ToString())) result.Mode = DebugMode.Replay;
|
||||
else if (line.Equals(DebugMode.Simulate.ToString())) result.Mode = DebugMode.Simulate;
|
||||
else if (line.Equals(DebugMode.Inherit.ToString())) result.Mode = DebugMode.Inherit;
|
||||
if (line.Equals(DebugMode.DetectedOff.ToString())) result.DebugMode = DebugMode.DetectedOff;
|
||||
else if (line.Equals(DebugMode.DetectedOn.ToString())) result.DebugMode = DebugMode.DetectedOn;
|
||||
else if (line.Equals(DebugMode.Normal.ToString())) result.DebugMode = DebugMode.Normal;
|
||||
else if (line.Equals(DebugMode.AutoDetect.ToString())) result.DebugMode = DebugMode.AutoDetect;
|
||||
else if (line.Equals(DebugMode.FailureDuringOperation.ToString())) result.DebugMode = DebugMode.FailureDuringOperation;
|
||||
else if (line.Equals(DebugMode.Off.ToString())) result.DebugMode = DebugMode.Off;
|
||||
else if (line.Equals(DebugMode.Record.ToString())) result.DebugMode = DebugMode.Record;
|
||||
else if (line.Equals(DebugMode.Replay.ToString())) result.DebugMode = DebugMode.Replay;
|
||||
else if (line.Equals(DebugMode.Simulate.ToString())) result.DebugMode = DebugMode.Simulate;
|
||||
else if (line.Equals(DebugMode.Inherit.ToString())) result.DebugMode = DebugMode.Inherit;
|
||||
|
||||
line = input.ReadLine();
|
||||
if (line.Equals(LogLevel.Off.ToString())) result.Logging = LogLevel.Off;
|
||||
else if (line.Equals(LogLevel.Fatal.ToString())) result.Logging = LogLevel.Fatal;
|
||||
else if (line.Equals(LogLevel.Error.ToString())) result.Logging = LogLevel.Error;
|
||||
else if (line.Equals(LogLevel.Warn.ToString())) result.Logging = LogLevel.Warn;
|
||||
else if (line.Equals(LogLevel.Info.ToString())) result.Logging = LogLevel.Info;
|
||||
else if (line.Equals(LogLevel.Debug.ToString())) result.Logging = LogLevel.Debug;
|
||||
else if (line.Equals(LogLevel.All.ToString())) result.Logging = LogLevel.All;
|
||||
if (line.Equals(LogLevel.Off.ToString())) result.LogLevel = LogLevel.Off;
|
||||
else if (line.Equals(LogLevel.Fatal.ToString())) result.LogLevel = LogLevel.Fatal;
|
||||
else if (line.Equals(LogLevel.Error.ToString())) result.LogLevel = LogLevel.Error;
|
||||
else if (line.Equals(LogLevel.Warn.ToString())) result.LogLevel = LogLevel.Warn;
|
||||
else if (line.Equals(LogLevel.Info.ToString())) result.LogLevel = LogLevel.Info;
|
||||
else if (line.Equals(LogLevel.Debug.ToString())) result.LogLevel = LogLevel.Debug;
|
||||
else if (line.Equals(LogLevel.All.ToString())) result.LogLevel = LogLevel.All;
|
||||
|
||||
result.Parameters = string.Empty;
|
||||
line = input.ReadLine();
|
||||
@@ -119,12 +119,12 @@ namespace Config.Entities
|
||||
result += indent + "ItemNr = " + (ItemNr + 1).ToString() + Environment.NewLine;
|
||||
result += indent + "Name = " + Name + Environment.NewLine;
|
||||
result += indent + "ClassName = " + ClassName + Environment.NewLine;
|
||||
if (ParentName != null)
|
||||
if (Parent != null)
|
||||
{
|
||||
result += indent + "ParentName = " + ParentName + Environment.NewLine;
|
||||
result += indent + "ParentName = " + Parent + Environment.NewLine;
|
||||
}
|
||||
result += indent + "DebugLevel = " + Mode.ToString() + Environment.NewLine;
|
||||
result += indent + "LogLevel = " + Logging.ToString() + Environment.NewLine;
|
||||
result += indent + "DebugLevel = " + DebugMode.ToString() + Environment.NewLine;
|
||||
result += indent + "LogLevel = " + LogLevel.ToString() + Environment.NewLine;
|
||||
result += indent + "Parameters = " + Parameters + Environment.NewLine;
|
||||
|
||||
return result;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
@@ -13,12 +13,12 @@ namespace Config.Entities
|
||||
public virtual int ItemNr { get; set; }
|
||||
public virtual string Name { get; set; }
|
||||
public virtual string OriName { get; set; } /// Not mapped to database
|
||||
public virtual float Qfrom { get; set; } /// Water flow in [m3/h]
|
||||
public virtual float Qto { get; set; } /// Water flow in [m3/h]
|
||||
public virtual double Qfrom { get; set; } /// Water flow in [m3/h]
|
||||
public virtual double Qto { get; set; } /// Water flow in [m3/h]
|
||||
public virtual Unit FlowUnit { get; set; } /// Not mapped to database, used in UI
|
||||
public virtual string Selector { get; set; }
|
||||
public virtual string Pump { get; set; }
|
||||
public virtual string RegulValvesPct { get; set; } /// Positions of regulation valves in % separated by ';'
|
||||
public virtual string RegVPositions { get; set; } /// Positions of regulation valves in Category.Feeding in % separated by ';'
|
||||
|
||||
/// Valves
|
||||
public virtual string ValvesOpen { get; set; }
|
||||
@@ -46,14 +46,14 @@ namespace Config.Entities
|
||||
{
|
||||
FeedingPath result = new FeedingPath(name, itemNr);
|
||||
|
||||
result.Qfrom = Qfrom;
|
||||
result.Qto = Qto;
|
||||
result.FlowUnit = FlowUnit;
|
||||
result.Selector = Selector;
|
||||
result.Pump = Pump;
|
||||
result.RegulValvesPct = RegulValvesPct;
|
||||
result.ValvesOpen = ValvesOpen;
|
||||
result.ValvesClose = ValvesClose;
|
||||
result.Qfrom = Qfrom;
|
||||
result.Qto = Qto;
|
||||
result.FlowUnit = FlowUnit;
|
||||
result.Selector = Selector;
|
||||
result.Pump = Pump;
|
||||
result.RegVPositions = RegVPositions;
|
||||
result.ValvesOpen = ValvesOpen;
|
||||
result.ValvesClose = ValvesClose;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2020 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Common;
|
||||
|
||||
namespace Config.Entities
|
||||
{
|
||||
public class Group
|
||||
{
|
||||
public virtual int Id { get; protected set; }
|
||||
public virtual Common.GID GID { get; set; }
|
||||
public virtual GID GID { get; set; }
|
||||
public virtual long AccessFlags { get; set; } /// Bitfield of access flags: bit0 .. bit62
|
||||
public virtual IList<User> Users { get; set; } /// Group can be a member of a list of users
|
||||
|
||||
@@ -18,7 +19,7 @@ namespace Config.Entities
|
||||
Users = new List<User>();
|
||||
}
|
||||
|
||||
public Group(Common.GID gid)
|
||||
public Group(GID gid)
|
||||
: this()
|
||||
{
|
||||
GID = gid;
|
||||
|
||||
@@ -6,7 +6,7 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Config.Entities
|
||||
{
|
||||
public class MeasurementCorrection : Common.IMeasurementCorrection, IComparable<MeasurementCorrection>
|
||||
public class MeasurementCorrection : Common.IMeasurementCorrection, IComparable<MeasurementCorrection>
|
||||
{
|
||||
public virtual int Id { get; protected set; }
|
||||
public virtual int RangeIx { get; set; } /// 0..5
|
||||
@@ -28,6 +28,7 @@ namespace Config.Entities
|
||||
return (Measurement > other.Measurement) ? 1 : ((Measurement == other.Measurement) ? 0 : -1);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Calculates corrected value from a list of corrections by interpolation.
|
||||
/// It is assumed that values in the list 'corrections' are sorted.
|
||||
|
||||
+61
-141
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2017 Sensus Metering Systems
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -14,15 +14,15 @@ namespace Config.Entities
|
||||
public virtual string OriName { get; set; } /// Not mapped to database
|
||||
|
||||
/// Sensors
|
||||
public virtual string Sensor1 { get; set; }
|
||||
public virtual string Sensor2 { get; set; }
|
||||
public virtual string Sensor3 { get; set; }
|
||||
public virtual string Sensor4 { get; set; }
|
||||
public virtual string Sensor5 { get; set; }
|
||||
public virtual string Sensor6 { get; set; }
|
||||
public virtual string Sensor7 { get; set; }
|
||||
public virtual string Sensor8 { get; set; }
|
||||
public virtual string Sensor9 { get; set; }
|
||||
public virtual string Sensor1 { get; set; }
|
||||
public virtual string Sensor2 { get; set; }
|
||||
public virtual string Sensor3 { get; set; }
|
||||
public virtual string Sensor4 { get; set; }
|
||||
public virtual string Sensor5 { get; set; }
|
||||
public virtual string Sensor6 { get; set; }
|
||||
public virtual string Sensor7 { get; set; }
|
||||
public virtual string Sensor8 { get; set; }
|
||||
public virtual string Sensor9 { get; set; }
|
||||
public virtual string Sensor10 { get; set; }
|
||||
public virtual string Sensor11 { get; set; }
|
||||
public virtual string Sensor12 { get; set; }
|
||||
@@ -34,26 +34,6 @@ namespace Config.Entities
|
||||
public virtual string Sensor18 { get; set; }
|
||||
public virtual string Sensor19 { get; set; }
|
||||
public virtual string Sensor20 { get; set; }
|
||||
public virtual string Sensor21 { get; set; }
|
||||
public virtual string Sensor22 { get; set; }
|
||||
public virtual string Sensor23 { get; set; }
|
||||
public virtual string Sensor24 { get; set; }
|
||||
public virtual string Sensor25 { get; set; }
|
||||
public virtual string Sensor26 { get; set; }
|
||||
public virtual string Sensor27 { get; set; }
|
||||
public virtual string Sensor28 { get; set; }
|
||||
public virtual string Sensor29 { get; set; }
|
||||
public virtual string Sensor30 { get; set; }
|
||||
public virtual string Sensor31 { get; set; }
|
||||
public virtual string Sensor32 { get; set; }
|
||||
public virtual string Sensor33 { get; set; }
|
||||
public virtual string Sensor34 { get; set; }
|
||||
public virtual string Sensor35 { get; set; }
|
||||
public virtual string Sensor36 { get; set; }
|
||||
public virtual string Sensor37 { get; set; }
|
||||
public virtual string Sensor38 { get; set; }
|
||||
public virtual string Sensor39 { get; set; }
|
||||
public virtual string Sensor40 { get; set; }
|
||||
|
||||
/// ------------- Additional stuff not mapped into the database -------------
|
||||
|
||||
@@ -71,15 +51,15 @@ namespace Config.Entities
|
||||
public virtual MetersPath Clone(string name, int itemNr)
|
||||
{
|
||||
MetersPath result = new MetersPath(name, itemNr);
|
||||
result.Sensor1 = Sensor1;
|
||||
result.Sensor2 = Sensor2;
|
||||
result.Sensor3 = Sensor3;
|
||||
result.Sensor4 = Sensor4;
|
||||
result.Sensor5 = Sensor5;
|
||||
result.Sensor6 = Sensor6;
|
||||
result.Sensor7 = Sensor7;
|
||||
result.Sensor8 = Sensor8;
|
||||
result.Sensor9 = Sensor9;
|
||||
result.Sensor1 = Sensor1;
|
||||
result.Sensor2 = Sensor2;
|
||||
result.Sensor3 = Sensor3;
|
||||
result.Sensor4 = Sensor4;
|
||||
result.Sensor5 = Sensor5;
|
||||
result.Sensor6 = Sensor6;
|
||||
result.Sensor7 = Sensor7;
|
||||
result.Sensor8 = Sensor8;
|
||||
result.Sensor9 = Sensor9;
|
||||
result.Sensor10 = Sensor10;
|
||||
result.Sensor11 = Sensor11;
|
||||
result.Sensor12 = Sensor12;
|
||||
@@ -91,119 +71,59 @@ namespace Config.Entities
|
||||
result.Sensor18 = Sensor18;
|
||||
result.Sensor19 = Sensor19;
|
||||
result.Sensor20 = Sensor20;
|
||||
result.Sensor21 = Sensor21;
|
||||
result.Sensor22 = Sensor22;
|
||||
result.Sensor23 = Sensor23;
|
||||
result.Sensor24 = Sensor24;
|
||||
result.Sensor25 = Sensor25;
|
||||
result.Sensor26 = Sensor26;
|
||||
result.Sensor27 = Sensor27;
|
||||
result.Sensor28 = Sensor28;
|
||||
result.Sensor29 = Sensor29;
|
||||
result.Sensor30 = Sensor30;
|
||||
result.Sensor31 = Sensor31;
|
||||
result.Sensor32 = Sensor32;
|
||||
result.Sensor33 = Sensor33;
|
||||
result.Sensor34 = Sensor34;
|
||||
result.Sensor35 = Sensor35;
|
||||
result.Sensor36 = Sensor36;
|
||||
result.Sensor37 = Sensor37;
|
||||
result.Sensor38 = Sensor38;
|
||||
result.Sensor39 = Sensor39;
|
||||
result.Sensor40 = Sensor40;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// Returns the component name
|
||||
public virtual string GetSensor(int i)
|
||||
public virtual string GetSensor(int wmNr0)
|
||||
{
|
||||
if (i == 0) return Sensor1;
|
||||
else if (i == 1) return Sensor2;
|
||||
else if (i == 2) return Sensor3;
|
||||
else if (i == 3) return Sensor4;
|
||||
else if (i == 4) return Sensor5;
|
||||
else if (i == 5) return Sensor6;
|
||||
else if (i == 6) return Sensor7;
|
||||
else if (i == 7) return Sensor8;
|
||||
else if (i == 8) return Sensor9;
|
||||
else if (i == 9) return Sensor10;
|
||||
else if (i == 10) return Sensor11;
|
||||
else if (i == 11) return Sensor12;
|
||||
else if (i == 12) return Sensor13;
|
||||
else if (i == 13) return Sensor14;
|
||||
else if (i == 14) return Sensor15;
|
||||
else if (i == 15) return Sensor16;
|
||||
else if (i == 16) return Sensor17;
|
||||
else if (i == 17) return Sensor18;
|
||||
else if (i == 18) return Sensor19;
|
||||
else if (i == 19) return Sensor20;
|
||||
else if (i == 20) return Sensor21;
|
||||
else if (i == 21) return Sensor22;
|
||||
else if (i == 22) return Sensor23;
|
||||
else if (i == 23) return Sensor24;
|
||||
else if (i == 24) return Sensor25;
|
||||
else if (i == 25) return Sensor26;
|
||||
else if (i == 26) return Sensor27;
|
||||
else if (i == 27) return Sensor28;
|
||||
else if (i == 28) return Sensor29;
|
||||
else if (i == 29) return Sensor30;
|
||||
else if (i == 30) return Sensor31;
|
||||
else if (i == 31) return Sensor32;
|
||||
else if (i == 32) return Sensor33;
|
||||
else if (i == 33) return Sensor34;
|
||||
else if (i == 34) return Sensor35;
|
||||
else if (i == 35) return Sensor36;
|
||||
else if (i == 36) return Sensor37;
|
||||
else if (i == 37) return Sensor38;
|
||||
else if (i == 38) return Sensor39;
|
||||
else if (i == 39) return Sensor40;
|
||||
if (wmNr0 == 0) return Sensor1;
|
||||
else if (wmNr0 == 1) return Sensor2;
|
||||
else if (wmNr0 == 2) return Sensor3;
|
||||
else if (wmNr0 == 3) return Sensor4;
|
||||
else if (wmNr0 == 4) return Sensor5;
|
||||
else if (wmNr0 == 5) return Sensor6;
|
||||
else if (wmNr0 == 6) return Sensor7;
|
||||
else if (wmNr0 == 7) return Sensor8;
|
||||
else if (wmNr0 == 8) return Sensor9;
|
||||
else if (wmNr0 == 9) return Sensor10;
|
||||
else if (wmNr0 == 10) return Sensor11;
|
||||
else if (wmNr0 == 11) return Sensor12;
|
||||
else if (wmNr0 == 12) return Sensor13;
|
||||
else if (wmNr0 == 13) return Sensor14;
|
||||
else if (wmNr0 == 14) return Sensor15;
|
||||
else if (wmNr0 == 15) return Sensor16;
|
||||
else if (wmNr0 == 16) return Sensor17;
|
||||
else if (wmNr0 == 17) return Sensor18;
|
||||
else if (wmNr0 == 18) return Sensor19;
|
||||
else if (wmNr0 == 19) return Sensor20;
|
||||
else return null;
|
||||
}
|
||||
|
||||
/// Sets the component name
|
||||
public virtual void SetSensor(int i, string cmpntName)
|
||||
public virtual void SetSensor(int wmNr0, string cmpntName)
|
||||
{
|
||||
if (i == 0) Sensor1 = cmpntName;
|
||||
else if (i == 1) Sensor2 = cmpntName;
|
||||
else if (i == 2) Sensor3 = cmpntName;
|
||||
else if (i == 3) Sensor4 = cmpntName;
|
||||
else if (i == 4) Sensor5 = cmpntName;
|
||||
else if (i == 5) Sensor6 = cmpntName;
|
||||
else if (i == 6) Sensor7 = cmpntName;
|
||||
else if (i == 7) Sensor8 = cmpntName;
|
||||
else if (i == 8) Sensor9 = cmpntName;
|
||||
else if (i == 9) Sensor10 = cmpntName;
|
||||
else if (i == 10) Sensor11 = cmpntName;
|
||||
else if (i == 11) Sensor12 = cmpntName;
|
||||
else if (i == 12) Sensor13 = cmpntName;
|
||||
else if (i == 13) Sensor14 = cmpntName;
|
||||
else if (i == 14) Sensor15 = cmpntName;
|
||||
else if (i == 15) Sensor16 = cmpntName;
|
||||
else if (i == 16) Sensor17 = cmpntName;
|
||||
else if (i == 17) Sensor18 = cmpntName;
|
||||
else if (i == 18) Sensor19 = cmpntName;
|
||||
else if (i == 19) Sensor20 = cmpntName;
|
||||
else if (i == 20) Sensor21 = cmpntName;
|
||||
else if (i == 21) Sensor22 = cmpntName;
|
||||
else if (i == 22) Sensor23 = cmpntName;
|
||||
else if (i == 23) Sensor24 = cmpntName;
|
||||
else if (i == 24) Sensor25 = cmpntName;
|
||||
else if (i == 25) Sensor26 = cmpntName;
|
||||
else if (i == 26) Sensor27 = cmpntName;
|
||||
else if (i == 27) Sensor28 = cmpntName;
|
||||
else if (i == 28) Sensor29 = cmpntName;
|
||||
else if (i == 29) Sensor30 = cmpntName;
|
||||
else if (i == 30) Sensor31 = cmpntName;
|
||||
else if (i == 31) Sensor32 = cmpntName;
|
||||
else if (i == 32) Sensor33 = cmpntName;
|
||||
else if (i == 33) Sensor34 = cmpntName;
|
||||
else if (i == 34) Sensor35 = cmpntName;
|
||||
else if (i == 35) Sensor36 = cmpntName;
|
||||
else if (i == 36) Sensor37 = cmpntName;
|
||||
else if (i == 37) Sensor38 = cmpntName;
|
||||
else if (i == 38) Sensor39 = cmpntName;
|
||||
else if (i == 39) Sensor40 = cmpntName;
|
||||
if (wmNr0 == 0) Sensor1 = cmpntName;
|
||||
else if (wmNr0 == 1) Sensor2 = cmpntName;
|
||||
else if (wmNr0 == 2) Sensor3 = cmpntName;
|
||||
else if (wmNr0 == 3) Sensor4 = cmpntName;
|
||||
else if (wmNr0 == 4) Sensor5 = cmpntName;
|
||||
else if (wmNr0 == 5) Sensor6 = cmpntName;
|
||||
else if (wmNr0 == 6) Sensor7 = cmpntName;
|
||||
else if (wmNr0 == 7) Sensor8 = cmpntName;
|
||||
else if (wmNr0 == 8) Sensor9 = cmpntName;
|
||||
else if (wmNr0 == 9) Sensor10 = cmpntName;
|
||||
else if (wmNr0 == 10) Sensor11 = cmpntName;
|
||||
else if (wmNr0 == 11) Sensor12 = cmpntName;
|
||||
else if (wmNr0 == 12) Sensor13 = cmpntName;
|
||||
else if (wmNr0 == 13) Sensor14 = cmpntName;
|
||||
else if (wmNr0 == 14) Sensor15 = cmpntName;
|
||||
else if (wmNr0 == 15) Sensor16 = cmpntName;
|
||||
else if (wmNr0 == 16) Sensor17 = cmpntName;
|
||||
else if (wmNr0 == 17) Sensor18 = cmpntName;
|
||||
else if (wmNr0 == 18) Sensor19 = cmpntName;
|
||||
else if (wmNr0 == 19) Sensor20 = cmpntName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,18 +13,19 @@ namespace Config.Entities
|
||||
public virtual int ItemNr { get; set; }
|
||||
public virtual string Name { get; set; }
|
||||
public virtual string OriName { get; set; } /// Not mapped to database
|
||||
public virtual float Qfrom { get; set; } /// Water flow in [m3/h]
|
||||
public virtual float Qto { get; set; } /// Water flow in [m3/h]
|
||||
public virtual double Qfrom { get; set; } /// Water flow in [m3/h]
|
||||
public virtual double Qto { get; set; } /// Water flow in [m3/h]
|
||||
public virtual Unit FlowUnit { get; set; } /// Not mapped to database, used in UI
|
||||
public virtual string Selector { get; set; }
|
||||
public virtual string RegulValve { get; set; }
|
||||
public virtual string FlowMeter { get; set; }
|
||||
public virtual float PidCoef { get; set; } /// PID coefficient for the regulation path
|
||||
public virtual string RegValve { get; set; }
|
||||
public virtual int RegulMinStep { get; set; }
|
||||
public virtual string FlowMeter { get; set; }
|
||||
public virtual float PidCoef { get; set; } /// PID coefficient for the regulation path
|
||||
public virtual string StartValve { get; set; }
|
||||
public virtual string Diverter { get; set; }
|
||||
public virtual string TempDiv { get; set; }
|
||||
public virtual string TempMtrDiv { get; set; }
|
||||
public virtual string Scale { get; set; }
|
||||
public virtual string RegulValvesPct { get; set; } /// Positions of regulation valves in % separated by ';'
|
||||
public virtual string RegVPositions { get; set; } /// Positions of regulation valves in Category.Output in % separated by ';'
|
||||
|
||||
/// Valves
|
||||
public virtual string ValvesOpen { get; set; }
|
||||
@@ -39,6 +40,7 @@ namespace Config.Entities
|
||||
{
|
||||
ValvesOpen = string.Empty;
|
||||
ValvesClose = string.Empty;
|
||||
RegulMinStep = 0;
|
||||
}
|
||||
|
||||
public OutputPath(string name, int itemNr)
|
||||
@@ -46,27 +48,30 @@ namespace Config.Entities
|
||||
{
|
||||
Name = name;
|
||||
ItemNr = itemNr;
|
||||
}
|
||||
RegulMinStep = 0;
|
||||
|
||||
}
|
||||
|
||||
public virtual OutputPath Clone(string name, int itemNr)
|
||||
{
|
||||
OutputPath result = new OutputPath(name, itemNr);
|
||||
|
||||
result.Name = Name;
|
||||
result.Qfrom = Qfrom;
|
||||
result.Qto = Qto;
|
||||
result.FlowUnit = FlowUnit;
|
||||
result.Selector = Selector;
|
||||
result.RegulValve = RegulValve;
|
||||
result.FlowMeter = FlowMeter;
|
||||
result.PidCoef = PidCoef;
|
||||
result.StartValve = StartValve;
|
||||
result.Diverter = Diverter;
|
||||
result.TempDiv = TempDiv;
|
||||
result.Scale = Scale;
|
||||
result.RegulValvesPct = RegulValvesPct;
|
||||
result.ValvesOpen = ValvesOpen;
|
||||
result.ValvesClose = ValvesClose;
|
||||
result.Name = Name;
|
||||
result.Qfrom = Qfrom;
|
||||
result.Qto = Qto;
|
||||
result.FlowUnit = FlowUnit;
|
||||
result.Selector = Selector;
|
||||
result.RegValve = RegValve;
|
||||
result.RegulMinStep = RegulMinStep;
|
||||
result.FlowMeter = FlowMeter;
|
||||
result.PidCoef = PidCoef;
|
||||
result.StartValve = StartValve;
|
||||
result.Diverter = Diverter;
|
||||
result.TempMtrDiv = TempMtrDiv;
|
||||
result.Scale = Scale;
|
||||
result.RegVPositions= RegVPositions;
|
||||
result.ValvesOpen = ValvesOpen;
|
||||
result.ValvesClose = ValvesClose;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2019-2022 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2019-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Globalization;
|
||||
@@ -16,7 +16,9 @@ namespace Config.Entities
|
||||
public virtual int Id { get; protected set; }
|
||||
public virtual int ItemNr { get; set; }
|
||||
public virtual string Name { get; set; }
|
||||
public virtual int Part { get; set; } /// Part=0 ... test of all WM-s /// Part>0 ... part of a set of tests with the same Name: subset of WM-s is given by MetersPath
|
||||
public virtual int Part { get; set; } /// Part=0 ... test of all WM-s
|
||||
/// Part>0 ... part of a set of tests with the same Name: subset of WM-s is given by MetersPath
|
||||
public virtual FlowId FlowId { get; set; }
|
||||
public virtual double CoefQfrom { get; set; } /// Water flow low limit in [m3/h]
|
||||
public virtual double CoefQto { get; set; } /// Water flow high limit in [m3/h]
|
||||
public virtual double ErrLimLo { get; set; } /// in [%] usually < 0, in case of heat meters: 1=class1, 2=class2, 3=class3
|
||||
@@ -186,6 +188,7 @@ namespace Config.Entities
|
||||
|
||||
output.WriteLine(Name);
|
||||
output.WriteLine(Part);
|
||||
output.WriteLine(((ushort)FlowId).ToString(ci));
|
||||
output.WriteLine(CoefQfrom.ToString(ci));
|
||||
output.WriteLine(CoefQto.ToString(ci));
|
||||
output.WriteLine(ErrLimLo.ToString(ci));
|
||||
@@ -245,6 +248,7 @@ namespace Config.Entities
|
||||
|
||||
tst.Name = firstLine;
|
||||
tst.Part = int.Parse(input.ReadLine());
|
||||
tst.FlowId = (FlowId)ushort.Parse(input.ReadLine(), ci);
|
||||
tst.CoefQfrom = double.Parse(input.ReadLine(), ci);
|
||||
tst.CoefQto = double.Parse(input.ReadLine(), ci);
|
||||
tst.ErrLimLo = double.Parse(input.ReadLine(), ci);
|
||||
@@ -306,6 +310,7 @@ namespace Config.Entities
|
||||
|
||||
if (Name != firstLine) { diff.AppendFormat(fmt, "Name", Name, firstLine); };
|
||||
ln = inp.ReadLine(); if (ln != Part.ToString()) { diff.AppendFormat(fmt, "Part", Part.ToString(), ln); };
|
||||
ln = inp.ReadLine(); if (ln != ((ushort)FlowId).ToString()){diff.AppendFormat(fmt, "FlowId", ((ushort)FlowId).ToString(), ln); };
|
||||
ln = inp.ReadLine(); if (ln != CoefQfrom.ToString(ci)) { diff.AppendFormat(fmt, "CoefQfrom", CoefQfrom.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != CoefQto.ToString(ci)) { diff.AppendFormat(fmt, "CoefQto", CoefQto.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != ErrLimLo.ToString(ci)) { diff.AppendFormat(fmt, "ErrLimLo", ErrLimLo.ToString(ci), ln); };
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -47,7 +47,7 @@ namespace Config.Entities
|
||||
public virtual int AltProcPeriod { get; set; } /// Period of alternative procedures (0 = no alt. procedure)
|
||||
|
||||
public virtual float DN { get; set; } /// Not mapped to DB, valid in ProceduresCtrl for procedure filtering only
|
||||
public virtual float Qn { get; set; } /// - ' ' -
|
||||
public virtual double Qn { get; set; } /// - ' ' -
|
||||
public virtual string MClass { get; set; } /// - ' ' -
|
||||
public virtual string Producer { get; set; } /// - ' ' -
|
||||
|
||||
@@ -75,7 +75,7 @@ namespace Config.Entities
|
||||
///
|
||||
/// Default values
|
||||
///
|
||||
CreationUser = Users.CurrentUser.UserName();
|
||||
CreationUser = Common.CurrentUser.UserName();
|
||||
CreationTime = DateTime.Now;
|
||||
LastChgUser = CreationUser;
|
||||
LastChgTime = CreationTime;
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace Config.Entities
|
||||
///
|
||||
/// Default values
|
||||
///
|
||||
CreationUser = Users.CurrentUser.UserName();
|
||||
CreationUser = CurrentUser.UserName();
|
||||
CreationTime = DateTime.Now;
|
||||
LastChgUser = CreationUser;
|
||||
LastChgTime = CreationTime;
|
||||
|
||||
+50
-29
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -19,14 +19,15 @@ namespace Config.Entities
|
||||
public virtual string Name { get; set; }
|
||||
public virtual int Part { get; set; } /// Part=0 ... test of all WM-s
|
||||
/// Part>0 ... part of a set of tests with the same Name: subset of WM-s is given by MetersPath
|
||||
public virtual TestProfile Profile { get; set; } /// UserDefined, Protected, UserDefinedHeatMeter, ProtectedHeatMeter
|
||||
public virtual TestProfile Profile { get; set; } /// UserDefined, UserDefinedCompound, UserDefinedHeatMeter, Protected, ProtectedCompound, ProtectedHeatMeter
|
||||
public virtual sbyte Publish { get; set; } /// 0=no, 1=in all protocols, 2=on screen, 3=internal
|
||||
public virtual bool DoEvaluate { get; set; }
|
||||
public virtual float Qtg { get; set; } /// Target water flow [m3/h]
|
||||
public virtual float Qfrom { get; set; } /// Water flow low limit in [m3/h]
|
||||
public virtual float Qto { get; set; } /// Water flow high limit in [m3/h]
|
||||
public virtual float Volume { get; set; } /// Test volume (target) in [l]
|
||||
public virtual float TestTime { get; set; } /// Test time (estimate) in [s]
|
||||
public virtual double Qtg { get; set; } /// When == -1 => Qtg is determined by the test method, otherwise Qtg is in [m3/h],
|
||||
public virtual double Qfrom { get; set; } /// Water flow low limit in [m3/h] or in [%] of Qtg
|
||||
public virtual double Qto { get; set; } /// Water flow high limit in [m3/h] or in [%] of Qtg
|
||||
public virtual bool IsFromToInPct { get; set; } /// true: Qfrom and Qto are in % of Qtg, false: Qfrom and Qto are in [m3/h]
|
||||
public virtual double Volume { get; set; } /// Test volume (target) in [l]
|
||||
public virtual double TestTime { get; set; } /// Test time (estimate) in [s]
|
||||
public virtual string Method { get; set; }
|
||||
public virtual float ErrLimLo { get; set; } /// in [%] usually < 0, in case of heat meters: 1=class1, 2=class2, 3=class3
|
||||
public virtual float ErrLimHi { get; set; } /// in [%] usually > 0, in case of heat meters: -Qn in m3/h
|
||||
@@ -45,8 +46,7 @@ namespace Config.Entities
|
||||
public virtual int TimeFlow2Mass { get; set; } /// Delay time from the flow stable to the 1st mass measurement in [s]
|
||||
public virtual int TimePump2StartV { get; set; } /// Delay time from the start of the pump to opening the start valve in [s]
|
||||
public virtual int TimeStop2Mass { get; set; } /// Delay time from the test end (diverted) to the 2nd mass measuremen in [s]
|
||||
public virtual double ShortPulses { get; set; } /// = Filter
|
||||
public virtual string RedType { get; set; }
|
||||
public virtual int ShortPulses { get; set; } /// Short pulses
|
||||
public virtual string FeedingPath { get; set; }
|
||||
public virtual string BenchPath { get; set; }
|
||||
public virtual string OutputPath { get; set; }
|
||||
@@ -58,6 +58,11 @@ namespace Config.Entities
|
||||
public virtual string TransBetween { get; set; }
|
||||
public virtual string TransAfter { get; set; }
|
||||
|
||||
public virtual IList<ComponentTest> MoreParams { get; set; }
|
||||
|
||||
public virtual Procedure Procedure { get; set; }
|
||||
|
||||
/// Additional stuff not mapped into the database
|
||||
public virtual bool IsOuterLoopStart { get; set; } /// Not mapped to database
|
||||
public virtual bool IsOuterLoopEnd { get; set; } /// Not mapped to database
|
||||
|
||||
@@ -73,12 +78,17 @@ namespace Config.Entities
|
||||
public virtual Unit TempUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
|
||||
public virtual Unit PressUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
|
||||
public virtual Unit LengthUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
|
||||
public virtual Unit ElectricUnit { get; set; } /// Not mapped to database, used in ProcedureDlg / Metrology1Tab
|
||||
|
||||
public virtual IList<ComponentTest> MoreParams { get; set; }
|
||||
|
||||
public virtual Procedure Procedure { get; set; }
|
||||
|
||||
/// ------------- Additional stuff not mapped into the database -------------
|
||||
/// Wrappers
|
||||
public virtual double QfromM3ph()
|
||||
{
|
||||
return !IsFromToInPct ? Qfrom : Qtg >= 0 ? Qtg * Qfrom / 100 : 0;
|
||||
}
|
||||
public virtual double QtoM3ph()
|
||||
{
|
||||
return !IsFromToInPct ? Qto : Qtg >= 0 ? Qtg * Qto / 100 : 0;
|
||||
}
|
||||
|
||||
public Test()
|
||||
{
|
||||
@@ -91,6 +101,7 @@ namespace Config.Entities
|
||||
Profile = TestProfile.UserDefined;
|
||||
Publish = (sbyte)Common.Publish.Always;
|
||||
DoEvaluate = true;
|
||||
IsFromToInPct = false;
|
||||
ErrLimLo = -2.0f; /// [%] lower error limit
|
||||
ErrLimHi = 2.0f; /// [%] upper error limit
|
||||
Uncertainty = 0;
|
||||
@@ -160,7 +171,8 @@ namespace Config.Entities
|
||||
result.Qtg = Qtg;
|
||||
result.Qfrom = Qfrom;
|
||||
result.Qto = Qto;
|
||||
result.Volume = Volume;
|
||||
result.IsFromToInPct = IsFromToInPct;
|
||||
result.Volume = Volume;
|
||||
result.TestTime = TestTime;
|
||||
result.Method = Method;
|
||||
result.ErrLimLo = ErrLimLo;
|
||||
@@ -181,7 +193,6 @@ namespace Config.Entities
|
||||
result.TimePump2StartV = TimePump2StartV;
|
||||
result.TimeStop2Mass = TimeStop2Mass;
|
||||
result.ShortPulses = ShortPulses;
|
||||
result.RedType = RedType;
|
||||
result.FeedingPath = FeedingPath;
|
||||
result.BenchPath = BenchPath;
|
||||
result.OutputPath = OutputPath;
|
||||
@@ -194,10 +205,12 @@ namespace Config.Entities
|
||||
result.TransAfter = TransAfter;
|
||||
result.VolumeUnit = VolumeUnit;
|
||||
result.FlowUnit = FlowUnit;
|
||||
result.FlowUnit = FlowUnit;
|
||||
result.MassUnit = MassUnit;
|
||||
result.TempUnit = TempUnit;
|
||||
result.PressUnit = PressUnit;
|
||||
result.LengthUnit = LengthUnit;
|
||||
result.ElectricUnit = ElectricUnit;
|
||||
foreach (var prms in MoreParams) { result.MoreParams.Add(prms.Clone()); }
|
||||
|
||||
return result;
|
||||
@@ -214,6 +227,7 @@ namespace Config.Entities
|
||||
output.WriteLine(Qtg.ToString(ci));
|
||||
output.WriteLine(Qfrom.ToString(ci));
|
||||
output.WriteLine(Qto.ToString(ci));
|
||||
output.WriteLine(IsFromToInPct.ToString());
|
||||
output.WriteLine(Volume.ToString(ci));
|
||||
output.WriteLine(TestTime.ToString(ci));
|
||||
output.WriteLine(Method);
|
||||
@@ -234,6 +248,7 @@ namespace Config.Entities
|
||||
output.WriteLine(TimeFlow2Mass.ToString(ci));
|
||||
output.WriteLine(TimePump2StartV.ToString(ci));
|
||||
output.WriteLine(TimeStop2Mass.ToString(ci));
|
||||
output.WriteLine(ShortPulses.ToString(ci));
|
||||
output.WriteLine(FeedingPath);
|
||||
output.WriteLine(BenchPath);
|
||||
output.WriteLine(OutputPath);
|
||||
@@ -262,11 +277,12 @@ namespace Config.Entities
|
||||
tst.Part = int.Parse(input.ReadLine(), ci);
|
||||
tst.Publish = sbyte.Parse(input.ReadLine(), ci);
|
||||
tst.DoEvaluate = bool.Parse(input.ReadLine());
|
||||
tst.Qtg = float.Parse(input.ReadLine(), ci);
|
||||
tst.Qfrom = float.Parse(input.ReadLine(), ci);
|
||||
tst.Qto = float.Parse(input.ReadLine(), ci);
|
||||
tst.Volume = float.Parse(input.ReadLine(), ci);
|
||||
tst.TestTime = float.Parse(input.ReadLine(), ci);
|
||||
tst.Qtg = double.Parse(input.ReadLine(), ci);
|
||||
tst.Qfrom = double.Parse(input.ReadLine(), ci);
|
||||
tst.Qto = double.Parse(input.ReadLine(), ci);
|
||||
tst.IsFromToInPct = bool.Parse(input.ReadLine());
|
||||
tst.Volume = double.Parse(input.ReadLine(), ci);
|
||||
tst.TestTime = double.Parse(input.ReadLine(), ci);
|
||||
tst.Method = input.ReadLine();
|
||||
tst.ErrLimLo = float.Parse(input.ReadLine(), ci);
|
||||
tst.ErrLimHi = float.Parse(input.ReadLine(), ci);
|
||||
@@ -285,6 +301,7 @@ namespace Config.Entities
|
||||
tst.TimeFlow2Mass = int.Parse(input.ReadLine(), ci);
|
||||
tst.TimePump2StartV = int.Parse(input.ReadLine(), ci);
|
||||
tst.TimeStop2Mass = int.Parse(input.ReadLine(), ci);
|
||||
tst.ShortPulses = int.Parse(input.ReadLine(), ci);
|
||||
tst.FeedingPath = input.ReadLine();
|
||||
tst.BenchPath = input.ReadLine();
|
||||
tst.OutputPath = input.ReadLine();
|
||||
@@ -293,8 +310,11 @@ namespace Config.Entities
|
||||
tst.TransBetween = input.ReadLine();
|
||||
string line = input.ReadLine();
|
||||
tst.Profile = line.Equals(TestProfile.ProtectedHeatMeter.ToString()) ? TestProfile.ProtectedHeatMeter
|
||||
: line.Equals(TestProfile.UserDefinedHeatMeter.ToString()) ? TestProfile.UserDefinedHeatMeter
|
||||
: line.Equals(TestProfile.Protected.ToString()) ? TestProfile.Protected : TestProfile.UserDefined; /// UserDefined is the default
|
||||
: line.Equals(TestProfile.ProtectedCompound.ToString()) ? TestProfile.ProtectedCompound
|
||||
: line.Equals(TestProfile.Protected.ToString()) ? TestProfile.Protected
|
||||
: line.Equals(TestProfile.UserDefinedHeatMeter.ToString()) ? TestProfile.UserDefinedHeatMeter
|
||||
: line.Equals(TestProfile.UserDefinedCompound.ToString()) ? TestProfile.UserDefinedCompound
|
||||
: TestProfile.UserDefined; /// UserDefined is the default
|
||||
tst.TransAfter = input.ReadLine();
|
||||
|
||||
while (true)
|
||||
@@ -327,6 +347,7 @@ namespace Config.Entities
|
||||
ln = inp.ReadLine(); if (ln != Qtg.ToString(ci)) { diff.AppendFormat(fmt, "Qtg", Qtg.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != Qfrom.ToString(ci)) { diff.AppendFormat(fmt, "Qfrom", Qfrom.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != Qto.ToString(ci)) { diff.AppendFormat(fmt, "Qto", Qto.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != IsFromToInPct.ToString()) { diff.AppendFormat(fmt, "IsFromToInPct", IsFromToInPct.ToString(), ln); };
|
||||
ln = inp.ReadLine(); if (ln != Volume.ToString(ci)) { diff.AppendFormat(fmt, "Volume", Volume.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != TestTime.ToString(ci)) { diff.AppendFormat(fmt, "TstTime", TestTime.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != Method) { diff.AppendFormat(fmt, "Method", Method, ln); };
|
||||
@@ -334,8 +355,8 @@ namespace Config.Entities
|
||||
ln = inp.ReadLine(); if (ln != ErrLimHi.ToString(ci)) { diff.AppendFormat(fmt, "ErrLimHi", ErrLimHi.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != Uncertainty.ToString(ci)) { diff.AppendFormat(fmt, "Uncertainty", Uncertainty.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != Repeats.ToString(ci)) { diff.AppendFormat(fmt, "Repeats", Repeats.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != DoDraining.ToString(ci)) { diff.AppendFormat(fmt, "Draining", DoDraining.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != DoDrainingAfter.ToString(ci)) { diff.AppendFormat(fmt, "Zeroing", DoDrainingAfter.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != DoDraining.ToString()) { diff.AppendFormat(fmt, "DoDraining", DoDraining.ToString(), ln); };
|
||||
ln = inp.ReadLine(); if (ln != DoDrainingAfter.ToString()) { diff.AppendFormat(fmt, "DoDrainingAfter", DoDrainingAfter.ToString(), ln); };
|
||||
ln = inp.ReadLine(); if (ln != TempLimLo.ToString(ci)) { diff.AppendFormat(fmt, "TempLimLo", TempLimLo.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != TempLimHi.ToString(ci)) { diff.AppendFormat(fmt, "TempLimHi", TempLimHi.ToString(ci), ln); };
|
||||
ln = inp.ReadLine(); if (ln != TempControl) { diff.AppendFormat(fmt, "TempController", TempControl, ln); };
|
||||
@@ -351,10 +372,10 @@ namespace Config.Entities
|
||||
ln = inp.ReadLine(); if (ln != BenchPath) { diff.AppendFormat(fmt, "BenchPath", BenchPath, ln); };
|
||||
ln = inp.ReadLine(); if (ln != OutputPath) { diff.AppendFormat(fmt, "OutputPath", OutputPath, ln); };
|
||||
ln = inp.ReadLine(); if (ln != MetersPath) { diff.AppendFormat(fmt, "MetersPath", MetersPath, ln); };
|
||||
ln = inp.ReadLine(); if (ln != TransBefore) { diff.AppendFormat(fmt, "RelTransBefore", TransBefore, ln); };
|
||||
ln = inp.ReadLine(); if (ln != TransBetween) { diff.AppendFormat(fmt, "RelTransBetween", TransBetween, ln); };
|
||||
ln = inp.ReadLine(); if (ln != Profile.ToString()) { diff.AppendFormat(fmt, "RelTransAfter", Profile, ln); };
|
||||
ln = inp.ReadLine(); if (ln != TransAfter) { diff.AppendFormat(fmt, "TransitionAfter", TransAfter, ln); };
|
||||
ln = inp.ReadLine(); if (ln != TransBefore) { diff.AppendFormat(fmt, "TransBefore", TransBefore, ln); };
|
||||
ln = inp.ReadLine(); if (ln != TransBetween) { diff.AppendFormat(fmt, "TransBetween", TransBetween, ln); };
|
||||
ln = inp.ReadLine(); if (ln != Profile.ToString()) { diff.AppendFormat(fmt, "Profile", Profile, ln); };
|
||||
ln = inp.ReadLine(); if (ln != TransAfter) { diff.AppendFormat(fmt, "TransAfter", TransAfter, ln); };
|
||||
|
||||
return diff.ToString();
|
||||
}
|
||||
|
||||
+175
-13
@@ -1,14 +1,19 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2019 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using log4net;
|
||||
using Common;
|
||||
using Config.Resources;
|
||||
|
||||
namespace Config.Entities
|
||||
{
|
||||
public class User
|
||||
public class User : Common.IUser
|
||||
{
|
||||
public virtual int Id { get; protected set; }
|
||||
static readonly ILog log = LogManager.GetLogger(typeof(User));
|
||||
|
||||
public virtual int Id { get; protected set; }
|
||||
public virtual string UserName { get; set; } /// = name, alias, abbreviation
|
||||
public virtual string FullName { get; set; } /// = description
|
||||
public virtual string Tag { get; set; }
|
||||
@@ -20,11 +25,27 @@ namespace Config.Entities
|
||||
public virtual DateTime LastPwChange { get; set; }
|
||||
public virtual IList<Group> Groups { get; set; } //User can be a member of a list of groups
|
||||
|
||||
private bool powerUser; /// true for built-in users, power users have full access even with empty Groups list
|
||||
public virtual bool IsPowerUser() { return powerUser; }
|
||||
|
||||
private string legalizator; /// Not mapped to a database !!!, 2nd user entered in a logging dialog
|
||||
public virtual void SetLegalizator(string value) { legalizator = value; }
|
||||
public virtual string GetLegalizator() { return legalizator; }
|
||||
|
||||
public User()
|
||||
{
|
||||
Groups = new List<Group>();
|
||||
}
|
||||
|
||||
public User(string userName, int number, bool powerUser)
|
||||
{
|
||||
UserName = userName;
|
||||
Number = number;
|
||||
this.powerUser = powerUser;
|
||||
Groups = new List<Group>();
|
||||
FullName = powerUser ? "Power User" : string.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a group to the user.
|
||||
/// </summary>
|
||||
@@ -34,14 +55,155 @@ namespace Config.Entities
|
||||
Groups.Add(group);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Encrypts and sets users password.
|
||||
/// </summary>
|
||||
/// <param name="password">Unencrypted password</param>
|
||||
public virtual void SetPassword(string password)
|
||||
{
|
||||
Password = Users.Entities.User.getHash(password);
|
||||
LastPwChange = DateTime.Now;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// All members are copied except of ID (so that NHibernate works properly).
|
||||
/// List of groups is empty.
|
||||
/// </summary>
|
||||
/// <param name="user"></param>
|
||||
/// <returns></returns>
|
||||
public virtual object Clone()
|
||||
{
|
||||
User newUser = new User(UserName, Number, false);
|
||||
newUser.FullName = FullName;
|
||||
newUser.Number = Number;
|
||||
newUser.Tag = Tag;
|
||||
newUser.Password = Password;
|
||||
newUser.LastPwChange = LastPwChange;
|
||||
return newUser;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return (UserName != null) ? UserName : Number.ToString();
|
||||
}
|
||||
|
||||
/// ------------- Additional stuff not mapped into the database -------------
|
||||
|
||||
/// <summary>
|
||||
/// Check whether user is a member of a group.
|
||||
/// </summary>
|
||||
/// <param name="groupId">Group GID</param>
|
||||
/// <returns>true is user is a member of the specified group</returns>
|
||||
public virtual bool IsMemberOf(GID groupId)
|
||||
{
|
||||
if (powerUser)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if ((groupId >= 0) && (groupId < GID.NrOfGroups))
|
||||
{
|
||||
foreach (var g in Groups)
|
||||
{
|
||||
if (g.GID == groupId) return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check whether user is a member of any of specified groups.
|
||||
/// Returns true also when no groups are defined (groupIds = null).
|
||||
/// </summary>
|
||||
/// <param name="groupIds">An array of group GID-s or null (no membership required)</param>
|
||||
/// <returns>true if user is a member of any of specified groups</returns>
|
||||
public virtual bool IsMemberOf(GID[] groupIds)
|
||||
{
|
||||
if (groupIds == null || powerUser)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach (var gid in groupIds)
|
||||
{
|
||||
if ((gid >= 0) && (gid < GID.NrOfGroups))
|
||||
{
|
||||
/// for all group elements in User.Groups
|
||||
foreach (var grp in Groups)
|
||||
{
|
||||
/// element GID = parameter GroupId ?
|
||||
if (grp.GID == gid) return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks requirements on the password regardless of the password history
|
||||
/// </summary>
|
||||
/// <param name="password">Password</param>
|
||||
/// <returns>true when the password is OK</returns>
|
||||
public static bool IsPasswordMeetsRequirements(string password, out string explanation)
|
||||
{
|
||||
return Common.Utils.IsPasswordMeetsRequirements(password, out explanation);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true when password was already used in the past
|
||||
/// </summary>
|
||||
/// <param name="passwordCandidate">Password</param>
|
||||
/// <returns>false when password is new, true when it was used in the past</returns>
|
||||
public virtual bool IsPasswordUsedInPast(string passwordCandidate)
|
||||
{
|
||||
string encryptedPW = EncryptedPassword(passwordCandidate);
|
||||
return (encryptedPW == Password) || (encryptedPW == Password2) || (encryptedPW == Password3);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks 'LastPwChange' and returns true when password expired
|
||||
/// </summary>
|
||||
/// <returns></ returns>
|
||||
public virtual bool IsPasswordExpired()
|
||||
{
|
||||
if (IsPowerUser() || IsMemberOf(GID.Administrators) || CurrentUser.PasswdExpirationPeriodDays == 0)
|
||||
{
|
||||
/// Password cannot expirate for this user or this feature is disabled in Backup and Security options
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Password expiration time is 3 months
|
||||
return (DateTime.Now - LastPwChange > new TimeSpan(CurrentUser.PasswdExpirationPeriodDays, 0, 0, 0));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Encrypts and saves users password.
|
||||
/// </summary>
|
||||
/// <param name="password">Password</param>
|
||||
public virtual void SetPassword(string password)
|
||||
{
|
||||
Password4 = Password3;
|
||||
Password3 = Password2;
|
||||
Password2 = Password;
|
||||
Password = EncryptedPassword(password);
|
||||
LastPwChange = DateTime.Now;
|
||||
}
|
||||
|
||||
string EncryptedPassword(string password)
|
||||
{
|
||||
return Common.Utils.GetHash(password);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Verifies users password. Used by static bool Authorisation(...)
|
||||
/// </summary>
|
||||
/// <param name="password">Password</param>
|
||||
/// <returns>true if password is correct</returns>
|
||||
public virtual bool IsCorrectPassword(string password)
|
||||
{
|
||||
if (string.IsNullOrEmpty(password) && string.IsNullOrEmpty(Password))
|
||||
{
|
||||
/// Currently saved and verified passwords are both empty => return true
|
||||
return true;
|
||||
}
|
||||
|
||||
return (Password == EncryptedPassword(password));
|
||||
}
|
||||
|
||||
public virtual string ToEncodedStr()
|
||||
{
|
||||
return string.Format("{0}~{1}~{2}", UserName, FullName, legalizator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+30
-28
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
@@ -8,17 +8,18 @@ using FluentNHibernate.Cfg.Db;
|
||||
using NHibernate;
|
||||
using NHibernate.Cfg;
|
||||
using NHibernate.Tool.hbm2ddl;
|
||||
using Common;
|
||||
using Config.Resources;
|
||||
|
||||
namespace Config
|
||||
{
|
||||
public static class FluentCommon
|
||||
public class FluentCommon
|
||||
{
|
||||
/// <summary>
|
||||
/// NHibernate session factory (to create the database session 'SessionFactory')
|
||||
/// </summary>
|
||||
/// <returns>A database session</returns>
|
||||
public static ISessionFactory CreateSessionFactory(Common.DBKind database, Common.DBType dbType, string connectionString, bool createDB)
|
||||
public static ISessionFactory CreateSessionFactory(DBKind database, DBType dbType, string connectionString, bool createDB)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -27,23 +28,23 @@ namespace Config
|
||||
switch (dbType)
|
||||
{
|
||||
default:
|
||||
case Common.DBType.MySql:
|
||||
case DBType.MySql:
|
||||
cfg = cfg.Database(MySQLConfiguration.Standard.ConnectionString(connectionString));
|
||||
break;
|
||||
case Common.DBType.SQLite:
|
||||
cfg = cfg.Database(SQLiteConfiguration.Standard.UsingFile(connectionString));
|
||||
case DBType.SQLite:
|
||||
cfg = cfg.Database(SQLiteConfiguration.Standard.UsingFile(connectionString));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (database)
|
||||
{
|
||||
default:
|
||||
case Common.DBKind.Config:
|
||||
case Common.DBKind.RemoteConfig:
|
||||
cfg = cfg.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Data>());
|
||||
case DBKind.Config:
|
||||
case DBKind.RemoteConfig:
|
||||
cfg = cfg.Mappings(m => m.FluentMappings.AddFromAssemblyOf<FluentCommon>());
|
||||
break;
|
||||
case Common.DBKind.Results:
|
||||
cfg = cfg.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Data>());
|
||||
case DBKind.Results:
|
||||
cfg = cfg.Mappings(m => m.FluentMappings.AddFromAssemblyOf<FluentCommon>());
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -89,9 +90,9 @@ namespace Config
|
||||
/// <param name="dbType">DBType.SQLite or DBType.MySql</param>
|
||||
/// <param name="connectionString">Connection string</param>
|
||||
/// <returns>true=success, false=error</returns>
|
||||
public static bool CreateEmptyConfigDB(Common.DBType dbType, string connectionString)
|
||||
public static bool CreateEmptyConfigDB(DBType dbType, string connectionString)
|
||||
{
|
||||
ISessionFactory sessionFactory = CreateSessionFactory(Common.DBKind.Config, dbType, connectionString, true);
|
||||
ISessionFactory sessionFactory = CreateSessionFactory(DBKind.Config, dbType, connectionString, true);
|
||||
if (sessionFactory == null) return false;
|
||||
|
||||
/// Populate the database
|
||||
@@ -104,33 +105,34 @@ namespace Config
|
||||
///
|
||||
var admin = new Config.Entities.User
|
||||
{
|
||||
UserName = Data.AdminUsername,
|
||||
UserName = CurrentUser.AdminUsername,
|
||||
FullName = Strings.Administrator,
|
||||
LastPwChange = DateTime.Now
|
||||
};
|
||||
admin.SetPassword(Data.AdminPassword);
|
||||
admin.SetPassword(CurrentUser.AdminPassword);
|
||||
|
||||
///
|
||||
/// Prepare all groups, add some of them to admin
|
||||
///
|
||||
for (Common.GID gid = 0; gid < Common.GID.NrOfGroups; gid++)
|
||||
for (GID gid = 0; gid < GID.NrOfGroups; gid++)
|
||||
{
|
||||
Config.Entities.Group group = new Config.Entities.Group(gid);
|
||||
switch (gid)
|
||||
{
|
||||
case Common.GID.Testers:
|
||||
case Common.GID.TestingSpecialists:
|
||||
case Common.GID.HeadOfLab:
|
||||
case Common.GID.MaintenanceSpecialists:
|
||||
case Common.GID.Metrologists:
|
||||
case Common.GID.CalibrationSpecialists:
|
||||
case Common.GID.Administrators:
|
||||
case GID.Testers:
|
||||
case GID.TestingSpecialists:
|
||||
case GID.HeadOfLab:
|
||||
case GID.MaintenanceSpecialists:
|
||||
case GID.Metrologists:
|
||||
case GID.CalibrationSpecialists:
|
||||
case GID.Administrators:
|
||||
#if TURA_IPERL || TURA_IPERL_NEW || TURA_SPECIAL
|
||||
case Common.GID.TraceabilityManagement:
|
||||
#elif KEMPNO_50 || KRAKOW_50 || TORUN_50 || WARSAW_50 || WARSAW_END
|
||||
case Common.GID.MetrologicalAuthority:
|
||||
case Common.GID.WaterMeterAuthority:
|
||||
case GID.TraceabilityManagement:
|
||||
//#elif LANG_PL
|
||||
#endif
|
||||
case GID.MetrologicalAuthority:
|
||||
case GID.WaterMeterAuthority:
|
||||
|
||||
admin.AddGroup(group);
|
||||
session.SaveOrUpdate(group); /// Save this group
|
||||
break;
|
||||
|
||||
+5
-3
@@ -1,4 +1,4 @@
|
||||
///
|
||||
///
|
||||
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
@@ -6,6 +6,8 @@ using System.Collections.Generic;
|
||||
using log4net;
|
||||
using Common;
|
||||
|
||||
//formulas.cs has been added cause iPerl from master-2 ...MF
|
||||
|
||||
namespace Config
|
||||
{
|
||||
public static class Formulas
|
||||
@@ -214,9 +216,9 @@ namespace Config
|
||||
/// </summary>
|
||||
public static double ErrorFromVolumes(double measuredVolume, double trueVolume)
|
||||
{
|
||||
if (trueVolume <= float.Epsilon)
|
||||
if (-float.Epsilon <= trueVolume && trueVolume <= float.Epsilon)
|
||||
{
|
||||
if (measuredVolume <= float.Epsilon)
|
||||
if (-float.Epsilon <= measuredVolume && measuredVolume <= float.Epsilon)
|
||||
{
|
||||
log.WarnFormat("ErrorFromVolumes({0},{1}) returns {2}", measuredVolume, trueVolume, -100.0);
|
||||
return -100.0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2022 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2015 Sensus Metering Systems
|
||||
///
|
||||
using FluentNHibernate.Mapping;
|
||||
using Config.Entities;
|
||||
@@ -16,11 +16,14 @@ namespace Config.Mappings
|
||||
Map(x => x.Qfrom);
|
||||
Map(x => x.Qto);
|
||||
Map(x => x.Selector);
|
||||
Map(x => x.TempMtrUp).Column("TempIn");
|
||||
Map(x => x.TempMtrDown).Column("TempOut");
|
||||
Map(x => x.PressMtrUp).Column("PressIn");
|
||||
Map(x => x.PressMtrDown).Column("PressOut");
|
||||
Map(x => x.TempMtrUp);
|
||||
Map(x => x.TempMtrDown);
|
||||
Map(x => x.PressMtrUp);
|
||||
Map(x => x.PressMtrDown);
|
||||
Map(x => x.PressMtrDelta);
|
||||
//Map(x => x.ElectricMtrUp);
|
||||
//Map(x => x.ElectricMtrDown);
|
||||
//Map(x => x.ElectricMtrDelta);
|
||||
Map(x => x.StopBFValve);
|
||||
Map(x => x.ValvesOpen)
|
||||
.CustomType("StringClob")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2019 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using FluentNHibernate.Mapping;
|
||||
using Config.Entities;
|
||||
@@ -13,13 +13,13 @@ namespace Config.Mappings
|
||||
Id(x => x.Id);
|
||||
Map(x => x.Name);
|
||||
Map(x => x.ClassName);
|
||||
Map(x => x.ParentName);
|
||||
Map(x => x.Parent);
|
||||
Map(x => x.ItemNr);
|
||||
Map(x => x.Mode);
|
||||
Map(x => x.Logging);
|
||||
Map(x => x.DebugMode);
|
||||
Map(x => x.LogLevel);
|
||||
Map(x => x.Parameters)
|
||||
.CustomType("StringClob")
|
||||
.CustomSqlType("varchar(8000)");
|
||||
.CustomSqlType("varchar(12000)");
|
||||
HasMany(x => x.Corrections)
|
||||
.OrderBy("Measurement")
|
||||
.Cascade.All();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2022 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2015 Sensus Metering Systems
|
||||
///
|
||||
using FluentNHibernate.Mapping;
|
||||
using Config.Entities;
|
||||
@@ -16,8 +16,8 @@ namespace Config.Mappings
|
||||
Map(x => x.Qfrom);
|
||||
Map(x => x.Qto);
|
||||
Map(x => x.Selector);
|
||||
Map(x => x.Pump);
|
||||
Map(x => x.RegulValvesPct);
|
||||
Map(x => x.Pump);
|
||||
Map(x => x.RegVPositions);
|
||||
Map(x => x.ValvesOpen)
|
||||
.CustomType("StringClob")
|
||||
.CustomSqlType("varchar(8000)");
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using FluentNHibernate.Mapping;
|
||||
using Config.Entities;
|
||||
|
||||
namespace Config.Mappings
|
||||
{
|
||||
class MeasurementCorrectionMap : ClassMap<MeasurementCorrection>
|
||||
class MeasurementCorrectionMap : ClassMap<Entities.MeasurementCorrection>
|
||||
{
|
||||
public MeasurementCorrectionMap()
|
||||
{
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2015 Sensus Metering Systems
|
||||
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using FluentNHibernate.Mapping;
|
||||
using Config.Entities;
|
||||
|
||||
namespace Config.Mappings
|
||||
{
|
||||
class MetersPathMap : ClassMap<MetersPath>
|
||||
class MetersPathMap : ClassMap<Entities.MetersPath>
|
||||
{
|
||||
public MetersPathMap()
|
||||
{
|
||||
@@ -14,48 +13,26 @@ namespace Config.Mappings
|
||||
Map(x => x.ItemNr);
|
||||
Map(x => x.Name);
|
||||
|
||||
#pragma warning disable
|
||||
if (Config.Data.WMsCount >= 1) Map(x => x.Sensor1);
|
||||
if (Config.Data.WMsCount >= 2) Map(x => x.Sensor2);
|
||||
if (Config.Data.WMsCount >= 3) Map(x => x.Sensor3);
|
||||
if (Config.Data.WMsCount >= 4) Map(x => x.Sensor4);
|
||||
if (Config.Data.WMsCount >= 5) Map(x => x.Sensor5);
|
||||
if (Config.Data.WMsCount >= 6) Map(x => x.Sensor6);
|
||||
if (Config.Data.WMsCount >= 7) Map(x => x.Sensor7);
|
||||
if (Config.Data.WMsCount >= 8) Map(x => x.Sensor8);
|
||||
if (Config.Data.WMsCount >= 9) Map(x => x.Sensor9);
|
||||
if (Config.Data.WMsCount >= 10) Map(x => x.Sensor10);
|
||||
if (Config.Data.WMsCount >= 11) Map(x => x.Sensor11);
|
||||
if (Config.Data.WMsCount >= 12) Map(x => x.Sensor12);
|
||||
if (Config.Data.WMsCount >= 13) Map(x => x.Sensor13);
|
||||
if (Config.Data.WMsCount >= 14) Map(x => x.Sensor14);
|
||||
if (Config.Data.WMsCount >= 15) Map(x => x.Sensor15);
|
||||
if (Config.Data.WMsCount >= 16) Map(x => x.Sensor16);
|
||||
if (Config.Data.WMsCount >= 17) Map(x => x.Sensor17);
|
||||
if (Config.Data.WMsCount >= 18) Map(x => x.Sensor18);
|
||||
if (Config.Data.WMsCount >= 19) Map(x => x.Sensor19);
|
||||
if (Config.Data.WMsCount >= 20) Map(x => x.Sensor20);
|
||||
if (Config.Data.WMsCount >= 21) Map(x => x.Sensor21);
|
||||
if (Config.Data.WMsCount >= 22) Map(x => x.Sensor22);
|
||||
if (Config.Data.WMsCount >= 23) Map(x => x.Sensor23);
|
||||
if (Config.Data.WMsCount >= 24) Map(x => x.Sensor24);
|
||||
if (Config.Data.WMsCount >= 25) Map(x => x.Sensor25);
|
||||
if (Config.Data.WMsCount >= 26) Map(x => x.Sensor26);
|
||||
if (Config.Data.WMsCount >= 27) Map(x => x.Sensor27);
|
||||
if (Config.Data.WMsCount >= 28) Map(x => x.Sensor28);
|
||||
if (Config.Data.WMsCount >= 29) Map(x => x.Sensor29);
|
||||
if (Config.Data.WMsCount >= 30) Map(x => x.Sensor30);
|
||||
if (Config.Data.WMsCount >= 31) Map(x => x.Sensor31);
|
||||
if (Config.Data.WMsCount >= 32) Map(x => x.Sensor32);
|
||||
if (Config.Data.WMsCount >= 33) Map(x => x.Sensor33);
|
||||
if (Config.Data.WMsCount >= 34) Map(x => x.Sensor34);
|
||||
if (Config.Data.WMsCount >= 35) Map(x => x.Sensor35);
|
||||
if (Config.Data.WMsCount >= 36) Map(x => x.Sensor36);
|
||||
if (Config.Data.WMsCount >= 37) Map(x => x.Sensor37);
|
||||
if (Config.Data.WMsCount >= 38) Map(x => x.Sensor38);
|
||||
if (Config.Data.WMsCount >= 39) Map(x => x.Sensor39);
|
||||
if (Config.Data.WMsCount >= 40) Map(x => x.Sensor40);
|
||||
#pragma warning restore
|
||||
Map(x => x.Sensor1);
|
||||
Map(x => x.Sensor2);
|
||||
Map(x => x.Sensor3);
|
||||
Map(x => x.Sensor4);
|
||||
Map(x => x.Sensor5);
|
||||
Map(x => x.Sensor6);
|
||||
Map(x => x.Sensor7);
|
||||
Map(x => x.Sensor8);
|
||||
Map(x => x.Sensor9);
|
||||
Map(x => x.Sensor10);
|
||||
Map(x => x.Sensor11);
|
||||
Map(x => x.Sensor12);
|
||||
Map(x => x.Sensor13);
|
||||
Map(x => x.Sensor14);
|
||||
Map(x => x.Sensor15);
|
||||
Map(x => x.Sensor16);
|
||||
Map(x => x.Sensor17);
|
||||
Map(x => x.Sensor18);
|
||||
Map(x => x.Sensor19);
|
||||
Map(x => x.Sensor20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,16 +16,15 @@ namespace Config.Mappings
|
||||
Map(x => x.Qfrom);
|
||||
Map(x => x.Qto);
|
||||
Map(x => x.Selector);
|
||||
Map(x => x.RegulValve);
|
||||
Map(x => x.FlowMeter);
|
||||
Map(x => x.RegValve);
|
||||
Map(x => x.RegulMinStep).Nullable();//older databases may not have this column
|
||||
Map(x => x.FlowMeter);
|
||||
Map(x => x.PidCoef);
|
||||
Map(x => x.StartValve);
|
||||
Map(x => x.Diverter);
|
||||
Map(x => x.TempDiv);
|
||||
Map(x => x.Scale)
|
||||
.Column("Balance");
|
||||
Map(x => x.RegulValvesPct)
|
||||
.Column("EmptyTankValve");
|
||||
Map(x => x.TempMtrDiv);
|
||||
Map(x => x.Scale);
|
||||
Map(x => x.RegVPositions);
|
||||
Map(x => x.ValvesOpen)
|
||||
.CustomType("StringClob")
|
||||
.CustomSqlType("varchar(8000)");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2019 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2019-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using FluentNHibernate.Mapping;
|
||||
using Config.Entities;
|
||||
@@ -14,6 +14,7 @@ namespace Config.Mappings
|
||||
Map(x => x.ItemNr);
|
||||
Map(x => x.Name);
|
||||
Map(x => x.Part);
|
||||
Map(x => x.FlowId);
|
||||
Map(x => x.CoefQfrom);
|
||||
Map(x => x.CoefQto);
|
||||
Map(x => x.ErrLimLo);
|
||||
|
||||
+13
-22
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2013-2017 Sensus Metering Systems
|
||||
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
|
||||
///
|
||||
using FluentNHibernate.Mapping;
|
||||
using Config.Entities;
|
||||
@@ -16,19 +16,16 @@ namespace Config.Mappings
|
||||
Map(x => x.Part);
|
||||
Map(x => x.Profile);
|
||||
Map(x => x.Publish);
|
||||
Map(x => x.DoEvaluate)
|
||||
.Column("Evaluate");
|
||||
Map(x => x.DoEvaluate);
|
||||
Map(x => x.Qtg);
|
||||
Map(x => x.Qfrom);
|
||||
Map(x => x.Qto);
|
||||
Map(x => x.Volume);
|
||||
Map(x => x.TestTime)
|
||||
.Column("TstTime");
|
||||
Map(x => x.IsFromToInPct);
|
||||
Map(x => x.Volume);
|
||||
Map(x => x.TestTime);
|
||||
Map(x => x.Repeats);
|
||||
Map(x => x.DoDraining)
|
||||
.Column("Emptying");
|
||||
Map(x => x.DoDrainingAfter)
|
||||
.Column("Zeroing");
|
||||
Map(x => x.DoDraining);
|
||||
Map(x => x.DoDrainingAfter);
|
||||
Map(x => x.TempLimLo);
|
||||
Map(x => x.TempLimHi);
|
||||
Map(x => x.TempControl);
|
||||
@@ -36,19 +33,16 @@ namespace Config.Mappings
|
||||
Map(x => x.MassRepeats);
|
||||
Map(x => x.MassSpread);
|
||||
Map(x => x.MassMethod)
|
||||
.CustomType<byte>();
|
||||
.CustomType<byte>();
|
||||
Map(x => x.TimeBeforeFlow);
|
||||
Map(x => x.TimeFlow2Mass);
|
||||
Map(x => x.TimePump2StartV)
|
||||
.Column("TimeMass2Start");
|
||||
Map(x => x.TimePump2StartV);
|
||||
Map(x => x.TimeStop2Mass);
|
||||
Map(x => x.Method);
|
||||
Map(x => x.ErrLimLo);
|
||||
Map(x => x.ErrLimHi);
|
||||
Map(x => x.Uncertainty);
|
||||
Map(x => x.ShortPulses)
|
||||
.Column("TolerRed"); /// ???
|
||||
Map(x => x.RedType);
|
||||
Map(x => x.ShortPulses);
|
||||
Map(x => x.FeedingPath);
|
||||
Map(x => x.BenchPath);
|
||||
Map(x => x.OutputPath);
|
||||
@@ -56,12 +50,9 @@ namespace Config.Mappings
|
||||
#if HEAT_METERS
|
||||
Map(x => x.HeatMetersPath);
|
||||
#endif
|
||||
Map(x => x.TransBefore)
|
||||
.Column("RelTransBefore");
|
||||
Map(x => x.TransBetween)
|
||||
.Column("RelTransBetween");
|
||||
Map(x => x.TransAfter)
|
||||
.Column("TransitionAfter");
|
||||
Map(x => x.TransBefore);
|
||||
Map(x => x.TransBetween);
|
||||
Map(x => x.TransAfter);
|
||||
|
||||
HasMany(x => x.MoreParams)
|
||||
.Cascade.All();
|
||||
|
||||
@@ -10,14 +10,16 @@ namespace Config.Mappings
|
||||
public UserMap()
|
||||
{
|
||||
Id(x => x.Id);
|
||||
Map(x => x.UserName).Column("Name");
|
||||
Map(x => x.UserName)
|
||||
.Column("Name");
|
||||
Map(x => x.Number);
|
||||
Map(x => x.Tag);
|
||||
Map(x => x.Password);
|
||||
Map(x => x.Password2);
|
||||
Map(x => x.Password3);
|
||||
Map(x => x.Password4);
|
||||
Map(x => x.FullName).Column("Description");
|
||||
Map(x => x.FullName)
|
||||
.Column("Description");
|
||||
Map(x => x.LastPwChange);
|
||||
HasManyToMany(x => x.Groups)
|
||||
.Cascade.SaveUpdate()
|
||||
|
||||
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Sensus")]
|
||||
[assembly: AssemblyProduct("Config")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2013 - 2022 Sensus Slovensko a.s.")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2013 - 2018 Sensus Slovensko a.s.")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2.31.1990.0")]
|
||||
[assembly: AssemblyFileVersion("2.31.1990.0")]
|
||||
[assembly: AssemblyVersion("3.1.1464.0")]
|
||||
[assembly: AssemblyFileVersion("3.1.1464.0")]
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Config
|
||||
{
|
||||
public class PurchaseResources
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -162,4 +162,7 @@
|
||||
<data name="Administrator" xml:space="preserve">
|
||||
<value>Administrator</value>
|
||||
</data>
|
||||
<data name="Password_must_have_at_least_0_characters" xml:space="preserve">
|
||||
<value>Password must have at least {0} characters</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1,68 +0,0 @@
|
||||
///
|
||||
/// Copyright (c) 2017-2022 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Config
|
||||
{
|
||||
public static class Utils
|
||||
{
|
||||
/// <summary>
|
||||
/// Extract and return a DB server from a MySQL connection string.
|
||||
/// </summary>
|
||||
public static string GetDBServer(string connectionString)
|
||||
{
|
||||
return GetFromConnectionString(connectionString, new string[] { "SERVER=" });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extract and return a DB name from a MySQL connection string.
|
||||
/// </summary>
|
||||
public static string GetDBName(string connectionString)
|
||||
{
|
||||
return GetFromConnectionString(connectionString, new string[] { "DATABASE=" });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extract and return a username from a MySQL connection string
|
||||
/// </summary>
|
||||
public static string GetDBUser(string connectionString)
|
||||
{
|
||||
return GetFromConnectionString(connectionString, new string[] { "USER=", "UID=" });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extract and return a password from a MySQL connection string
|
||||
/// </summary>
|
||||
public static string GetDBPassword(string connectionString)
|
||||
{
|
||||
return GetFromConnectionString(connectionString, new string[] { "PASSWORD=", "PWD=" });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extract and return an element of a MySQL connection string
|
||||
/// (a host, a database, a user name or a password).
|
||||
/// Return an empty string on any error.
|
||||
/// </summary>
|
||||
public static string GetFromConnectionString(string connectionString, string[] patterns)
|
||||
{
|
||||
foreach (var pattern in patterns)
|
||||
{
|
||||
int startIx = connectionString.IndexOf(pattern);
|
||||
if (startIx >= 0)
|
||||
{
|
||||
/// pattern found, extract the subsequent element
|
||||
startIx += pattern.Length;
|
||||
int endIx = connectionString.IndexOf(';', startIx);
|
||||
return (endIx > 0) ? connectionString.Substring(startIx, endIx - startIx) : string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
/// pattern NOT found
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,271 @@
|
||||
using System;
|
||||
|
||||
namespace DataMatrix4Net
|
||||
{
|
||||
public class DataMatrix
|
||||
{
|
||||
///
|
||||
/// Public interface
|
||||
///
|
||||
public bool isContainMatrix { get { return Matrix != null; } }
|
||||
public Gma.QrCodeNet.Encoding.BitMatrix Matrix;
|
||||
|
||||
///
|
||||
/// Internal member variables
|
||||
///
|
||||
readonly SymbolSize chosenSize;
|
||||
readonly bool[,] visited;
|
||||
int width { get { return isContainMatrix ? Matrix.Width : 0; } }
|
||||
int height { get { return isContainMatrix ? Matrix.Height : 0; } }
|
||||
|
||||
/// <summary>
|
||||
/// Data matrix constructor
|
||||
/// Data matrix size up to 26x26 supported, one data region.
|
||||
/// </summary>
|
||||
/// <param name="content">Content of the data matrix (ASCII characters only)</param>
|
||||
/// <param name="symbolSize">Chosen data matrix size</param>
|
||||
public DataMatrix(string content, SymbolSize symbolSize = SymbolSize.SquareAuto)
|
||||
{
|
||||
byte[] contentBytes = Utils.MakeByteArray(content);
|
||||
|
||||
if (symbolSize >= 0)
|
||||
{
|
||||
chosenSize = symbolSize;
|
||||
}
|
||||
else if (symbolSize == SymbolSize.SquareAuto)
|
||||
{
|
||||
for (SymbolSize ss = 0; ss < Symbol.SymbolSquareCount; ss++)
|
||||
{
|
||||
if (contentBytes.Length <= Symbol.GetSymbolAttribute(SymbolAttribute.SymbolDataWords, ss))
|
||||
{
|
||||
chosenSize = ss;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int w = Symbol.GetSymbolAttribute(SymbolAttribute.SymbolCols, chosenSize);
|
||||
int h = Symbol.GetSymbolAttribute(SymbolAttribute.SymbolRows, chosenSize);
|
||||
if (w == -1 || h == -1)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("symboSize");
|
||||
}
|
||||
|
||||
/// Add padding and Reed-Solomon error correction bytes to the content
|
||||
byte[] data = ReedSolomon.Encode(contentBytes, chosenSize);
|
||||
|
||||
/// Create matrix, fill in frame cells
|
||||
Matrix = new MyBitMatrix(w, h);
|
||||
visited = new bool[w - 2, h - 2];
|
||||
MakeFrame(chosenSize);
|
||||
|
||||
int ix = 0;
|
||||
int x = 0; /// inside data region in the range 0 .. width-2 (x coordinate, frame excluded)
|
||||
int y = 4; /// inside data region in the range 0 .. height-2 (y coordinate, frame excluded)
|
||||
|
||||
/// Walk through the data matrix area and fill in data bytes
|
||||
do
|
||||
{
|
||||
if (x == 0 && y == height - 2)
|
||||
{
|
||||
PlaceByteSpecial1(data[ix++], width, height);
|
||||
}
|
||||
else if (x == 0 && y == height - 4 && (height - 2) % 4 != 0)
|
||||
{
|
||||
PlaceByteSpecial2(data[ix++], width, height);
|
||||
}
|
||||
else if (x == 0 && y == height - 4 && (height - 2) % 8 == 4)
|
||||
{
|
||||
PlaceByteSpecial3(data[ix++], width, height);
|
||||
}
|
||||
else if (x == 2 && y == height + 2 && (height - 2) % 8 == 0)
|
||||
{
|
||||
PlaceByteSpecial4(data[ix++], width, height);
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
if (x >= 0 && y < height - 2 && !visited[x, y])
|
||||
{
|
||||
PlaceByteStandard(data[ix++], x, y, width, height);
|
||||
visited[x, y] = true;
|
||||
}
|
||||
x += 2;
|
||||
y -= 2;
|
||||
}
|
||||
while (x < width - 2 && y >= 0);
|
||||
x += 3;
|
||||
y += 1;
|
||||
|
||||
do
|
||||
{
|
||||
if (x < width - 2 && y >= 0 && !visited[x, y])
|
||||
{
|
||||
PlaceByteStandard(data[ix++], x, y, width, height);
|
||||
visited[x, y] = true;
|
||||
}
|
||||
x -= 2;
|
||||
y += 2;
|
||||
}
|
||||
while (x >= 0 && y < height - 2);
|
||||
x += 1;
|
||||
y += 3;
|
||||
}
|
||||
while (ix < data.Length);
|
||||
}
|
||||
|
||||
/// All matrix sizes
|
||||
void PlaceByteSpecial1(byte dataByte, int width, int height)
|
||||
{
|
||||
Matrix[width - 2, 4] = (dataByte & 0x01) != 0;
|
||||
Matrix[width - 2, 3] = (dataByte & 0x02) != 0;
|
||||
Matrix[width - 2, 2] = (dataByte & 0x04) != 0;
|
||||
Matrix[width - 2, 1] = (dataByte & 0x08) != 0;
|
||||
Matrix[width - 3, 1] = (dataByte & 0x10) != 0;
|
||||
Matrix[3, height - 2] = (dataByte & 0x20) != 0;
|
||||
Matrix[2, height - 2] = (dataByte & 0x40) != 0;
|
||||
Matrix[1, height - 2] = (dataByte & 0x80) != 0;
|
||||
|
||||
visited[width - 3, 3] = true;
|
||||
visited[width - 3, 2] = true;
|
||||
visited[width - 3, 1] = true;
|
||||
visited[width - 3, 0] = true;
|
||||
visited[width - 4, 0] = true;
|
||||
visited[2, height - 3] = true;
|
||||
visited[1, height - 3] = true;
|
||||
visited[0, height - 3] = true;
|
||||
}
|
||||
|
||||
void PlaceByteSpecial2(byte dataByte, int width, int height)
|
||||
{
|
||||
Matrix[width - 2, 2] = (dataByte & 0x01) != 0;
|
||||
Matrix[width - 2, 1] = (dataByte & 0x02) != 0;
|
||||
Matrix[width - 3, 1] = (dataByte & 0x04) != 0;
|
||||
Matrix[width - 4, 1] = (dataByte & 0x08) != 0;
|
||||
Matrix[width - 5, 1] = (dataByte & 0x10) != 0;
|
||||
Matrix[1, height - 2] = (dataByte & 0x20) != 0;
|
||||
Matrix[1, height - 3] = (dataByte & 0x40) != 0;
|
||||
Matrix[1, height - 4] = (dataByte & 0x80) != 0;
|
||||
|
||||
visited[width - 3, 1] = true;
|
||||
visited[width - 3, 0] = true;
|
||||
visited[width - 4, 0] = true;
|
||||
visited[width - 5, 0] = true;
|
||||
visited[width - 6, 0] = true;
|
||||
visited[0, height - 3] = true;
|
||||
visited[0, height - 4] = true;
|
||||
visited[0, height - 5] = true;
|
||||
}
|
||||
|
||||
void PlaceByteSpecial3(byte dataByte, int width, int height)
|
||||
{
|
||||
Matrix[width - 2, 2] = (dataByte & 0x01) != 0;
|
||||
Matrix[width - 3, 2] = (dataByte & 0x02) != 0;
|
||||
Matrix[width - 4, 2] = (dataByte & 0x04) != 0;
|
||||
Matrix[width - 2, 1] = (dataByte & 0x08) != 0;
|
||||
Matrix[width - 3, 1] = (dataByte & 0x10) != 0;
|
||||
Matrix[width - 4, 1] = (dataByte & 0x20) != 0;
|
||||
Matrix[width - 2, height - 2] = (dataByte & 0x40) != 0;
|
||||
Matrix[1, height - 2] = (dataByte & 0x80) != 0;
|
||||
|
||||
visited[width - 3, 1] = true;
|
||||
visited[width - 4, 1] = true;
|
||||
visited[width - 5, 1] = true;
|
||||
visited[width - 3, 0] = true;
|
||||
visited[width - 4, 0] = true;
|
||||
visited[width - 5, 0] = true;
|
||||
visited[width - 3, height - 3] = true;
|
||||
visited[0, height - 3] = true;
|
||||
}
|
||||
|
||||
void PlaceByteSpecial4(byte dataByte, int width, int height)
|
||||
{
|
||||
Matrix[width - 2, 4] = (dataByte & 0x01) != 0;
|
||||
Matrix[width - 2, 3] = (dataByte & 0x02) != 0;
|
||||
Matrix[width - 2, 2] = (dataByte & 0x04) != 0;
|
||||
Matrix[width - 2, 1] = (dataByte & 0x08) != 0;
|
||||
Matrix[width - 3, 1] = (dataByte & 0x10) != 0;
|
||||
Matrix[1, height - 2] = (dataByte & 0x20) != 0;
|
||||
Matrix[1, height - 3] = (dataByte & 0x40) != 0;
|
||||
Matrix[1, height - 4] = (dataByte & 0x80) != 0;
|
||||
|
||||
visited[width - 3, 3] = true;
|
||||
visited[width - 3, 2] = true;
|
||||
visited[width - 3, 1] = true;
|
||||
visited[width - 3, 0] = true;
|
||||
visited[width - 4, 0] = true;
|
||||
visited[0, height - 3] = true;
|
||||
visited[0, height - 4] = true;
|
||||
visited[0, height - 5] = true;
|
||||
}
|
||||
|
||||
///
|
||||
/// Standard bit positioning (all matrix sizes)
|
||||
///
|
||||
int[] xOffs = new int[8] { 1, 0, -1, 1, 0, -1, 0, -1 };
|
||||
int[] yOffs = new int[8] { 1, 1, 1, 0, 0, 0, -1, -1 };
|
||||
|
||||
/// <summary>
|
||||
/// Standard placemnt of a byte into a matrix
|
||||
/// </summary>
|
||||
/// <param name="dataByte">Data byte</param>
|
||||
/// <param name="x">X-coordinate in range 0..width-2 (from left, frame excluded)</param>
|
||||
/// <param name="y">Y-coordinate in range 0..height-2 (from top, frame excluded)</param>
|
||||
/// <param name="width">Matrix width incl. frame</param>
|
||||
/// <param name="height">Matrix height incl. frame</param>
|
||||
void PlaceByteStandard(byte dataByte, int x, int y, int width, int height)
|
||||
{
|
||||
int mask = 1;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
int xx = x + xOffs[i];
|
||||
int yy = y + yOffs[i];
|
||||
if (xx < 1)
|
||||
{
|
||||
xx += width - 2;
|
||||
yy += 4 - (width + 4) % 8;
|
||||
}
|
||||
else if (yy < 1)
|
||||
{
|
||||
xx += 4 - (height + 4) % 8;
|
||||
yy += height - 2;
|
||||
}
|
||||
Matrix[xx, yy] = (dataByte & mask) != 0;
|
||||
mask = mask << 1;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Crate data matrix frame.
|
||||
/// All square data matrix sizes supported (incl. 4, 16 and 36 data regions).
|
||||
/// </summary>
|
||||
void MakeFrame(SymbolSize size)
|
||||
{
|
||||
int drw = Symbol.GetSymbolAttribute(SymbolAttribute.DataRegionCols, size);
|
||||
int drh = Symbol.GetSymbolAttribute(SymbolAttribute.DataRegionRows, size);
|
||||
int totalhdr = Symbol.GetSymbolAttribute(SymbolAttribute.HorizDataRegions, size);
|
||||
int totalvdr = Symbol.GetSymbolAttribute(SymbolAttribute.VertDataRegions, size);
|
||||
|
||||
for (int hdr = 0; hdr < totalhdr; hdr++)
|
||||
{
|
||||
for (int vdr = 0; vdr < totalvdr; vdr++)
|
||||
{
|
||||
int offsx = hdr * (drw + 2);
|
||||
int offsy = vdr * (drh + 2);
|
||||
|
||||
for (int i = 0; i < drw + 2; i++)
|
||||
{
|
||||
Matrix[offsx + i, offsy + drh + 1] = true;
|
||||
if (i % 2 == 0) Matrix[offsx + i, offsy] = true;
|
||||
}
|
||||
|
||||
for (int j = 0; j < drh + 2; j++)
|
||||
{
|
||||
Matrix[offsx, offsy + j] = true;
|
||||
if (j % 2 == 1) Matrix[offsx + drw + 1, offsy + j] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,11 +4,11 @@
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{5D9B49E3-CDF9-4A27-80B4-58141D0EB0E0}</ProjectGuid>
|
||||
<ProjectGuid>{7CD2B5B4-3304-4151-B8B4-76A8B8AF9B06}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Events</RootNamespace>
|
||||
<AssemblyName>Events</AssemblyName>
|
||||
<RootNamespace>DataMatrix4Net</RootNamespace>
|
||||
<AssemblyName>DataMatrix4Net</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
@@ -21,7 +21,6 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
@@ -30,24 +29,13 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="FluentNHibernate">
|
||||
<HintPath>..\packages\FluentNHibernate.2.0.3.0\lib\net40\FluentNHibernate.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Iesi.Collections">
|
||||
<HintPath>..\packages\Iesi.Collections.4.0.0.4000\lib\net40\Iesi.Collections.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MySql.Data">
|
||||
<HintPath>..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NHibernate">
|
||||
<HintPath>..\packages\NHibernate.4.0.4.4000\lib\net40\NHibernate.dll</HintPath>
|
||||
<Reference Include="Gma.QrCodeNet.Encoding">
|
||||
<HintPath>..\packages\QrCode.Net.0.4.0.0\net40\Gma.QrCodeNet.Encoding.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
@@ -55,22 +43,12 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DB.cs" />
|
||||
<Compile Include="Entities\Event.cs" />
|
||||
<Compile Include="Entities\Subscriber.cs" />
|
||||
<Compile Include="Utils.cs" />
|
||||
<Compile Include="Mappings\EventMap.cs" />
|
||||
<Compile Include="Mappings\SubscriberMap.cs" />
|
||||
<Compile Include="DataMatrix.cs" />
|
||||
<Compile Include="MyBitMatrix.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="DeliveryServices\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Common\Common.csproj">
|
||||
<Project>{c8939821-ba5c-4988-a3d0-bf53b74865c7}</Project>
|
||||
<Name>Common</Name>
|
||||
</ProjectReference>
|
||||
<Compile Include="ReedSolomon.cs" />
|
||||
<Compile Include="Symbol.cs" />
|
||||
<Compile Include="Utils.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
@@ -0,0 +1,39 @@
|
||||
using System;
|
||||
|
||||
namespace DataMatrix4Net
|
||||
{
|
||||
public class MyBitMatrix : Gma.QrCodeNet.Encoding.BitMatrix
|
||||
{
|
||||
///
|
||||
/// Public interface
|
||||
///
|
||||
public override int Width { get { return width; } }
|
||||
public override int Height { get { return height; } }
|
||||
public override bool[,] InternalArray { get { return internalArray; } }
|
||||
///
|
||||
public override bool this[int i, int j]
|
||||
{
|
||||
get { return (i >= 0 && j >= 0 && i < width && j < height) ? internalArray[i, j] : false; }
|
||||
set { if (i >= 0 && j >= 0 && i < width && j < height) internalArray[i, j] = value; }
|
||||
}
|
||||
|
||||
///
|
||||
/// Private members
|
||||
///
|
||||
readonly int width;
|
||||
readonly int height;
|
||||
readonly bool[,] internalArray;
|
||||
|
||||
/// <summary>
|
||||
/// Public constructor
|
||||
/// </summary>
|
||||
/// <param name="width">Matrix width</param>
|
||||
/// <param name="height">Matrix height</param>
|
||||
public MyBitMatrix(int width, int height)
|
||||
{
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
internalArray = new bool[width, height];
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -5,11 +5,11 @@ using System.Runtime.InteropServices;
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("ResultsParser")]
|
||||
[assembly: AssemblyTitle("DataMatrix4Net")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ResultsParser")]
|
||||
[assembly: AssemblyProduct("DataMatrix4Net")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2021")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("90a47d44-c3ab-4528-b19b-0440a521b9af")]
|
||||
[assembly: Guid("efc81899-2be9-4a5c-a120-667d20c5265f")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
@@ -0,0 +1,156 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace DataMatrix4Net
|
||||
{
|
||||
public class ReedSolomon
|
||||
{
|
||||
const int NN = 255;
|
||||
const int MAX_ERROR_WORD_COUNT = 68;
|
||||
|
||||
static byte[] log301 = new byte[]
|
||||
{
|
||||
255, 0, 1, 240, 2, 225, 241, 53, 3, 38, 226, 133, 242, 43, 54, 210,
|
||||
4, 195, 39, 114, 227, 106, 134, 28, 243, 140, 44, 23, 55, 118, 211, 234,
|
||||
5, 219, 196, 96, 40, 222, 115, 103, 228, 78, 107, 125, 135, 8, 29, 162,
|
||||
244, 186, 141, 180, 45, 99, 24, 49, 56, 13, 119, 153, 212, 199, 235, 91,
|
||||
6, 76, 220, 217, 197, 11, 97, 184, 41, 36, 223, 253, 116, 138, 104, 193,
|
||||
229, 86, 79, 171, 108, 165, 126, 145, 136, 34, 9, 74, 30, 32, 163, 84,
|
||||
245, 173, 187, 204, 142, 81, 181, 190, 46, 88, 100, 159, 25, 231, 50, 207,
|
||||
57, 147, 14, 67, 120, 128, 154, 248, 213, 167, 200, 63, 236, 110, 92, 176,
|
||||
7, 161, 77, 124, 221, 102, 218, 95, 198, 90, 12, 152, 98, 48, 185, 179,
|
||||
42, 209, 37, 132, 224, 52, 254, 239, 117, 233, 139, 22, 105, 27, 194, 113,
|
||||
230, 206, 87, 158, 80, 189, 172, 203, 109, 175, 166, 62, 127, 247, 146, 66,
|
||||
137, 192, 35, 252, 10, 183, 75, 216, 31, 83, 33, 73, 164, 144, 85, 170,
|
||||
246, 65, 174, 61, 188, 202, 205, 157, 143, 169, 82, 72, 182, 215, 191, 251,
|
||||
47, 178, 89, 151, 101, 94, 160, 123, 26, 112, 232, 21, 51, 238, 208, 131,
|
||||
58, 69, 148, 18, 15, 16, 68, 17, 121, 149, 129, 19, 155, 59, 249, 70,
|
||||
214, 250, 168, 71, 201, 156, 64, 60, 237, 130, 111, 20, 93, 122, 177, 150,
|
||||
};
|
||||
|
||||
static byte[] antilog301 = new byte[]
|
||||
{
|
||||
1, 2, 4, 8, 16, 32, 64, 128, 45, 90, 180, 69, 138, 57, 114, 228,
|
||||
229, 231, 227, 235, 251, 219, 155, 27, 54, 108, 216, 157, 23, 46, 92, 184,
|
||||
93, 186, 89, 178, 73, 146, 9, 18, 36, 72, 144, 13, 26, 52, 104, 208,
|
||||
141, 55, 110, 220, 149, 7, 14, 28, 56, 112, 224, 237, 247, 195, 171, 123,
|
||||
246, 193, 175, 115, 230, 225, 239, 243, 203, 187, 91, 182, 65, 130, 41, 82,
|
||||
164, 101, 202, 185, 95, 190, 81, 162, 105, 210, 137, 63, 126, 252, 213, 135,
|
||||
35, 70, 140, 53, 106, 212, 133, 39, 78, 156, 21, 42, 84, 168, 125, 250,
|
||||
217, 159, 19, 38, 76, 152, 29, 58, 116, 232, 253, 215, 131, 43, 86, 172,
|
||||
117, 234, 249, 223, 147, 11, 22, 44, 88, 176, 77, 154, 25, 50, 100, 200,
|
||||
189, 87, 174, 113, 226, 233, 255, 211, 139, 59, 118, 236, 245, 199, 163, 107,
|
||||
214, 129, 47, 94, 188, 85, 170, 121, 242, 201, 191, 83, 166, 97, 194, 169,
|
||||
127, 254, 209, 143, 51, 102, 204, 181, 71, 142, 49, 98, 196, 165, 103, 206,
|
||||
177, 79, 158, 17, 34, 68, 136, 61, 122, 244, 197, 167, 99, 198, 161, 111,
|
||||
222, 145, 15, 30, 60, 120, 240, 205, 183, 67, 134, 33, 66, 132, 37, 74,
|
||||
148, 5, 10, 20, 40, 80, 160, 109, 218, 153, 31, 62, 124, 248, 221, 151,
|
||||
3, 6, 12, 24, 48, 96, 192, 173, 119, 238, 241, 207, 179, 75, 150, 0,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// GF add (a + b)
|
||||
/// </summary>
|
||||
static byte GfAdd(byte a, byte b)
|
||||
{
|
||||
return (byte)(a ^ b);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// GF multiply (a * b)
|
||||
/// </summary>
|
||||
static byte GfMult(byte a, byte b)
|
||||
{
|
||||
return (a == 0 || b == 0) ? (byte)0 : antilog301[(log301[a] + log301[b]) % NN];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// GF multiply by antilog (a * alpha**b)
|
||||
/// </summary>
|
||||
static byte GfMultAntilog(byte a, byte b)
|
||||
{
|
||||
return (a == 0) ? (byte)0 : antilog301[(log301[a] + b) % NN];
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Encode a byte array using Reed-Solomon error correction
|
||||
/// </summary>
|
||||
/// <param name="message">Input byte array</param>
|
||||
/// <param name="sizeId"></param>
|
||||
/// <returns>true when successful</returns>
|
||||
public static byte[] Encode(byte[] message, SymbolSize sizeId)
|
||||
{
|
||||
int blockStride = Symbol.GetSymbolAttribute(SymbolAttribute.InterleavedBlocks, sizeId);
|
||||
int blockErrorWords = Symbol.GetSymbolAttribute(SymbolAttribute.BlockErrorWords, sizeId);
|
||||
int symbolDataWords = Symbol.GetSymbolAttribute(SymbolAttribute.SymbolDataWords, sizeId);
|
||||
int symbolErrorWords = Symbol.GetSymbolAttribute(SymbolAttribute.SymbolErrorWords, sizeId);
|
||||
int symbolTotalWords = symbolDataWords + symbolErrorWords;
|
||||
|
||||
byte[] output = new byte[symbolTotalWords];
|
||||
for (int i = 0; i < Math.Min(message.Length, symbolDataWords); i++)
|
||||
{
|
||||
output[i] = message[i]; /// Copy the original message to output
|
||||
}
|
||||
|
||||
/// Populate generator polynomial
|
||||
byte[] gen = RsGenPoly(blockErrorWords);
|
||||
|
||||
/// For each interleaved block...
|
||||
for (int blockIdx = 0; blockIdx < blockStride; blockIdx++)
|
||||
{
|
||||
/// Generate error codewords
|
||||
byte[] ecc = new byte[blockErrorWords];
|
||||
for (int i = 0; i < blockErrorWords; i++) ecc[i] = 0;
|
||||
|
||||
for (int i = blockIdx; i < symbolDataWords; i += blockStride)
|
||||
{
|
||||
byte val = (byte)(ecc[blockErrorWords - 1] ^ output[i]);
|
||||
|
||||
for (int j = blockErrorWords - 1; j > 0; j--)
|
||||
{
|
||||
//DMTX_CHECK_BOUNDS(&ecc, j); DMTX_CHECK_BOUNDS(&ecc, j-1); DMTX_CHECK_BOUNDS(&gen, j);
|
||||
ecc[j] = GfAdd(ecc[j - 1], GfMult(gen[j], val));
|
||||
}
|
||||
|
||||
ecc[0] = GfMult(gen[0], val);
|
||||
}
|
||||
|
||||
/// Copy to output message
|
||||
int jj = blockErrorWords;
|
||||
for (int i = symbolDataWords + blockIdx; i < symbolTotalWords; i += blockStride)
|
||||
{
|
||||
output[i] = ecc[--jj];
|
||||
}
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
|
||||
static byte[] RsGenPoly(int errorWordCount)
|
||||
{
|
||||
byte[] gen = new byte[errorWordCount];
|
||||
|
||||
/// Initialize all coefficients to 1
|
||||
for (int i = 0; i < errorWordCount; i++) gen[i] = (byte)1;
|
||||
|
||||
/* Generate polynomial */
|
||||
for (int i = 0; i < gen.Length; i++)
|
||||
{
|
||||
for (int j = i; j >= 0; j--)
|
||||
{
|
||||
gen[j] = GfMultAntilog(gen[j], (byte)(i + 1));
|
||||
if (j > 0)
|
||||
{
|
||||
gen[j] = (byte)(gen[j] ^ gen[j - 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return gen;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
using System;
|
||||
|
||||
namespace DataMatrix4Net
|
||||
{
|
||||
public enum SymbolSize
|
||||
{
|
||||
RectAuto = -3,
|
||||
SquareAuto = -2,
|
||||
ShapeAuto = -1,
|
||||
|
||||
Sq10x10 = 0,
|
||||
Sq12x12,
|
||||
Sq14x14,
|
||||
Sq16x16,
|
||||
Sq18x18,
|
||||
Sq20x20,
|
||||
Sq22x22,
|
||||
Sq24x24,
|
||||
Sq26x26,
|
||||
Sq32x32,
|
||||
Sq36x36,
|
||||
Sq40x40,
|
||||
Sq44x44,
|
||||
Sq48x48,
|
||||
Sq52x52,
|
||||
Sq64x64,
|
||||
Sq72x72,
|
||||
Sq80x80,
|
||||
Sq88x88,
|
||||
Sq96x96,
|
||||
Sq104x104,
|
||||
Sq120x120,
|
||||
Sq132x132,
|
||||
Sq144x144,
|
||||
|
||||
Rect8x18,
|
||||
Rect8x32,
|
||||
Rect12x26,
|
||||
Rect12x36,
|
||||
Rect16x36,
|
||||
Rect16x48,
|
||||
|
||||
Count
|
||||
}
|
||||
|
||||
public enum SymbolAttribute
|
||||
{
|
||||
SymbolRows,
|
||||
SymbolCols,
|
||||
DataRegionRows,
|
||||
DataRegionCols,
|
||||
HorizDataRegions,
|
||||
VertDataRegions,
|
||||
MappingMatrixRows,
|
||||
MappingMatrixCols,
|
||||
InterleavedBlocks,
|
||||
BlockErrorWords,
|
||||
BlockMaxCorrectable,
|
||||
SymbolDataWords,
|
||||
SymbolErrorWords,
|
||||
SymbolMaxCorrectable,
|
||||
}
|
||||
|
||||
public static class Symbol
|
||||
{
|
||||
public const SymbolSize SymbolSquareCount = SymbolSize.Rect8x18;
|
||||
/// (---------------------------------------------- square ------------------------------------------------------) (--- rectangular ---)
|
||||
static readonly int[] symbolRows = new int[] { 10, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144, 8, 8, 12, 12, 16, 16 };
|
||||
static readonly int[] symbolCols = new int[] { 10, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144, 18, 32, 26, 36, 36, 48 };
|
||||
static readonly int[] dataRegionRows = new int[] { 8, 10, 12, 14, 16, 18, 20, 22, 24, 14, 16, 18, 20, 22, 24, 14, 16, 18, 20, 22, 24, 18, 20, 22, 6, 6, 10, 10, 14, 14 };
|
||||
static readonly int[] dataRegionCols = new int[] { 8, 10, 12, 14, 16, 18, 20, 22, 24, 14, 16, 18, 20, 22, 24, 14, 16, 18, 20, 22, 24, 18, 20, 22, 16, 14, 24, 16, 16, 22 };
|
||||
static readonly int[] horizDataRegions = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 6, 6, 6, 1, 2, 1, 2, 2, 2 };
|
||||
static readonly int[] interleavedBlocks = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 6, 6, 8, 10, 1, 1, 1, 1, 1, 1 };
|
||||
static readonly int[] symbolDataWords = new int[] { 3, 5, 8, 12, 18, 22, 30, 36, 44, 62, 86, 114, 144, 174, 204, 280, 368, 456, 576, 696, 816, 1050, 1304, 1558, 5, 10, 16, 22, 32, 49 };
|
||||
static readonly int[] blockErrorWords = new int[] { 5, 7, 10, 12, 14, 18, 20, 24, 28, 36, 42, 48, 56, 68, 42, 56, 36, 48, 56, 68, 56, 68, 62, 62, 7, 11, 14, 18, 24, 28 };
|
||||
static readonly int[] blockMaxCorrectable = new int[] { 2, 3, 5, 6, 7, 9, 10, 12, 14, 18, 21, 24, 28, 34, 21, 28, 18, 24, 28, 34, 28, 34, 31, 31, 3, 5, 7, 9, 12, 14 };
|
||||
|
||||
/// <summary>
|
||||
/// Return a symbol attribute
|
||||
/// </summary>
|
||||
/// <param name="attribute">Symbol attribute</param>
|
||||
/// <param name="sizeId">Size ID (or index)</param>
|
||||
/// <returns>Sybol attribute value, -1 when undefined</returns>
|
||||
public static int GetSymbolAttribute(SymbolAttribute attribute, SymbolSize sizeId)
|
||||
{
|
||||
if (sizeId < 0 || sizeId >= SymbolSize.Count) return -1;
|
||||
|
||||
switch (attribute)
|
||||
{
|
||||
case SymbolAttribute.SymbolRows: return symbolRows[(int)sizeId];
|
||||
case SymbolAttribute.SymbolCols: return symbolCols[(int)sizeId];
|
||||
case SymbolAttribute.DataRegionRows: return dataRegionRows[(int)sizeId];
|
||||
case SymbolAttribute.DataRegionCols: return dataRegionCols[(int)sizeId];
|
||||
case SymbolAttribute.HorizDataRegions: return horizDataRegions[(int)sizeId];
|
||||
case SymbolAttribute.VertDataRegions: return (sizeId < SymbolSquareCount) ? horizDataRegions[(int)sizeId] : 1;
|
||||
case SymbolAttribute.MappingMatrixRows: return dataRegionRows[(int)sizeId] * GetSymbolAttribute(SymbolAttribute.VertDataRegions, sizeId);
|
||||
case SymbolAttribute.MappingMatrixCols: return dataRegionCols[(int)sizeId] * horizDataRegions[(int)sizeId];
|
||||
case SymbolAttribute.InterleavedBlocks: return interleavedBlocks[(int)sizeId];
|
||||
case SymbolAttribute.BlockErrorWords: return blockErrorWords[(int)sizeId];
|
||||
case SymbolAttribute.BlockMaxCorrectable: return blockMaxCorrectable[(int)sizeId];
|
||||
case SymbolAttribute.SymbolDataWords: return symbolDataWords[(int)sizeId];
|
||||
case SymbolAttribute.SymbolErrorWords: return blockErrorWords[(int)sizeId] * interleavedBlocks[(int)sizeId];
|
||||
case SymbolAttribute.SymbolMaxCorrectable: return blockMaxCorrectable[(int)sizeId] * interleavedBlocks[(int)sizeId];
|
||||
default: return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace DataMatrix4Net
|
||||
{
|
||||
public static class Utils
|
||||
{
|
||||
const byte EndOfMessage = (byte)129;
|
||||
|
||||
public static bool IsDigit(char znak)
|
||||
{
|
||||
if (znak >= '0' && znak <= '9') return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool IsAscii(char znak)
|
||||
{
|
||||
if (znak >= 0 && znak <= '~' + 1) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public static byte EncodeTwoDigits(char znak1, char znak2)
|
||||
{
|
||||
return (byte)(130 + 10 * (znak1 - '0') + znak2 - '0');
|
||||
}
|
||||
|
||||
public static byte[] MakeByteArray(string text)
|
||||
{
|
||||
IList<byte> bytes = new List<byte>();
|
||||
|
||||
int ix = 0;
|
||||
while (ix < text.Length)
|
||||
{
|
||||
if (ix < text.Length - 1 && Utils.IsDigit(text[ix]) && Utils.IsDigit(text[ix + 1]))
|
||||
{
|
||||
bytes.Add(Utils.EncodeTwoDigits(text[ix], text[ix + 1]));
|
||||
ix += 2;
|
||||
}
|
||||
else if (Utils.IsAscii(text[ix]))
|
||||
{
|
||||
bytes.Add((byte)(text[ix] + 1));
|
||||
ix++;
|
||||
}
|
||||
else
|
||||
{
|
||||
/// Skip non ASCII characters
|
||||
ix++;
|
||||
}
|
||||
}
|
||||
bytes.Add(EndOfMessage);
|
||||
|
||||
return bytes.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
public class ActivityLog
|
||||
{
|
||||
const int LinesCount = 50;
|
||||
|
||||
TextBox textBox;
|
||||
string[] lines;
|
||||
string activity;
|
||||
|
||||
public ActivityLog(TextBox textBox)
|
||||
{
|
||||
this.textBox = textBox;
|
||||
lines = new string[LinesCount];
|
||||
for (int i = 0; i < LinesCount; i++) lines[i] = string.Empty;
|
||||
}
|
||||
|
||||
public void Print(string log)
|
||||
{
|
||||
for (int i = LinesCount - 1; i > 0; i--) lines[i] = lines[i - 1];
|
||||
lines[0] = log;
|
||||
DisplayLines();
|
||||
}
|
||||
|
||||
private void DisplayLines()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (var line in lines) sb.AppendLine(line);
|
||||
textBox.Text = sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
-380
@@ -1,380 +0,0 @@
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
partial class DemoMainWnd
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
|
||||
this.getIDButton = new System.Windows.Forms.Button();
|
||||
this.getFramesButton = new System.Windows.Forms.Button();
|
||||
this.measurementLabel = new System.Windows.Forms.Label();
|
||||
this.stateLabel = new System.Windows.Forms.Label();
|
||||
this.capabilitiesLabel = new System.Windows.Forms.Label();
|
||||
this.getQuantityUnitsButton = new System.Windows.Forms.Button();
|
||||
this.getQuantityCaptionButton = new System.Windows.Forms.Button();
|
||||
this.getQuantitiesCountButton = new System.Windows.Forms.Button();
|
||||
this.getVolumeUnitsButton = new System.Windows.Forms.Button();
|
||||
this.getTimeUnitsButton = new System.Windows.Forms.Button();
|
||||
this.setStateButton = new System.Windows.Forms.Button();
|
||||
this.getStateButton = new System.Windows.Forms.Button();
|
||||
this.stopMeasurementButton = new System.Windows.Forms.Button();
|
||||
this.startMeasurementButton = new System.Windows.Forms.Button();
|
||||
this.closeConnectionButton = new System.Windows.Forms.Button();
|
||||
this.openConnectionButton = new System.Windows.Forms.Button();
|
||||
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
|
||||
this.logsTextBox = new System.Windows.Forms.TextBox();
|
||||
this.dataTabControl = new System.Windows.Forms.TabControl();
|
||||
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||
this.framesListView = new System.Windows.Forms.ListView();
|
||||
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
|
||||
this.splitContainer1.Panel1.SuspendLayout();
|
||||
this.splitContainer1.Panel2.SuspendLayout();
|
||||
this.splitContainer1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
|
||||
this.splitContainer2.Panel1.SuspendLayout();
|
||||
this.splitContainer2.Panel2.SuspendLayout();
|
||||
this.splitContainer2.SuspendLayout();
|
||||
this.dataTabControl.SuspendLayout();
|
||||
this.tabPage1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// splitContainer1
|
||||
//
|
||||
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
|
||||
this.splitContainer1.IsSplitterFixed = true;
|
||||
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
|
||||
this.splitContainer1.Name = "splitContainer1";
|
||||
//
|
||||
// splitContainer1.Panel1
|
||||
//
|
||||
this.splitContainer1.Panel1.Controls.Add(this.getIDButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.getFramesButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.measurementLabel);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.stateLabel);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.capabilitiesLabel);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.getQuantityUnitsButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.getQuantityCaptionButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.getQuantitiesCountButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.getVolumeUnitsButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.getTimeUnitsButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.setStateButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.getStateButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.stopMeasurementButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.startMeasurementButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.closeConnectionButton);
|
||||
this.splitContainer1.Panel1.Controls.Add(this.openConnectionButton);
|
||||
//
|
||||
// splitContainer1.Panel2
|
||||
//
|
||||
this.splitContainer1.Panel2.Controls.Add(this.splitContainer2);
|
||||
this.splitContainer1.Size = new System.Drawing.Size(826, 583);
|
||||
this.splitContainer1.SplitterDistance = 150;
|
||||
this.splitContainer1.TabIndex = 0;
|
||||
//
|
||||
// getIDButton
|
||||
//
|
||||
this.getIDButton.Location = new System.Drawing.Point(12, 480);
|
||||
this.getIDButton.Name = "getIDButton";
|
||||
this.getIDButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.getIDButton.TabIndex = 12;
|
||||
this.getIDButton.Text = "Get ID";
|
||||
this.getIDButton.UseVisualStyleBackColor = true;
|
||||
this.getIDButton.Click += new System.EventHandler(this.getIDButton_Click);
|
||||
//
|
||||
// getFramesButton
|
||||
//
|
||||
this.getFramesButton.Location = new System.Drawing.Point(12, 450);
|
||||
this.getFramesButton.Name = "getFramesButton";
|
||||
this.getFramesButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.getFramesButton.TabIndex = 11;
|
||||
this.getFramesButton.Text = "Get frames";
|
||||
this.getFramesButton.UseVisualStyleBackColor = true;
|
||||
this.getFramesButton.Click += new System.EventHandler(this.getFramesButton_Click);
|
||||
//
|
||||
// measurementLabel
|
||||
//
|
||||
this.measurementLabel.AutoSize = true;
|
||||
this.measurementLabel.Location = new System.Drawing.Point(12, 374);
|
||||
this.measurementLabel.Name = "measurementLabel";
|
||||
this.measurementLabel.Size = new System.Drawing.Size(74, 13);
|
||||
this.measurementLabel.TabIndex = 15;
|
||||
this.measurementLabel.Text = "Measurement:";
|
||||
//
|
||||
// stateLabel
|
||||
//
|
||||
this.stateLabel.AutoSize = true;
|
||||
this.stateLabel.Location = new System.Drawing.Point(12, 194);
|
||||
this.stateLabel.Name = "stateLabel";
|
||||
this.stateLabel.Size = new System.Drawing.Size(112, 13);
|
||||
this.stateLabel.TabIndex = 14;
|
||||
this.stateLabel.Text = "State and connection:";
|
||||
//
|
||||
// capabilitiesLabel
|
||||
//
|
||||
this.capabilitiesLabel.AutoSize = true;
|
||||
this.capabilitiesLabel.Location = new System.Drawing.Point(12, 9);
|
||||
this.capabilitiesLabel.Name = "capabilitiesLabel";
|
||||
this.capabilitiesLabel.Size = new System.Drawing.Size(63, 13);
|
||||
this.capabilitiesLabel.TabIndex = 13;
|
||||
this.capabilitiesLabel.Text = "Capabilities:";
|
||||
//
|
||||
// getQuantityUnitsButton
|
||||
//
|
||||
this.getQuantityUnitsButton.Location = new System.Drawing.Point(12, 145);
|
||||
this.getQuantityUnitsButton.Name = "getQuantityUnitsButton";
|
||||
this.getQuantityUnitsButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.getQuantityUnitsButton.TabIndex = 4;
|
||||
this.getQuantityUnitsButton.Text = "Get quantity units";
|
||||
this.getQuantityUnitsButton.UseVisualStyleBackColor = true;
|
||||
this.getQuantityUnitsButton.Click += new System.EventHandler(this.getQuantityUnitsButton_Click);
|
||||
//
|
||||
// getQuantityCaptionButton
|
||||
//
|
||||
this.getQuantityCaptionButton.Location = new System.Drawing.Point(12, 115);
|
||||
this.getQuantityCaptionButton.Name = "getQuantityCaptionButton";
|
||||
this.getQuantityCaptionButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.getQuantityCaptionButton.TabIndex = 3;
|
||||
this.getQuantityCaptionButton.Text = "Get quantity caption";
|
||||
this.getQuantityCaptionButton.UseVisualStyleBackColor = true;
|
||||
this.getQuantityCaptionButton.Click += new System.EventHandler(this.getQuantityCaptionButton_Click);
|
||||
//
|
||||
// getQuantitiesCountButton
|
||||
//
|
||||
this.getQuantitiesCountButton.Location = new System.Drawing.Point(12, 85);
|
||||
this.getQuantitiesCountButton.Name = "getQuantitiesCountButton";
|
||||
this.getQuantitiesCountButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.getQuantitiesCountButton.TabIndex = 2;
|
||||
this.getQuantitiesCountButton.Text = "Get quantities count";
|
||||
this.getQuantitiesCountButton.UseVisualStyleBackColor = true;
|
||||
this.getQuantitiesCountButton.Click += new System.EventHandler(this.getQuantitiesCountButton_Click);
|
||||
//
|
||||
// getVolumeUnitsButton
|
||||
//
|
||||
this.getVolumeUnitsButton.Location = new System.Drawing.Point(12, 55);
|
||||
this.getVolumeUnitsButton.Name = "getVolumeUnitsButton";
|
||||
this.getVolumeUnitsButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.getVolumeUnitsButton.TabIndex = 1;
|
||||
this.getVolumeUnitsButton.Text = "Get volume units";
|
||||
this.getVolumeUnitsButton.UseVisualStyleBackColor = true;
|
||||
this.getVolumeUnitsButton.Click += new System.EventHandler(this.getVolumeUnitsButton_Click);
|
||||
//
|
||||
// getTimeUnitsButton
|
||||
//
|
||||
this.getTimeUnitsButton.Location = new System.Drawing.Point(12, 25);
|
||||
this.getTimeUnitsButton.Name = "getTimeUnitsButton";
|
||||
this.getTimeUnitsButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.getTimeUnitsButton.TabIndex = 0;
|
||||
this.getTimeUnitsButton.Text = "Get time units";
|
||||
this.getTimeUnitsButton.UseVisualStyleBackColor = true;
|
||||
this.getTimeUnitsButton.Click += new System.EventHandler(this.getTimeUnitsButton_Click);
|
||||
//
|
||||
// setStateButton
|
||||
//
|
||||
this.setStateButton.Location = new System.Drawing.Point(12, 315);
|
||||
this.setStateButton.Name = "setStateButton";
|
||||
this.setStateButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.setStateButton.TabIndex = 8;
|
||||
this.setStateButton.Text = "Set state";
|
||||
this.setStateButton.UseVisualStyleBackColor = true;
|
||||
this.setStateButton.Click += new System.EventHandler(this.setStateButton_Click);
|
||||
//
|
||||
// getStateButton
|
||||
//
|
||||
this.getStateButton.Location = new System.Drawing.Point(12, 285);
|
||||
this.getStateButton.Name = "getStateButton";
|
||||
this.getStateButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.getStateButton.TabIndex = 7;
|
||||
this.getStateButton.Text = "Get state";
|
||||
this.getStateButton.UseVisualStyleBackColor = true;
|
||||
this.getStateButton.Click += new System.EventHandler(this.getStateButton_Click);
|
||||
//
|
||||
// stopMeasurementButton
|
||||
//
|
||||
this.stopMeasurementButton.Location = new System.Drawing.Point(12, 420);
|
||||
this.stopMeasurementButton.Name = "stopMeasurementButton";
|
||||
this.stopMeasurementButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.stopMeasurementButton.TabIndex = 10;
|
||||
this.stopMeasurementButton.Text = "Stop measurement";
|
||||
this.stopMeasurementButton.UseVisualStyleBackColor = true;
|
||||
this.stopMeasurementButton.Click += new System.EventHandler(this.stopMeasurementButton_Click);
|
||||
//
|
||||
// startMeasurementButton
|
||||
//
|
||||
this.startMeasurementButton.Location = new System.Drawing.Point(12, 390);
|
||||
this.startMeasurementButton.Name = "startMeasurementButton";
|
||||
this.startMeasurementButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.startMeasurementButton.TabIndex = 9;
|
||||
this.startMeasurementButton.Text = "Start measurement";
|
||||
this.startMeasurementButton.UseVisualStyleBackColor = true;
|
||||
this.startMeasurementButton.Click += new System.EventHandler(this.startMeasurementButton_Click);
|
||||
//
|
||||
// closeConnectionButton
|
||||
//
|
||||
this.closeConnectionButton.Location = new System.Drawing.Point(12, 240);
|
||||
this.closeConnectionButton.Name = "closeConnectionButton";
|
||||
this.closeConnectionButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.closeConnectionButton.TabIndex = 6;
|
||||
this.closeConnectionButton.Text = "Close connection";
|
||||
this.closeConnectionButton.UseVisualStyleBackColor = true;
|
||||
this.closeConnectionButton.Click += new System.EventHandler(this.closeConnectionButton_Click);
|
||||
//
|
||||
// openConnectionButton
|
||||
//
|
||||
this.openConnectionButton.Location = new System.Drawing.Point(12, 210);
|
||||
this.openConnectionButton.Name = "openConnectionButton";
|
||||
this.openConnectionButton.Size = new System.Drawing.Size(128, 24);
|
||||
this.openConnectionButton.TabIndex = 5;
|
||||
this.openConnectionButton.Text = "Open connection";
|
||||
this.openConnectionButton.UseVisualStyleBackColor = true;
|
||||
this.openConnectionButton.Click += new System.EventHandler(this.openConnectionButton_Click);
|
||||
//
|
||||
// splitContainer2
|
||||
//
|
||||
this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.splitContainer2.Location = new System.Drawing.Point(0, 0);
|
||||
this.splitContainer2.Name = "splitContainer2";
|
||||
this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
||||
//
|
||||
// splitContainer2.Panel1
|
||||
//
|
||||
this.splitContainer2.Panel1.Controls.Add(this.logsTextBox);
|
||||
//
|
||||
// splitContainer2.Panel2
|
||||
//
|
||||
this.splitContainer2.Panel2.Controls.Add(this.dataTabControl);
|
||||
this.splitContainer2.Size = new System.Drawing.Size(672, 583);
|
||||
this.splitContainer2.SplitterDistance = 222;
|
||||
this.splitContainer2.TabIndex = 0;
|
||||
//
|
||||
// logsTextBox
|
||||
//
|
||||
this.logsTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.logsTextBox.Location = new System.Drawing.Point(0, 0);
|
||||
this.logsTextBox.Multiline = true;
|
||||
this.logsTextBox.Name = "logsTextBox";
|
||||
this.logsTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.logsTextBox.Size = new System.Drawing.Size(672, 222);
|
||||
this.logsTextBox.TabIndex = 0;
|
||||
//
|
||||
// dataTabControl
|
||||
//
|
||||
this.dataTabControl.Controls.Add(this.tabPage1);
|
||||
this.dataTabControl.Controls.Add(this.tabPage2);
|
||||
this.dataTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.dataTabControl.Location = new System.Drawing.Point(0, 0);
|
||||
this.dataTabControl.Name = "dataTabControl";
|
||||
this.dataTabControl.SelectedIndex = 0;
|
||||
this.dataTabControl.Size = new System.Drawing.Size(672, 357);
|
||||
this.dataTabControl.TabIndex = 0;
|
||||
//
|
||||
// tabPage1
|
||||
//
|
||||
this.tabPage1.Controls.Add(this.framesListView);
|
||||
this.tabPage1.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPage1.Name = "tabPage1";
|
||||
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPage1.Size = new System.Drawing.Size(664, 331);
|
||||
this.tabPage1.TabIndex = 0;
|
||||
this.tabPage1.Text = "Transferred frames";
|
||||
this.tabPage1.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// framesListView
|
||||
//
|
||||
this.framesListView.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.framesListView.GridLines = true;
|
||||
this.framesListView.Location = new System.Drawing.Point(3, 3);
|
||||
this.framesListView.Name = "framesListView";
|
||||
this.framesListView.Size = new System.Drawing.Size(658, 325);
|
||||
this.framesListView.TabIndex = 0;
|
||||
this.framesListView.UseCompatibleStateImageBehavior = false;
|
||||
this.framesListView.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// tabPage2
|
||||
//
|
||||
this.tabPage2.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPage2.Name = "tabPage2";
|
||||
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPage2.Size = new System.Drawing.Size(664, 331);
|
||||
this.tabPage2.TabIndex = 1;
|
||||
this.tabPage2.Text = "Graph";
|
||||
this.tabPage2.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// DemoMainWnd
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(826, 583);
|
||||
this.Controls.Add(this.splitContainer1);
|
||||
this.Name = "DemoMainWnd";
|
||||
this.Text = "Datastream interface test";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DemoMainWnd_FormClosing);
|
||||
this.splitContainer1.Panel1.ResumeLayout(false);
|
||||
this.splitContainer1.Panel1.PerformLayout();
|
||||
this.splitContainer1.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
|
||||
this.splitContainer1.ResumeLayout(false);
|
||||
this.splitContainer2.Panel1.ResumeLayout(false);
|
||||
this.splitContainer2.Panel1.PerformLayout();
|
||||
this.splitContainer2.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
|
||||
this.splitContainer2.ResumeLayout(false);
|
||||
this.dataTabControl.ResumeLayout(false);
|
||||
this.tabPage1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.SplitContainer splitContainer1;
|
||||
private System.Windows.Forms.Button openConnectionButton;
|
||||
private System.Windows.Forms.Button closeConnectionButton;
|
||||
private System.Windows.Forms.Button stopMeasurementButton;
|
||||
private System.Windows.Forms.Button startMeasurementButton;
|
||||
private System.Windows.Forms.Button setStateButton;
|
||||
private System.Windows.Forms.Button getStateButton;
|
||||
private System.Windows.Forms.Button getQuantityUnitsButton;
|
||||
private System.Windows.Forms.Button getQuantityCaptionButton;
|
||||
private System.Windows.Forms.Button getQuantitiesCountButton;
|
||||
private System.Windows.Forms.Button getVolumeUnitsButton;
|
||||
private System.Windows.Forms.Button getTimeUnitsButton;
|
||||
private System.Windows.Forms.Label measurementLabel;
|
||||
private System.Windows.Forms.Label stateLabel;
|
||||
private System.Windows.Forms.Label capabilitiesLabel;
|
||||
private System.Windows.Forms.Button getIDButton;
|
||||
private System.Windows.Forms.Button getFramesButton;
|
||||
private System.Windows.Forms.SplitContainer splitContainer2;
|
||||
private System.Windows.Forms.TextBox logsTextBox;
|
||||
private System.Windows.Forms.TabControl dataTabControl;
|
||||
private System.Windows.Forms.TabPage tabPage1;
|
||||
private System.Windows.Forms.ListView framesListView;
|
||||
private System.Windows.Forms.TabPage tabPage2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,292 +0,0 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using DataStreamInterface;
|
||||
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
public partial class DemoMainWnd : Form
|
||||
{
|
||||
IDataStreamMeter dataStreamMeter;
|
||||
|
||||
ActivityLog activityLog;
|
||||
|
||||
Unit timeUnits;
|
||||
Unit volumeUnits;
|
||||
int quantitiesCount;
|
||||
string[] quantityCaption;
|
||||
Unit[] quantityUnit;
|
||||
|
||||
Int64 storedFramesCount;
|
||||
DataFrame[] transferredFrames;
|
||||
|
||||
public DemoMainWnd() : this(null) { }
|
||||
|
||||
public DemoMainWnd(IDataStreamMeter dataStreamMeter)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.dataStreamMeter = dataStreamMeter;
|
||||
activityLog = new ActivityLog(logsTextBox);
|
||||
|
||||
framesListView.Columns.Add("ID", 100);
|
||||
framesListView.Columns.Add("Time", 100);
|
||||
framesListView.Columns.Add("Volume", 100);
|
||||
framesListView.Columns.Add("Additional quantities", 300);
|
||||
framesListView.ListViewItemSorter = new LviIDComparer();
|
||||
}
|
||||
|
||||
void ShowNoMeterInterfaceMessage()
|
||||
{
|
||||
MessageBox.Show("No datastream meter interface");
|
||||
}
|
||||
|
||||
private void getTimeUnitsButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
timeUnits = dataStreamMeter.GetTimeUnits();
|
||||
activityLog.Print(string.Format("Time units are {0}", timeUnits));
|
||||
}
|
||||
}
|
||||
|
||||
private void getVolumeUnitsButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
volumeUnits = dataStreamMeter.GetVolumeUnits();
|
||||
activityLog.Print(string.Format("Volume units are {0}", volumeUnits));
|
||||
}
|
||||
}
|
||||
|
||||
private void getQuantitiesCountButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
int quantitesCountOri = quantitiesCount;
|
||||
quantitiesCount = dataStreamMeter.GetQuantitiesCount();
|
||||
activityLog.Print(string.Format("There are {0} additional quantites", quantitiesCount));
|
||||
|
||||
if (quantitesCountOri == 0)
|
||||
{
|
||||
quantityUnit = new Unit[quantitiesCount];
|
||||
quantityCaption = new string[quantitiesCount];
|
||||
for (int i = 0; i < quantitiesCount; i++) quantityCaption[i] = string.Empty;
|
||||
}
|
||||
else if (quantitiesCount != quantitesCountOri)
|
||||
{
|
||||
quantityUnit = new Unit[quantitiesCount];
|
||||
quantityCaption = new string[quantitiesCount];
|
||||
for (int i = 0; i < quantitiesCount; i++) quantityCaption[i] = string.Empty;
|
||||
|
||||
activityLog.Print(string.Format("Quantities count changed during operation"));
|
||||
MessageBox.Show("Quantities count changed during operation", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getQuantityCaptionButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
GetIntegerNumberDlg dlg = new GetIntegerNumberDlg(string.Format("Enter index {0} .. {1}", 0, quantitiesCount - 1), 0, quantitiesCount - 1);
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
quantityCaption[dlg.Number] = dataStreamMeter.GetQuantityCaption(dlg.Number);
|
||||
activityLog.Print(string.Format("Caption of quantity #{0} is {1}", dlg.Number, quantityCaption[dlg.Number]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getQuantityUnitsButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
GetIntegerNumberDlg dlg = new GetIntegerNumberDlg(string.Format("Enter index {0} .. {1}", 0, quantitiesCount - 1), 0, quantitiesCount - 1);
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
quantityUnit[dlg.Number] = dataStreamMeter.GetQuantityUnits(dlg.Number);
|
||||
activityLog.Print(string.Format("Units of quantity #{0} are {1}", dlg.Number, quantityUnit[dlg.Number]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void openConnectionButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
string meterId;
|
||||
if (dataStreamMeter.OpenConnection(0, "no connection parameters", out meterId))
|
||||
{
|
||||
activityLog.Print(string.Format("Connection established, meter ID is {0}", meterId));
|
||||
}
|
||||
else
|
||||
{
|
||||
activityLog.Print("Failed to establish a connection");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void closeConnectionButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
if (dataStreamMeter.CloseConnection(0))
|
||||
{
|
||||
framesListView.Items.Clear();
|
||||
activityLog.Print("Connection closed");
|
||||
}
|
||||
else
|
||||
{
|
||||
activityLog.Print("Failed to close the connection");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DemoMainWnd_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
{
|
||||
dataStreamMeter.Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
private void getStateButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
int state;
|
||||
string parameter;
|
||||
if (dataStreamMeter.GetState(0, out state, out parameter))
|
||||
{
|
||||
activityLog.Print(string.Format("Water meter state is {0} / {1}", state, parameter));
|
||||
}
|
||||
else
|
||||
{
|
||||
activityLog.Print("Failed to obtain the water meter state");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setStateButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
GetStateDlg dlg = new GetStateDlg();
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
if (dataStreamMeter.SetState(0, dlg.State, dlg.Parameter))
|
||||
{
|
||||
activityLog.Print(string.Format("Water meter state set to {0} / {1}", dlg.State, dlg.Parameter));
|
||||
}
|
||||
else
|
||||
{
|
||||
activityLog.Print(string.Format("Failed to set the water meter state to {0} / {1}", dlg.State, dlg.Parameter));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void startMeasurementButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
if (dataStreamMeter.StartMeasurement(0))
|
||||
{
|
||||
framesListView.Items.Clear();
|
||||
activityLog.Print(string.Format("Measurement started"));
|
||||
}
|
||||
else
|
||||
{
|
||||
activityLog.Print("Failed to start a measurement");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void stopMeasurementButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
if (dataStreamMeter.StopMeasurement(0, out storedFramesCount))
|
||||
{
|
||||
framesListView.Items.Clear();
|
||||
activityLog.Print(string.Format("Measurement sopped, {0} frames acquired", storedFramesCount));
|
||||
}
|
||||
else
|
||||
{
|
||||
activityLog.Print("Failed to stop the measurement");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getFramesButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
GetFrameBoundariesDlg dlg = new GetFrameBoundariesDlg("Enter frames range boundaries", 0, storedFramesCount - 1);
|
||||
if (dlg.ShowDialog() != DialogResult.OK) return;
|
||||
DataFrame[] frames = dataStreamMeter.GetFrames(0, dlg.From, Convert.ToInt32(dlg.To - dlg.From + 1));
|
||||
{
|
||||
foreach (var frame in frames)
|
||||
{
|
||||
if (frame != null) framesListView.Items.Add(GetListViewItem(frame));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void getIDButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (dataStreamMeter == null)
|
||||
ShowNoMeterInterfaceMessage();
|
||||
else
|
||||
{
|
||||
GetDblValueDlg dlg = new GetDblValueDlg("Enter time in seconds");
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
Int64 id = dataStreamMeter.GetID(0, dlg.DblValue);
|
||||
activityLog.Print(string.Format("GetID({0}) returned {1}", dlg.DblValue, id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ListViewItem GetListViewItem(DataFrame frame)
|
||||
{
|
||||
ListViewItem lvi = new ListViewItem(frame.ID.ToString());
|
||||
lvi.SubItems.Add(frame.Time.ToString());
|
||||
lvi.SubItems.Add(frame.Volume.ToString());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (var quantity in frame.Quantity)
|
||||
{
|
||||
sb.Append(quantity.ToString());
|
||||
sb.Append(" ");
|
||||
}
|
||||
lvi.SubItems.Add(sb.ToString());
|
||||
lvi.Tag = frame;
|
||||
return lvi;
|
||||
}
|
||||
}
|
||||
}
|
||||
-88
@@ -1,88 +0,0 @@
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
partial class GetDblValueDlg
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.valueTextBox = new System.Windows.Forms.TextBox();
|
||||
this.okButton = new System.Windows.Forms.Button();
|
||||
this.cancelButton = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// valueTextBox
|
||||
//
|
||||
this.valueTextBox.Location = new System.Drawing.Point(35, 20);
|
||||
this.valueTextBox.Name = "valueTextBox";
|
||||
this.valueTextBox.Size = new System.Drawing.Size(94, 20);
|
||||
this.valueTextBox.TabIndex = 0;
|
||||
//
|
||||
// okButton
|
||||
//
|
||||
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.okButton.Location = new System.Drawing.Point(216, 16);
|
||||
this.okButton.Name = "okButton";
|
||||
this.okButton.Size = new System.Drawing.Size(75, 29);
|
||||
this.okButton.TabIndex = 1;
|
||||
this.okButton.Text = "OK";
|
||||
this.okButton.UseVisualStyleBackColor = true;
|
||||
this.okButton.Click += new System.EventHandler(this.okButton_Click);
|
||||
//
|
||||
// cancelButton
|
||||
//
|
||||
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.cancelButton.Location = new System.Drawing.Point(306, 16);
|
||||
this.cancelButton.Name = "cancelButton";
|
||||
this.cancelButton.Size = new System.Drawing.Size(75, 29);
|
||||
this.cancelButton.TabIndex = 2;
|
||||
this.cancelButton.Text = "Cancel";
|
||||
this.cancelButton.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// GetFlowDlg
|
||||
//
|
||||
this.AcceptButton = this.okButton;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.cancelButton;
|
||||
this.ClientSize = new System.Drawing.Size(396, 58);
|
||||
this.Controls.Add(this.cancelButton);
|
||||
this.Controls.Add(this.okButton);
|
||||
this.Controls.Add(this.valueTextBox);
|
||||
this.Name = "GetFlowDlg";
|
||||
this.Text = "Enter flow";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox valueTextBox;
|
||||
private System.Windows.Forms.Button okButton;
|
||||
private System.Windows.Forms.Button cancelButton;
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
public partial class GetDblValueDlg : Form
|
||||
{
|
||||
public double DblValue;
|
||||
|
||||
double lowerLimit;
|
||||
double upperLimit;
|
||||
|
||||
|
||||
public GetDblValueDlg()
|
||||
: this("Enter flow in [m3/h] please")
|
||||
{
|
||||
}
|
||||
|
||||
public GetDblValueDlg(string title)
|
||||
: this(title, 0, 100.0)
|
||||
{
|
||||
}
|
||||
|
||||
public GetDblValueDlg(string title, double lowerLimit, double upperLimit)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Text = title;
|
||||
this.lowerLimit = lowerLimit;
|
||||
this.upperLimit = upperLimit;
|
||||
}
|
||||
|
||||
|
||||
private void okButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
double val;
|
||||
if (TryParseUDouble(valueTextBox.Text, out val))
|
||||
{
|
||||
DblValue = val;
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Invalid value");
|
||||
DialogResult = DialogResult.None;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse an unsigned double number
|
||||
/// </summary>
|
||||
bool TryParseUDouble(string text, out double result)
|
||||
{
|
||||
return double.TryParse(text, NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out result) ||
|
||||
double.TryParse(text, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,126 +0,0 @@
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
partial class GetFrameBoundariesDlg
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.fromTextBox = new System.Windows.Forms.TextBox();
|
||||
this.okButton = new System.Windows.Forms.Button();
|
||||
this.cancelButton = new System.Windows.Forms.Button();
|
||||
this.toTextBox = new System.Windows.Forms.TextBox();
|
||||
this.fromLabel = new System.Windows.Forms.Label();
|
||||
this.toLabel = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// fromTextBox
|
||||
//
|
||||
this.fromTextBox.Location = new System.Drawing.Point(89, 16);
|
||||
this.fromTextBox.Name = "fromTextBox";
|
||||
this.fromTextBox.Size = new System.Drawing.Size(100, 20);
|
||||
this.fromTextBox.TabIndex = 0;
|
||||
//
|
||||
// okButton
|
||||
//
|
||||
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.okButton.Location = new System.Drawing.Point(225, 24);
|
||||
this.okButton.Name = "okButton";
|
||||
this.okButton.Size = new System.Drawing.Size(75, 36);
|
||||
this.okButton.TabIndex = 1;
|
||||
this.okButton.Text = "OK";
|
||||
this.okButton.UseVisualStyleBackColor = true;
|
||||
this.okButton.Click += new System.EventHandler(this.okButton_Click);
|
||||
//
|
||||
// cancelButton
|
||||
//
|
||||
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.cancelButton.Location = new System.Drawing.Point(316, 24);
|
||||
this.cancelButton.Name = "cancelButton";
|
||||
this.cancelButton.Size = new System.Drawing.Size(75, 36);
|
||||
this.cancelButton.TabIndex = 2;
|
||||
this.cancelButton.Text = "Cancel";
|
||||
this.cancelButton.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// toTextBox
|
||||
//
|
||||
this.toTextBox.Location = new System.Drawing.Point(89, 46);
|
||||
this.toTextBox.Name = "toTextBox";
|
||||
this.toTextBox.Size = new System.Drawing.Size(100, 20);
|
||||
this.toTextBox.TabIndex = 3;
|
||||
//
|
||||
// fromLabel
|
||||
//
|
||||
this.fromLabel.AutoSize = true;
|
||||
this.fromLabel.Location = new System.Drawing.Point(12, 19);
|
||||
this.fromLabel.Name = "fromLabel";
|
||||
this.fromLabel.Size = new System.Drawing.Size(30, 13);
|
||||
this.fromLabel.TabIndex = 4;
|
||||
this.fromLabel.Text = "From";
|
||||
//
|
||||
// toLabel
|
||||
//
|
||||
this.toLabel.AutoSize = true;
|
||||
this.toLabel.Location = new System.Drawing.Point(12, 49);
|
||||
this.toLabel.Name = "toLabel";
|
||||
this.toLabel.Size = new System.Drawing.Size(20, 13);
|
||||
this.toLabel.TabIndex = 5;
|
||||
this.toLabel.Text = "To";
|
||||
//
|
||||
// GetFrameBoundariesDlg
|
||||
//
|
||||
this.AcceptButton = this.okButton;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoSize = true;
|
||||
this.CancelButton = this.cancelButton;
|
||||
this.ClientSize = new System.Drawing.Size(419, 79);
|
||||
this.ControlBox = false;
|
||||
this.Controls.Add(this.toLabel);
|
||||
this.Controls.Add(this.fromLabel);
|
||||
this.Controls.Add(this.toTextBox);
|
||||
this.Controls.Add(this.cancelButton);
|
||||
this.Controls.Add(this.okButton);
|
||||
this.Controls.Add(this.fromTextBox);
|
||||
this.Name = "GetFrameBoundariesDlg";
|
||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Enter frames range boundaries";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox fromTextBox;
|
||||
private System.Windows.Forms.Button okButton;
|
||||
private System.Windows.Forms.Button cancelButton;
|
||||
private System.Windows.Forms.TextBox toTextBox;
|
||||
private System.Windows.Forms.Label fromLabel;
|
||||
private System.Windows.Forms.Label toLabel;
|
||||
}
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
public partial class GetFrameBoundariesDlg : Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Integer number entered in this form
|
||||
/// </summary>
|
||||
public Int64 From;
|
||||
public Int64 To;
|
||||
|
||||
Int64 lowerLimit;
|
||||
Int64 upperLimit;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor
|
||||
/// </summary>
|
||||
public GetFrameBoundariesDlg()
|
||||
: this("Enter state please")
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
public GetFrameBoundariesDlg(string title)
|
||||
: this(title, Int64.MinValue, Int64.MaxValue)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title, limits and non-empty initial value.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
/// <param name="lowerLimit">Lower limit</param>
|
||||
/// <param name="upperLimit">Upper limit</param>
|
||||
/// <param name="initialValue">Initial value</param>
|
||||
public GetFrameBoundariesDlg(string title, Int64 lowerLimit, Int64 upperLimit, int initialValue)
|
||||
: this(title, lowerLimit, upperLimit)
|
||||
{
|
||||
fromTextBox.Text = initialValue.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title and lower/upper limits.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
/// <param name="lowerLimit">Lower limit</param>
|
||||
/// <param name="upperLimit">Upper limit</param>
|
||||
public GetFrameBoundariesDlg(string title, Int64 lowerLimit, Int64 upperLimit)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Text = title;
|
||||
this.lowerLimit = lowerLimit;
|
||||
this.upperLimit = upperLimit;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// OK button handler that verifies validity of the entered value.
|
||||
/// </summary>
|
||||
private void okButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
Int64 from;
|
||||
Int64 to;
|
||||
if (Int64.TryParse(fromTextBox.Text, out from) && from >= lowerLimit && from <= upperLimit &&
|
||||
Int64.TryParse(toTextBox.Text, out to) && to >= lowerLimit && to <= upperLimit &&
|
||||
to >= from && to < from + Int32.MaxValue)
|
||||
{
|
||||
From = from;
|
||||
To = to;
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
string message = (lowerLimit != 0 || upperLimit != Int32.MaxValue)
|
||||
? string.Format("Invalid boundaries ({0}..{1})", lowerLimit, upperLimit)
|
||||
: "Invalid boundaries";
|
||||
MessageBox.Show(message);
|
||||
DialogResult = DialogResult.None; /// Prevent closing this window
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
partial class GetIntegerNumberDlg
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.numberTextBox = new System.Windows.Forms.TextBox();
|
||||
this.okButton = new System.Windows.Forms.Button();
|
||||
this.cancelButton = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// numberTextBox
|
||||
//
|
||||
this.numberTextBox.Location = new System.Drawing.Point(36, 16);
|
||||
this.numberTextBox.Name = "numberTextBox";
|
||||
this.numberTextBox.Size = new System.Drawing.Size(100, 20);
|
||||
this.numberTextBox.TabIndex = 0;
|
||||
//
|
||||
// okButton
|
||||
//
|
||||
this.okButton.Location = new System.Drawing.Point(174, 7);
|
||||
this.okButton.Name = "okButton";
|
||||
this.okButton.Size = new System.Drawing.Size(75, 36);
|
||||
this.okButton.TabIndex = 1;
|
||||
this.okButton.Text = "OK";
|
||||
this.okButton.UseVisualStyleBackColor = true;
|
||||
this.okButton.Click += new System.EventHandler(this.okButton_Click);
|
||||
//
|
||||
// cancelButton
|
||||
//
|
||||
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.cancelButton.Location = new System.Drawing.Point(265, 7);
|
||||
this.cancelButton.Name = "cancelButton";
|
||||
this.cancelButton.Size = new System.Drawing.Size(75, 36);
|
||||
this.cancelButton.TabIndex = 2;
|
||||
this.cancelButton.Text = "Cancel";
|
||||
this.cancelButton.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// GetIntegerNumberDlg
|
||||
//
|
||||
this.AcceptButton = this.okButton;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoSize = true;
|
||||
this.CancelButton = this.cancelButton;
|
||||
this.ClientSize = new System.Drawing.Size(363, 50);
|
||||
this.ControlBox = false;
|
||||
this.Controls.Add(this.cancelButton);
|
||||
this.Controls.Add(this.okButton);
|
||||
this.Controls.Add(this.numberTextBox);
|
||||
this.Name = "GetIntegerNumberDlg";
|
||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Enter integer number please";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox numberTextBox;
|
||||
private System.Windows.Forms.Button okButton;
|
||||
private System.Windows.Forms.Button cancelButton;
|
||||
}
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
public partial class GetIntegerNumberDlg : Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Integer number entered in this form
|
||||
/// </summary>
|
||||
public int Number;
|
||||
|
||||
int lowerLimit;
|
||||
int upperLimit;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor
|
||||
/// </summary>
|
||||
public GetIntegerNumberDlg()
|
||||
: this("Enter integer number please")
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
public GetIntegerNumberDlg(string title)
|
||||
: this(title, Int32.MinValue, Int32.MaxValue)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title, limits and non-empty initial value.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
/// <param name="lowerLimit">Lower limit</param>
|
||||
/// <param name="upperLimit">Upper limit</param>
|
||||
/// <param name="initialValue">Initial value</param>
|
||||
public GetIntegerNumberDlg(string title, int lowerLimit, int upperLimit, int initialValue)
|
||||
: this(title, lowerLimit, upperLimit)
|
||||
{
|
||||
numberTextBox.Text = initialValue.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title and lower/upper limits.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
/// <param name="lowerLimit">Lower limit</param>
|
||||
/// <param name="upperLimit">Upper limit</param>
|
||||
public GetIntegerNumberDlg(string title, int lowerLimit, int upperLimit)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Text = title;
|
||||
this.lowerLimit = lowerLimit;
|
||||
this.upperLimit = upperLimit;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// OK button handler that verifies validity of the entered value.
|
||||
/// </summary>
|
||||
private void okButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
int number;
|
||||
if (int.TryParse(numberTextBox.Text, out number) && number >= lowerLimit && number <= upperLimit)
|
||||
{
|
||||
Number = number;
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
string message = (lowerLimit != Int32.MinValue || upperLimit != Int32.MaxValue)
|
||||
? string.Format("Invalid integer number ({0}..{1})", lowerLimit, upperLimit)
|
||||
: "Invalid integer number";
|
||||
MessageBox.Show(message);
|
||||
DialogResult = DialogResult.None; /// Prevent closing this window
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
-126
@@ -1,126 +0,0 @@
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
partial class GetStateDlg
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.stateTextBox = new System.Windows.Forms.TextBox();
|
||||
this.okButton = new System.Windows.Forms.Button();
|
||||
this.cancelButton = new System.Windows.Forms.Button();
|
||||
this.parameterTextBox = new System.Windows.Forms.TextBox();
|
||||
this.stateLabel = new System.Windows.Forms.Label();
|
||||
this.parameterLabel = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// stateTextBox
|
||||
//
|
||||
this.stateTextBox.Location = new System.Drawing.Point(89, 16);
|
||||
this.stateTextBox.Name = "stateTextBox";
|
||||
this.stateTextBox.Size = new System.Drawing.Size(100, 20);
|
||||
this.stateTextBox.TabIndex = 0;
|
||||
//
|
||||
// okButton
|
||||
//
|
||||
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.okButton.Location = new System.Drawing.Point(225, 24);
|
||||
this.okButton.Name = "okButton";
|
||||
this.okButton.Size = new System.Drawing.Size(75, 36);
|
||||
this.okButton.TabIndex = 1;
|
||||
this.okButton.Text = "OK";
|
||||
this.okButton.UseVisualStyleBackColor = true;
|
||||
this.okButton.Click += new System.EventHandler(this.okButton_Click);
|
||||
//
|
||||
// cancelButton
|
||||
//
|
||||
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.cancelButton.Location = new System.Drawing.Point(316, 24);
|
||||
this.cancelButton.Name = "cancelButton";
|
||||
this.cancelButton.Size = new System.Drawing.Size(75, 36);
|
||||
this.cancelButton.TabIndex = 2;
|
||||
this.cancelButton.Text = "Cancel";
|
||||
this.cancelButton.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// parameterTextBox
|
||||
//
|
||||
this.parameterTextBox.Location = new System.Drawing.Point(89, 46);
|
||||
this.parameterTextBox.Name = "parameterTextBox";
|
||||
this.parameterTextBox.Size = new System.Drawing.Size(100, 20);
|
||||
this.parameterTextBox.TabIndex = 3;
|
||||
//
|
||||
// stateLabel
|
||||
//
|
||||
this.stateLabel.AutoSize = true;
|
||||
this.stateLabel.Location = new System.Drawing.Point(12, 19);
|
||||
this.stateLabel.Name = "stateLabel";
|
||||
this.stateLabel.Size = new System.Drawing.Size(32, 13);
|
||||
this.stateLabel.TabIndex = 4;
|
||||
this.stateLabel.Text = "State";
|
||||
//
|
||||
// parameterLabel
|
||||
//
|
||||
this.parameterLabel.AutoSize = true;
|
||||
this.parameterLabel.Location = new System.Drawing.Point(12, 49);
|
||||
this.parameterLabel.Name = "parameterLabel";
|
||||
this.parameterLabel.Size = new System.Drawing.Size(55, 13);
|
||||
this.parameterLabel.TabIndex = 5;
|
||||
this.parameterLabel.Text = "Parameter";
|
||||
//
|
||||
// GetStateDlg
|
||||
//
|
||||
this.AcceptButton = this.okButton;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoSize = true;
|
||||
this.CancelButton = this.cancelButton;
|
||||
this.ClientSize = new System.Drawing.Size(419, 79);
|
||||
this.ControlBox = false;
|
||||
this.Controls.Add(this.parameterLabel);
|
||||
this.Controls.Add(this.stateLabel);
|
||||
this.Controls.Add(this.parameterTextBox);
|
||||
this.Controls.Add(this.cancelButton);
|
||||
this.Controls.Add(this.okButton);
|
||||
this.Controls.Add(this.stateTextBox);
|
||||
this.Name = "GetStateDlg";
|
||||
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Enter state please";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox stateTextBox;
|
||||
private System.Windows.Forms.Button okButton;
|
||||
private System.Windows.Forms.Button cancelButton;
|
||||
private System.Windows.Forms.TextBox parameterTextBox;
|
||||
private System.Windows.Forms.Label stateLabel;
|
||||
private System.Windows.Forms.Label parameterLabel;
|
||||
}
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
public partial class GetStateDlg : Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Integer number entered in this form
|
||||
/// </summary>
|
||||
public int State;
|
||||
public string Parameter;
|
||||
|
||||
int lowerLimit;
|
||||
int upperLimit;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor
|
||||
/// </summary>
|
||||
public GetStateDlg()
|
||||
: this("Enter state please")
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
public GetStateDlg(string title)
|
||||
: this(title, Int32.MinValue, Int32.MaxValue)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title, limits and non-empty initial value.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
/// <param name="lowerLimit">Lower limit</param>
|
||||
/// <param name="upperLimit">Upper limit</param>
|
||||
/// <param name="initialValue">Initial value</param>
|
||||
public GetStateDlg(string title, int lowerLimit, int upperLimit, int initialValue)
|
||||
: this(title, lowerLimit, upperLimit)
|
||||
{
|
||||
stateTextBox.Text = initialValue.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constructor with a custom window title and lower/upper limits.
|
||||
/// </summary>
|
||||
/// <param name="title">Window title</param>
|
||||
/// <param name="lowerLimit">Lower limit</param>
|
||||
/// <param name="upperLimit">Upper limit</param>
|
||||
public GetStateDlg(string title, int lowerLimit, int upperLimit)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Text = title;
|
||||
this.lowerLimit = lowerLimit;
|
||||
this.upperLimit = upperLimit;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// OK button handler that verifies validity of the entered value.
|
||||
/// </summary>
|
||||
private void okButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
int number;
|
||||
if (int.TryParse(stateTextBox.Text, out number) && number >= lowerLimit && number <= upperLimit)
|
||||
{
|
||||
State = number;
|
||||
Parameter = parameterTextBox.Text;
|
||||
DialogResult = DialogResult.OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
string message = (lowerLimit != Int32.MinValue || upperLimit != Int32.MaxValue)
|
||||
? string.Format("Invalid state ({0}..{1})", lowerLimit, upperLimit)
|
||||
: "Invalid state";
|
||||
MessageBox.Show(message);
|
||||
DialogResult = DialogResult.None; /// Prevent closing this window
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
public class LviIDComparer : IComparer
|
||||
{
|
||||
int column;
|
||||
SortOrder order;
|
||||
|
||||
public LviIDComparer()
|
||||
{
|
||||
column = 0;
|
||||
order = SortOrder.Ascending;
|
||||
}
|
||||
|
||||
public LviIDComparer(int column, SortOrder order)
|
||||
{
|
||||
this.column = column;
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
public int Compare(object x, object y)
|
||||
{
|
||||
Int64 valX = Int64.Parse(((ListViewItem)x).SubItems[column].Text);
|
||||
Int64 valY = Int64.Parse(((ListViewItem)y).SubItems[column].Text);
|
||||
|
||||
if (order == SortOrder.Ascending)
|
||||
{
|
||||
return valX > valY ? 1 : valX == valY ? 0 : -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return valX < valY ? 1 : valX == valY ? 0 : -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.ComponentModel.Composition.Hosting;
|
||||
using System.Windows.Forms;
|
||||
using DataStreamInterface;
|
||||
|
||||
namespace DataStreamInterfaceTest
|
||||
{
|
||||
class Program
|
||||
{
|
||||
#if DEBUG
|
||||
const string CatalogDir = "..\\..\\..\\DataStreamMeter\\bin\\Debug";
|
||||
#else
|
||||
const string CatalogDir = "..\\..\\..\\DataStreamMeter\\bin\\Release";
|
||||
#endif
|
||||
|
||||
[Import(typeof(IDataStreamMeter))]
|
||||
IDataStreamMeter dataStreamMeter;
|
||||
|
||||
private Program()
|
||||
{
|
||||
Console.WriteLine("Components found:");
|
||||
foreach (var file in Directory.EnumerateFiles(CatalogDir))
|
||||
{
|
||||
Console.WriteLine(file);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var catalog = new AggregateCatalog();
|
||||
catalog.Catalogs.Add(new AssemblyCatalog(typeof(DataStreamInterface.IDataStreamMeter).Assembly));
|
||||
catalog.Catalogs.Add(new DirectoryCatalog(CatalogDir));
|
||||
(new CompositionContainer(catalog)).ComposeParts(this);
|
||||
}
|
||||
catch (CompositionException compositionException)
|
||||
{
|
||||
Console.WriteLine(compositionException.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Program p = new Program();
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new DemoMainWnd(p.dataStreamMeter));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
|
||||
BIN
Binary file not shown.
-88
@@ -1,88 +0,0 @@
|
||||
namespace DataStreamMeter
|
||||
{
|
||||
partial class GetDblValueDlg
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.valueTextBox = new System.Windows.Forms.TextBox();
|
||||
this.okButton = new System.Windows.Forms.Button();
|
||||
this.cancelButton = new System.Windows.Forms.Button();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// valueTextBox
|
||||
//
|
||||
this.valueTextBox.Location = new System.Drawing.Point(35, 20);
|
||||
this.valueTextBox.Name = "valueTextBox";
|
||||
this.valueTextBox.Size = new System.Drawing.Size(94, 20);
|
||||
this.valueTextBox.TabIndex = 0;
|
||||
//
|
||||
// okButton
|
||||
//
|
||||
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.okButton.Location = new System.Drawing.Point(216, 16);
|
||||
this.okButton.Name = "okButton";
|
||||
this.okButton.Size = new System.Drawing.Size(75, 29);
|
||||
this.okButton.TabIndex = 1;
|
||||
this.okButton.Text = "OK";
|
||||
this.okButton.UseVisualStyleBackColor = true;
|
||||
this.okButton.Click += new System.EventHandler(this.okButton_Click);
|
||||
//
|
||||
// cancelButton
|
||||
//
|
||||
this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.cancelButton.Location = new System.Drawing.Point(306, 16);
|
||||
this.cancelButton.Name = "cancelButton";
|
||||
this.cancelButton.Size = new System.Drawing.Size(75, 29);
|
||||
this.cancelButton.TabIndex = 2;
|
||||
this.cancelButton.Text = "Cancel";
|
||||
this.cancelButton.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// GetFlowDlg
|
||||
//
|
||||
this.AcceptButton = this.okButton;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.cancelButton;
|
||||
this.ClientSize = new System.Drawing.Size(396, 58);
|
||||
this.Controls.Add(this.cancelButton);
|
||||
this.Controls.Add(this.okButton);
|
||||
this.Controls.Add(this.valueTextBox);
|
||||
this.Name = "GetFlowDlg";
|
||||
this.Text = "Enter flow";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox valueTextBox;
|
||||
private System.Windows.Forms.Button okButton;
|
||||
private System.Windows.Forms.Button cancelButton;
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DataStreamMeter
|
||||
{
|
||||
public partial class GetDblValueDlg : Form
|
||||
{
|
||||
public double DblValue;
|
||||
|
||||
double lowerLimit;
|
||||
double upperLimit;
|
||||
|
||||
|
||||
public GetDblValueDlg()
|
||||
: this("Enter flow in [m3/h] please")
|
||||
{
|
||||
}
|
||||
|
||||
public GetDblValueDlg(string title)
|
||||
: this(title, 0, 100.0)
|
||||
{
|
||||
}
|
||||
|
||||
public GetDblValueDlg(string title, double lowerLimit, double upperLimit)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Text = title;
|
||||
this.lowerLimit = lowerLimit;
|
||||
this.upperLimit = upperLimit;
|
||||
}
|
||||
|
||||
|
||||
private void okButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
double val;
|
||||
if (TryParseUDouble(valueTextBox.Text, out val))
|
||||
{
|
||||
DblValue = val;
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Invalid value");
|
||||
DialogResult = DialogResult.None;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse an unsigned double number
|
||||
/// </summary>
|
||||
bool TryParseUDouble(string text, out double result)
|
||||
{
|
||||
return double.TryParse(text, NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out result) ||
|
||||
double.TryParse(text, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace DataStreamMeter
|
||||
{
|
||||
public class MeterDataEventArgs : EventArgs
|
||||
{
|
||||
public State State;
|
||||
public double Time;
|
||||
public double Volume;
|
||||
public double Flow;
|
||||
|
||||
public MeterDataEventArgs(State state, double time, double volume, double flow)
|
||||
{
|
||||
State = state;
|
||||
Time = time;
|
||||
Volume = volume;
|
||||
Flow = flow;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,351 +0,0 @@
|
||||
using System;
|
||||
using System.ComponentModel.Composition;
|
||||
using DataStreamInterface;
|
||||
|
||||
namespace DataStreamMeter
|
||||
{
|
||||
[Export(typeof(IDataStreamMeter))]
|
||||
public class MeterSimulation : IDataStreamMeter
|
||||
{
|
||||
MeterSimulationDlg modelessDlg;
|
||||
|
||||
/// Water meter specification
|
||||
public readonly string MeterID = "3141592653";
|
||||
public const Unit TimeUnits = Unit.s; /// Unit.s, Unit.ms, ...
|
||||
public const Unit VolumeUnits = Unit.l; /// Unit.l, Unit.USgal, ...
|
||||
public const Unit FlowUnits = Unit.m3ph; /// Unit.m3ph, Unit.USgalps, Unit.cfs, ...
|
||||
public const double SamplingPeriodSec = 0.125; /// Sampling period in seconds (here 125 ms, 8 Hz)
|
||||
public readonly double SamplingPeriod;
|
||||
|
||||
|
||||
public const Int64 MaxSamplesCount = 40000; /// Maximal test time is SamplingPeriod * MaxSamplesCount
|
||||
Sample[] samples = new Sample[MaxSamplesCount];
|
||||
Int64 storedSamplesCount;
|
||||
|
||||
|
||||
readonly object stateChangeAndTimerTickLock = new object();
|
||||
public State State;
|
||||
string connectionParameters;
|
||||
|
||||
/// initialTime is time when simulation started
|
||||
/// (lastSampleTime - initialTime).TotalSeconds is multiple of Sampling Period
|
||||
DateTime initialTime;
|
||||
|
||||
/// Last user interface tick info
|
||||
bool lastTickValid;
|
||||
State lastTickState;
|
||||
|
||||
/// Values incrementally updated on each timer tick
|
||||
double currentTime;
|
||||
double currentVolume;
|
||||
double currentFlow;
|
||||
double currentFlow_m3ph;
|
||||
|
||||
DateTime startTimeStamp; /// Measurement start DateTime
|
||||
double startTime; /// Measurement start time in seconds
|
||||
DateTime stopTimeStamp; /// Measurement end DateTime
|
||||
double stopTime; /// Measurement end time in seconds
|
||||
|
||||
|
||||
public MeterSimulation()
|
||||
{
|
||||
modelessDlg = null;
|
||||
State = State.Disconnected;
|
||||
SamplingPeriod = DataStreamInterface.Units.ConvertTo(TimeUnits, SamplingPeriodSec);
|
||||
lastTickValid = false;
|
||||
initialTime = DateTime.Now.Date; /// An arbitrary initial time (in this case the last midnight)
|
||||
}
|
||||
|
||||
public Unit GetTimeUnits()
|
||||
{
|
||||
return TimeUnits;
|
||||
}
|
||||
|
||||
public Unit GetVolumeUnits()
|
||||
{
|
||||
return VolumeUnits;
|
||||
}
|
||||
|
||||
public int GetQuantitiesCount()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public string GetQuantityCaption(int quantityNr)
|
||||
{
|
||||
if (quantityNr == 0) return "Flow";
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public Unit GetQuantityUnits(int quantityNr)
|
||||
{
|
||||
if (quantityNr == 0) return FlowUnits;
|
||||
return Unit.None;
|
||||
}
|
||||
|
||||
|
||||
public int GetMetersCount()
|
||||
{
|
||||
return 20;
|
||||
}
|
||||
|
||||
public bool OpenConnection(int meterIx, string connectionParameters, out string meterID)
|
||||
{
|
||||
lock (stateChangeAndTimerTickLock)
|
||||
{
|
||||
if (State != State.Disconnected)
|
||||
{
|
||||
/// Meter is already connected
|
||||
meterID = MeterID;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// Connect the meter
|
||||
meterID = MeterID;
|
||||
this.connectionParameters = connectionParameters;
|
||||
lastTickValid = false;
|
||||
State = State.Connected;
|
||||
}
|
||||
|
||||
/// Open modeless form
|
||||
modelessDlg = new MeterSimulationDlg(this, MeterID);
|
||||
modelessDlg.Show();
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool CloseConnection(int meterIx)
|
||||
{
|
||||
bool closeModelessDlg = false;
|
||||
|
||||
lock (stateChangeAndTimerTickLock)
|
||||
{
|
||||
if (State != State.Disconnected)
|
||||
{
|
||||
State = State.Disconnected;
|
||||
storedSamplesCount = 0;
|
||||
closeModelessDlg = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (closeModelessDlg)
|
||||
{
|
||||
if (modelessDlg != null) modelessDlg.Close();
|
||||
modelessDlg = null;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool CloseConnectionAll()
|
||||
{
|
||||
return CloseConnection(0);
|
||||
}
|
||||
|
||||
public bool Shutdown()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool GetState(int meterIx, out int state, out string parameter)
|
||||
{
|
||||
state = (int)this.State;
|
||||
parameter = this.connectionParameters;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool SetState(int meterIx, int state, string parameter)
|
||||
{
|
||||
/// It's not allowed to change the satate in this demo
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool SetStateAll(int state, string parameter)
|
||||
{
|
||||
return SetState(0, state, parameter);
|
||||
}
|
||||
|
||||
public bool StartMeasurement(int meterIx = 0)
|
||||
{
|
||||
lock (stateChangeAndTimerTickLock)
|
||||
{
|
||||
if (State == State.Connected)
|
||||
{
|
||||
startTimeStamp = DateTime.Now;
|
||||
startTime = TimeInSecondsFromDateTime(startTimeStamp, initialTime, SamplingPeriodSec);
|
||||
storedSamplesCount = 0;
|
||||
State = State.MeasurementInProgress;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool StartMeasurementAll()
|
||||
{
|
||||
return StartMeasurement(0);
|
||||
}
|
||||
|
||||
public bool StopMeasurement(int meterIx, out Int64 storedFramesCount)
|
||||
{
|
||||
lock (stateChangeAndTimerTickLock)
|
||||
{
|
||||
if (State == State.MeasurementInProgress)
|
||||
{
|
||||
stopTimeStamp = DateTime.Now;
|
||||
stopTime = TimeInSecondsFromDateTime(stopTimeStamp, initialTime, SamplingPeriodSec);
|
||||
|
||||
int newSamplesCount = Convert.ToInt32(Math.Round((stopTime - currentTime) / SamplingPeriodSec));
|
||||
double time = Units.ConvertTo(TimeUnits, currentTime);
|
||||
double volume = currentVolume;
|
||||
double volumeIncrement = Units.ConvertTo(VolumeUnits, currentFlow_m3ph * (SamplingPeriodSec / 3.6));
|
||||
for (int i = 0; i < newSamplesCount; i++)
|
||||
{
|
||||
time += SamplingPeriod;
|
||||
volume += volumeIncrement;
|
||||
if (storedSamplesCount < MaxSamplesCount)
|
||||
{
|
||||
samples[storedSamplesCount++] = new Sample(time, volume, currentFlow);
|
||||
}
|
||||
}
|
||||
|
||||
State = State.Connected;
|
||||
storedFramesCount = storedSamplesCount;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
storedFramesCount = 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool StopMeasurementAll(out Int64[] storedFramesCount)
|
||||
{
|
||||
storedFramesCount = new Int64[1];
|
||||
return StopMeasurement(0, out storedFramesCount[0]);
|
||||
}
|
||||
|
||||
public void TimerTick(double flow_m3ph)
|
||||
{
|
||||
lock (stateChangeAndTimerTickLock)
|
||||
{
|
||||
double lastSampleTime = TimeInSecondsFromDateTime(DateTime.Now, initialTime, SamplingPeriodSec);
|
||||
currentFlow_m3ph = flow_m3ph;
|
||||
currentFlow = Units.ConvertTo(FlowUnits, flow_m3ph);
|
||||
|
||||
if (!lastTickValid)
|
||||
{
|
||||
currentTime = lastSampleTime;
|
||||
currentVolume = 0;
|
||||
lastTickValid = true;
|
||||
lastTickState = State;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
int newSamplesCount = Convert.ToInt32(Math.Round((lastSampleTime - currentTime) / SamplingPeriodSec));
|
||||
double volumeIncrement = Units.ConvertTo(VolumeUnits, currentFlow_m3ph * (SamplingPeriodSec / 3.6));
|
||||
for (int i = 0; i < newSamplesCount; i++)
|
||||
{
|
||||
currentTime += SamplingPeriodSec;
|
||||
currentVolume += volumeIncrement;
|
||||
|
||||
if (State == State.MeasurementInProgress && currentTime > startTime && storedSamplesCount < MaxSamplesCount)
|
||||
{
|
||||
samples[storedSamplesCount++] = new Sample(Units.ConvertTo(TimeUnits, currentTime), currentVolume, currentFlow);
|
||||
}
|
||||
}
|
||||
currentTime = lastSampleTime; /// Rectify, prevent error propagation
|
||||
lastTickState = State;
|
||||
}
|
||||
}
|
||||
|
||||
modelessDlg.OnMeterdata(new MeterDataEventArgs(State, currentTime, currentVolume, currentFlow));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Obtain the last time instance before 'DateTime time' which is multiple of samplingPeriod-s after 'DateTime initialTime'.
|
||||
/// </summary>
|
||||
/// <param name="time">Time to be converted to seconds and rounded to samplingPeriod-s</param>
|
||||
/// <param name="startTime">Initial time</param>
|
||||
/// <param name="samplePeriod">Sampling period in seconds</param>
|
||||
/// <returns></returns>
|
||||
double TimeInSecondsFromDateTime(DateTime time, DateTime initialTime, double samplingPeriod)
|
||||
{
|
||||
TimeSpan span = time - initialTime;
|
||||
return samplingPeriod * Math.Floor(span.TotalSeconds / samplingPeriod);
|
||||
}
|
||||
|
||||
|
||||
///---------------------------
|
||||
/// Datastream data exchange
|
||||
///---------------------------
|
||||
|
||||
/// <summary>
|
||||
/// Retuns 'count' data frames starting with data frame with ID = 'id'
|
||||
/// </summary>
|
||||
/// <param name="id">First frame ID</param>
|
||||
/// <param name="count">Frames count</param>
|
||||
/// <returns>Selected data frames</returns>
|
||||
public DataFrame[] GetFrames(int meterIx, Int64 startID, int count)
|
||||
{
|
||||
DataFrame[] frames = new DataFrame[count];
|
||||
|
||||
if (State != State.MeasurementInProgress)
|
||||
{
|
||||
for (int j = 0; j < count; j++)
|
||||
{
|
||||
Int64 id = startID + j;
|
||||
if (id < storedSamplesCount)
|
||||
{
|
||||
frames[j] = new DataFrame(id, samples[id].Time, samples[id].Volume, new double[1] { samples[id].Flow });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return frames;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns ID of the data frame where time equals or exceeds the specified time.
|
||||
/// When time of the first frame (ID=0) is larger then specified time, function returns 0.
|
||||
/// </summary>
|
||||
/// <param name="time">Time</param>
|
||||
/// <returns>ID of the data frame at or after the pecified time</returns>
|
||||
public Int64 GetID(int meterIx, double time)
|
||||
{
|
||||
if (storedSamplesCount == 0) return -1;
|
||||
|
||||
Int64 lo = 0;
|
||||
Int64 hi = storedSamplesCount - 1;
|
||||
|
||||
if (samples[hi].Time < time) return -1;
|
||||
|
||||
while (lo < hi)
|
||||
{
|
||||
Int64 mid = (lo + hi) / 2;
|
||||
if (samples[mid].Time < time)
|
||||
{
|
||||
lo = mid + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
hi = mid;
|
||||
}
|
||||
}
|
||||
|
||||
return lo;
|
||||
}
|
||||
}
|
||||
|
||||
public enum State
|
||||
{
|
||||
Disconnected = 0,
|
||||
Connected = 1,
|
||||
MeasurementInProgress = 2,
|
||||
}
|
||||
}
|
||||
-323
@@ -1,323 +0,0 @@
|
||||
namespace DataStreamMeter
|
||||
{
|
||||
partial class MeterSimulationDlg
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.meterIDGroupBox = new System.Windows.Forms.GroupBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.volumeUnitsTextBox = new System.Windows.Forms.TextBox();
|
||||
this.timeUnitsTextBox = new System.Windows.Forms.TextBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.meterIDTextBox = new System.Windows.Forms.TextBox();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.setFlowButton = new System.Windows.Forms.Button();
|
||||
this.flowm3phTextBox = new System.Windows.Forms.TextBox();
|
||||
this.flowTrackBar = new System.Windows.Forms.TrackBar();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.flowTextBox = new System.Windows.Forms.TextBox();
|
||||
this.volumeTextBox = new System.Windows.Forms.TextBox();
|
||||
this.timeTextBox = new System.Windows.Forms.TextBox();
|
||||
this.stateTextBox = new System.Windows.Forms.TextBox();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.lastUITickTextBox = new System.Windows.Forms.TextBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.timer1 = new System.Windows.Forms.Timer(this.components);
|
||||
this.meterIDGroupBox.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.flowTrackBar)).BeginInit();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// meterIDGroupBox
|
||||
//
|
||||
this.meterIDGroupBox.Controls.Add(this.label3);
|
||||
this.meterIDGroupBox.Controls.Add(this.label2);
|
||||
this.meterIDGroupBox.Controls.Add(this.volumeUnitsTextBox);
|
||||
this.meterIDGroupBox.Controls.Add(this.timeUnitsTextBox);
|
||||
this.meterIDGroupBox.Controls.Add(this.label1);
|
||||
this.meterIDGroupBox.Controls.Add(this.meterIDTextBox);
|
||||
this.meterIDGroupBox.Location = new System.Drawing.Point(12, 12);
|
||||
this.meterIDGroupBox.Name = "meterIDGroupBox";
|
||||
this.meterIDGroupBox.Size = new System.Drawing.Size(453, 105);
|
||||
this.meterIDGroupBox.TabIndex = 0;
|
||||
this.meterIDGroupBox.TabStop = false;
|
||||
this.meterIDGroupBox.Text = "Water meter info";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(18, 76);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(67, 13);
|
||||
this.label3.TabIndex = 5;
|
||||
this.label3.Text = "Volume units";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(18, 50);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(55, 13);
|
||||
this.label2.TabIndex = 4;
|
||||
this.label2.Text = "Time units";
|
||||
//
|
||||
// volumeUnitsTextBox
|
||||
//
|
||||
this.volumeUnitsTextBox.Enabled = false;
|
||||
this.volumeUnitsTextBox.Location = new System.Drawing.Point(122, 73);
|
||||
this.volumeUnitsTextBox.Name = "volumeUnitsTextBox";
|
||||
this.volumeUnitsTextBox.Size = new System.Drawing.Size(52, 20);
|
||||
this.volumeUnitsTextBox.TabIndex = 3;
|
||||
//
|
||||
// timeUnitsTextBox
|
||||
//
|
||||
this.timeUnitsTextBox.Enabled = false;
|
||||
this.timeUnitsTextBox.Location = new System.Drawing.Point(122, 47);
|
||||
this.timeUnitsTextBox.Name = "timeUnitsTextBox";
|
||||
this.timeUnitsTextBox.Size = new System.Drawing.Size(52, 20);
|
||||
this.timeUnitsTextBox.TabIndex = 2;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(18, 24);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(73, 13);
|
||||
this.label1.TabIndex = 1;
|
||||
this.label1.Text = "Meter ID (s/n)";
|
||||
//
|
||||
// meterIDTextBox
|
||||
//
|
||||
this.meterIDTextBox.Enabled = false;
|
||||
this.meterIDTextBox.Location = new System.Drawing.Point(122, 21);
|
||||
this.meterIDTextBox.Name = "meterIDTextBox";
|
||||
this.meterIDTextBox.Size = new System.Drawing.Size(145, 20);
|
||||
this.meterIDTextBox.TabIndex = 0;
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.setFlowButton);
|
||||
this.groupBox1.Controls.Add(this.flowm3phTextBox);
|
||||
this.groupBox1.Controls.Add(this.flowTrackBar);
|
||||
this.groupBox1.Location = new System.Drawing.Point(12, 123);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(453, 96);
|
||||
this.groupBox1.TabIndex = 1;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Flow";
|
||||
//
|
||||
// setFlowButton
|
||||
//
|
||||
this.setFlowButton.Location = new System.Drawing.Point(289, 17);
|
||||
this.setFlowButton.Name = "setFlowButton";
|
||||
this.setFlowButton.Size = new System.Drawing.Size(75, 23);
|
||||
this.setFlowButton.TabIndex = 4;
|
||||
this.setFlowButton.Text = "Set value";
|
||||
this.setFlowButton.UseVisualStyleBackColor = true;
|
||||
this.setFlowButton.Click += new System.EventHandler(this.setFlowButton_Click);
|
||||
//
|
||||
// flowm3phTextBox
|
||||
//
|
||||
this.flowm3phTextBox.Enabled = false;
|
||||
this.flowm3phTextBox.Location = new System.Drawing.Point(122, 19);
|
||||
this.flowm3phTextBox.Name = "flowm3phTextBox";
|
||||
this.flowm3phTextBox.Size = new System.Drawing.Size(145, 20);
|
||||
this.flowm3phTextBox.TabIndex = 3;
|
||||
//
|
||||
// flowTrackBar
|
||||
//
|
||||
this.flowTrackBar.LargeChange = 1;
|
||||
this.flowTrackBar.Location = new System.Drawing.Point(0, 43);
|
||||
this.flowTrackBar.Maximum = 25;
|
||||
this.flowTrackBar.Name = "flowTrackBar";
|
||||
this.flowTrackBar.Size = new System.Drawing.Size(447, 45);
|
||||
this.flowTrackBar.TabIndex = 2;
|
||||
this.flowTrackBar.Scroll += new System.EventHandler(this.flowTrackBar_Scroll);
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.flowTextBox);
|
||||
this.groupBox2.Controls.Add(this.volumeTextBox);
|
||||
this.groupBox2.Controls.Add(this.timeTextBox);
|
||||
this.groupBox2.Controls.Add(this.stateTextBox);
|
||||
this.groupBox2.Controls.Add(this.label8);
|
||||
this.groupBox2.Controls.Add(this.label7);
|
||||
this.groupBox2.Controls.Add(this.label6);
|
||||
this.groupBox2.Controls.Add(this.label5);
|
||||
this.groupBox2.Controls.Add(this.lastUITickTextBox);
|
||||
this.groupBox2.Controls.Add(this.label4);
|
||||
this.groupBox2.Location = new System.Drawing.Point(12, 225);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(453, 150);
|
||||
this.groupBox2.TabIndex = 2;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "State";
|
||||
//
|
||||
// flowTextBox
|
||||
//
|
||||
this.flowTextBox.Enabled = false;
|
||||
this.flowTextBox.Location = new System.Drawing.Point(122, 121);
|
||||
this.flowTextBox.Name = "flowTextBox";
|
||||
this.flowTextBox.Size = new System.Drawing.Size(99, 20);
|
||||
this.flowTextBox.TabIndex = 9;
|
||||
//
|
||||
// volumeTextBox
|
||||
//
|
||||
this.volumeTextBox.Enabled = false;
|
||||
this.volumeTextBox.Location = new System.Drawing.Point(122, 95);
|
||||
this.volumeTextBox.Name = "volumeTextBox";
|
||||
this.volumeTextBox.Size = new System.Drawing.Size(99, 20);
|
||||
this.volumeTextBox.TabIndex = 8;
|
||||
//
|
||||
// timeTextBox
|
||||
//
|
||||
this.timeTextBox.Enabled = false;
|
||||
this.timeTextBox.Location = new System.Drawing.Point(122, 68);
|
||||
this.timeTextBox.Name = "timeTextBox";
|
||||
this.timeTextBox.Size = new System.Drawing.Size(99, 20);
|
||||
this.timeTextBox.TabIndex = 7;
|
||||
//
|
||||
// stateTextBox
|
||||
//
|
||||
this.stateTextBox.Enabled = false;
|
||||
this.stateTextBox.Location = new System.Drawing.Point(122, 42);
|
||||
this.stateTextBox.Name = "stateTextBox";
|
||||
this.stateTextBox.Size = new System.Drawing.Size(99, 20);
|
||||
this.stateTextBox.TabIndex = 6;
|
||||
//
|
||||
// label8
|
||||
//
|
||||
this.label8.AutoSize = true;
|
||||
this.label8.Location = new System.Drawing.Point(18, 124);
|
||||
this.label8.Name = "label8";
|
||||
this.label8.Size = new System.Drawing.Size(29, 13);
|
||||
this.label8.TabIndex = 5;
|
||||
this.label8.Text = "Flow";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.AutoSize = true;
|
||||
this.label7.Location = new System.Drawing.Point(18, 98);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.Size = new System.Drawing.Size(42, 13);
|
||||
this.label7.TabIndex = 4;
|
||||
this.label7.Text = "Volume";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(18, 71);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(30, 13);
|
||||
this.label6.TabIndex = 3;
|
||||
this.label6.Text = "Time";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(18, 45);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(32, 13);
|
||||
this.label5.TabIndex = 2;
|
||||
this.label5.Text = "State";
|
||||
//
|
||||
// lastUITickTextBox
|
||||
//
|
||||
this.lastUITickTextBox.Enabled = false;
|
||||
this.lastUITickTextBox.Location = new System.Drawing.Point(122, 13);
|
||||
this.lastUITickTextBox.Name = "lastUITickTextBox";
|
||||
this.lastUITickTextBox.Size = new System.Drawing.Size(145, 20);
|
||||
this.lastUITickTextBox.TabIndex = 1;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(18, 16);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(61, 13);
|
||||
this.label4.TabIndex = 0;
|
||||
this.label4.Text = "Last UI tick";
|
||||
//
|
||||
// timer1
|
||||
//
|
||||
this.timer1.Interval = 1000;
|
||||
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
|
||||
//
|
||||
// MeterSimulationDlg
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(477, 387);
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.meterIDGroupBox);
|
||||
this.Name = "MeterSimulationDlg";
|
||||
this.Text = "MeterDialog";
|
||||
this.meterIDGroupBox.ResumeLayout(false);
|
||||
this.meterIDGroupBox.PerformLayout();
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.flowTrackBar)).EndInit();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox meterIDGroupBox;
|
||||
private System.Windows.Forms.TextBox meterIDTextBox;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.TextBox volumeUnitsTextBox;
|
||||
private System.Windows.Forms.TextBox timeUnitsTextBox;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TextBox flowm3phTextBox;
|
||||
private System.Windows.Forms.TrackBar flowTrackBar;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.Button setFlowButton;
|
||||
private System.Windows.Forms.Timer timer1;
|
||||
private System.Windows.Forms.TextBox lastUITickTextBox;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.TextBox flowTextBox;
|
||||
private System.Windows.Forms.TextBox volumeTextBox;
|
||||
private System.Windows.Forms.TextBox timeTextBox;
|
||||
private System.Windows.Forms.TextBox stateTextBox;
|
||||
private System.Windows.Forms.Label label8;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.Label label5;
|
||||
}
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DataStreamMeter
|
||||
{
|
||||
public partial class MeterSimulationDlg : Form
|
||||
{
|
||||
MeterSimulation meterSimulation;
|
||||
double currentFlow;
|
||||
|
||||
|
||||
public string MeterID;
|
||||
|
||||
|
||||
public void OnMeterdata(MeterDataEventArgs args)
|
||||
{
|
||||
if (MeterDataHandler == null) return;
|
||||
MeterDataHandler(null, args);
|
||||
}
|
||||
public event EventHandler<MeterDataEventArgs> MeterDataHandler;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor with no meter
|
||||
/// </summary>
|
||||
public MeterSimulationDlg()
|
||||
: this(null, string.Empty)
|
||||
{
|
||||
}
|
||||
|
||||
public MeterSimulationDlg(MeterSimulation meterSimulation, string meterID)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.meterSimulation = meterSimulation;
|
||||
meterIDTextBox.Text = meterID;
|
||||
|
||||
currentFlow = 0;
|
||||
flowm3phTextBox.Text = currentFlow.ToString();
|
||||
flowTrackBar.Value = Convert.ToInt32(currentFlow);
|
||||
|
||||
MeterDataHandler += delegate(object sender, MeterDataEventArgs args)
|
||||
{
|
||||
if (InvokeRequired)
|
||||
{
|
||||
Invoke(new EventHandler<MeterDataEventArgs>(DisplayMeterData), sender, args);
|
||||
}
|
||||
else
|
||||
{
|
||||
DisplayMeterData(sender, args);
|
||||
}
|
||||
};
|
||||
|
||||
if (meterSimulation != null)
|
||||
{
|
||||
timer1.Enabled = true;
|
||||
timer1.Start();
|
||||
}
|
||||
}
|
||||
|
||||
private void flowTrackBar_Scroll(object sender, EventArgs e)
|
||||
{
|
||||
currentFlow = flowTrackBar.Value;
|
||||
flowm3phTextBox.Text = currentFlow.ToString("F2");
|
||||
}
|
||||
|
||||
private void setFlowButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
GetDblValueDlg dlg = new GetDblValueDlg("Enter flow in [m3/h] please", 0, 25.0);
|
||||
if (dlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
currentFlow = dlg.DblValue;
|
||||
flowm3phTextBox.Text = currentFlow.ToString();
|
||||
flowTrackBar.Value = Convert.ToInt32(currentFlow);
|
||||
}
|
||||
}
|
||||
|
||||
private void timer1_Tick(object sender, EventArgs e)
|
||||
{
|
||||
lastUITickTextBox.Text = DateTime.Now.ToString("HH:mm:ss fff");
|
||||
meterSimulation.TimerTick(currentFlow);
|
||||
}
|
||||
|
||||
void DisplayMeterData(object sender, MeterDataEventArgs args)
|
||||
{
|
||||
stateTextBox.Text = args.State.ToString();
|
||||
timeTextBox.Text = args.Time.ToString();
|
||||
volumeTextBox.Text = args.Volume.ToString();
|
||||
flowTextBox.Text = args.Flow.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace DataStreamMeter
|
||||
{
|
||||
public class Sample
|
||||
{
|
||||
public readonly double Time; /// In water meter time units
|
||||
public readonly double Volume; /// In water meter colume units
|
||||
public readonly double Flow; /// In water meter flow units
|
||||
|
||||
public Sample(double time, double volume, double flow)
|
||||
{
|
||||
Time = time;
|
||||
Volume = volume;
|
||||
Flow = flow;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("time={0} volume={1} flow={2}", Time, Volume, Flow);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
|
||||
Binary file not shown.
@@ -16,7 +16,7 @@
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
@@ -27,7 +27,7 @@
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ namespace Decrypt
|
||||
{
|
||||
if ((args.Length < 1) || !File.Exists(args[0]))
|
||||
{
|
||||
Console.WriteLine("Usage: Decode <file>");
|
||||
Console.WriteLine(@"Usage: Decode <file>");
|
||||
Console.ReadKey();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -40,9 +40,8 @@
|
||||
<StartupObject>DeviceTest.Program</StartupObject>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="log4net, Version=1.2.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\log4net.2.0.2\lib\net40-full\log4net.dll</HintPath>
|
||||
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
@@ -98,6 +97,10 @@
|
||||
<Project>{743DF7DB-C7B6-42EB-986D-0F485E5588E4}</Project>
|
||||
<Name>Config</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\SchematicDrawing\SchematicDrawing.csproj">
|
||||
<Project>{0f79ca69-9dbc-41f3-a6fc-5a2937365343}</Project>
|
||||
<Name>SchematicDrawing</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\TBF\TBF.csproj">
|
||||
<Project>{8648FD92-CDA1-4C3A-B5F9-FE547CE1FA48}</Project>
|
||||
<Name>TBF</Name>
|
||||
|
||||
+39
-21
@@ -2,9 +2,10 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Xml.Serialization;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml.Serialization;
|
||||
using Common;
|
||||
using TBF.Rig;
|
||||
using TBF.Rig.Generic;
|
||||
@@ -384,7 +385,7 @@ namespace DeviceTest
|
||||
/// <returns>true when factory changed</returns>
|
||||
bool FactoryFromClassName(string className, ref IComponentFactory factory)
|
||||
{
|
||||
foreach (var fac in TbfComponents.Factories)
|
||||
foreach (var fac in TbfComponents.Factories)
|
||||
{
|
||||
if (className == fac.ClassName)
|
||||
{
|
||||
@@ -647,7 +648,7 @@ namespace DeviceTest
|
||||
|
||||
foreach (var dev in tbfDevices) dev.StopDevice();
|
||||
foreach (var dev in tbfDevices) dev.StopDevice2();
|
||||
tbfDevices.Clear();
|
||||
tbfDevices.Clear();
|
||||
|
||||
startButton.Enabled = true;
|
||||
stopButton.Enabled = false;
|
||||
@@ -664,9 +665,9 @@ namespace DeviceTest
|
||||
int previousOperation = 0;
|
||||
|
||||
|
||||
if (tbfComponent1forOp is TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter)
|
||||
if (tbfComponent1forOp is TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter)
|
||||
{
|
||||
operation1 = (tbfComponent1forOp as TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter).ReadPressureOp(ref floatBox);
|
||||
operation1 = (tbfComponent1forOp as TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter).ReadPressureOp(ref dblBox1);
|
||||
}
|
||||
else if (tbfComponent1forOp is TBF.Rig.Network.Camera.CLP1611.Camera)
|
||||
{
|
||||
@@ -677,11 +678,16 @@ namespace DeviceTest
|
||||
{
|
||||
operation1 = (tbfComponent1forOp as TBF.Rig.Network.Camera.Roi.Roi).RoiDetectionOp();
|
||||
}
|
||||
else if (tbfComponent1forOp is TBF.Rig.Modbus.TempControl.Easytherm.Easytherm)
|
||||
else if (tbfComponent1forOp is TBF.Rig.Modbus.TempControl.Easytherm.TControl)
|
||||
{
|
||||
operation1 = (tbfComponent1forOp as TBF.Rig.Modbus.TempControl.Easytherm.Easytherm).SetTemperatureOp(10);
|
||||
operation2 = (tbfComponent1forOp as TBF.Rig.Modbus.TempControl.Easytherm.Easytherm).SetTemperatureOp(20);
|
||||
operation1 = (tbfComponent1forOp as TBF.Rig.Modbus.TempControl.Easytherm.TControl).SetTemperatureSetpointOp(10);
|
||||
operation2 = (tbfComponent1forOp as TBF.Rig.Modbus.TempControl.Easytherm.TControl).SetTemperatureSetpointOp(20);
|
||||
}
|
||||
else if (tbfComponent1forOp is TBF.Rig.Modbus.TempControl.Novus.TControl)
|
||||
{
|
||||
operation1 = (tbfComponent1forOp as TBF.Rig.Modbus.TempControl.Novus.TControl).SetTemperatureSetpointOp(10);
|
||||
operation2 = (tbfComponent1forOp as TBF.Rig.Modbus.TempControl.Novus.TControl).SetTemperatureSetpointOp(20);
|
||||
}
|
||||
else if (tbfComponent1forOp is TBF.Rig.Modbus.UltrasoundLevelMeter.LevelMeter)
|
||||
{
|
||||
operation1 = (tbfComponent1forOp as TBF.Rig.Modbus.UltrasoundLevelMeter.LevelMeter).ReadLevelOp(ref dblBox1);
|
||||
@@ -703,9 +709,9 @@ namespace DeviceTest
|
||||
}
|
||||
|
||||
|
||||
if (tbfComponent2forOp is TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter)
|
||||
if (tbfComponent2forOp is TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter)
|
||||
{
|
||||
operation21 = (tbfComponent2forOp as TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter).ReadPressureOp(ref floatBox);
|
||||
operation21 = (tbfComponent2forOp as TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter).ReadPressureOp(ref dblBox2);
|
||||
}
|
||||
else if (tbfComponent2forOp is TBF.Rig.Network.Camera.CLP1611.Camera)
|
||||
{
|
||||
@@ -716,11 +722,16 @@ namespace DeviceTest
|
||||
{
|
||||
operation21 = (tbfComponent2forOp as TBF.Rig.Network.Camera.Roi.Roi).RoiDetectionOp();
|
||||
}
|
||||
else if (tbfComponent2forOp is TBF.Rig.Modbus.TempControl.Easytherm.Easytherm)
|
||||
else if (tbfComponent2forOp is TBF.Rig.Modbus.TempControl.Easytherm.TControl)
|
||||
{
|
||||
operation21 = (tbfComponent2forOp as TBF.Rig.Modbus.TempControl.Easytherm.Easytherm).SetTemperatureOp(10);
|
||||
operation22 = (tbfComponent2forOp as TBF.Rig.Modbus.TempControl.Easytherm.Easytherm).SetTemperatureOp(20);
|
||||
operation21 = (tbfComponent2forOp as TBF.Rig.Modbus.TempControl.Easytherm.TControl).SetTemperatureSetpointOp(10);
|
||||
operation22 = (tbfComponent2forOp as TBF.Rig.Modbus.TempControl.Easytherm.TControl).SetTemperatureSetpointOp(20);
|
||||
}
|
||||
else if (tbfComponent2forOp is TBF.Rig.Modbus.TempControl.Novus.TControl)
|
||||
{
|
||||
operation21 = (tbfComponent2forOp as TBF.Rig.Modbus.TempControl.Novus.TControl).SetTemperatureSetpointOp(10);
|
||||
operation22 = (tbfComponent2forOp as TBF.Rig.Modbus.TempControl.Novus.TControl).SetTemperatureSetpointOp(20);
|
||||
}
|
||||
else if (tbfComponent2forOp is TBF.Rig.Modbus.UltrasoundLevelMeter.LevelMeter)
|
||||
{
|
||||
operation21 = (tbfComponent2forOp as TBF.Rig.Modbus.UltrasoundLevelMeter.LevelMeter).ReadLevelOp(ref dblBox1);
|
||||
@@ -742,9 +753,9 @@ namespace DeviceTest
|
||||
}
|
||||
|
||||
|
||||
if (tbfComponent3forOp is TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter)
|
||||
if (tbfComponent3forOp is TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter)
|
||||
{
|
||||
operation31 = (tbfComponent3forOp as TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter).ReadPressureOp(ref floatBox);
|
||||
operation31 = (tbfComponent3forOp as TBF.Rig.Modbus.PressureMeter.Meret.PressureMeter).ReadPressureOp(ref dblBox3);
|
||||
}
|
||||
else if (tbfComponent3forOp is TBF.Rig.Network.Camera.CLP1611.Camera)
|
||||
{
|
||||
@@ -755,11 +766,16 @@ namespace DeviceTest
|
||||
{
|
||||
operation31 = (tbfComponent3forOp as TBF.Rig.Network.Camera.Roi.Roi).RoiDetectionOp();
|
||||
}
|
||||
else if (tbfComponent3forOp is TBF.Rig.Modbus.TempControl.Easytherm.Easytherm)
|
||||
{
|
||||
operation31 = (tbfComponent3forOp as TBF.Rig.Modbus.TempControl.Easytherm.Easytherm).SetTemperatureOp(10);
|
||||
operation32 = (tbfComponent3forOp as TBF.Rig.Modbus.TempControl.Easytherm.Easytherm).SetTemperatureOp(20);
|
||||
}
|
||||
else if (tbfComponent3forOp is TBF.Rig.Modbus.TempControl.Easytherm.TControl)
|
||||
{
|
||||
operation31 = (tbfComponent3forOp as TBF.Rig.Modbus.TempControl.Easytherm.TControl).SetTemperatureSetpointOp(10);
|
||||
operation32 = (tbfComponent3forOp as TBF.Rig.Modbus.TempControl.Easytherm.TControl).SetTemperatureSetpointOp(20);
|
||||
}
|
||||
else if (tbfComponent3forOp is TBF.Rig.Modbus.TempControl.Novus.TControl)
|
||||
{
|
||||
operation31 = (tbfComponent3forOp as TBF.Rig.Modbus.TempControl.Novus.TControl).SetTemperatureSetpointOp(10);
|
||||
operation32 = (tbfComponent3forOp as TBF.Rig.Modbus.TempControl.Novus.TControl).SetTemperatureSetpointOp(20);
|
||||
}
|
||||
else if (tbfComponent3forOp is TBF.Rig.Modbus.UltrasoundLevelMeter.LevelMeter)
|
||||
{
|
||||
operation31 = (tbfComponent3forOp as TBF.Rig.Modbus.UltrasoundLevelMeter.LevelMeter).ReadLevelOp(ref dblBox1);
|
||||
@@ -859,7 +875,7 @@ namespace DeviceTest
|
||||
|
||||
foreach (var d in tbfDevices) d.StopDevice();
|
||||
foreach (var d in tbfDevices) d.StopDevice2();
|
||||
}
|
||||
}
|
||||
|
||||
private void stopButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
@@ -883,6 +899,8 @@ namespace DeviceTest
|
||||
{
|
||||
Cursor = Cursors.WaitCursor;
|
||||
|
||||
CurrentUser.Restore(this);
|
||||
|
||||
if (workerThread != null)
|
||||
{
|
||||
workerThreadRunning = false;
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="2.0.15" targetFramework="net472" />
|
||||
</packages>
|
||||
@@ -183,7 +183,7 @@ namespace Dirichlet.Numerics
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return ((BigInteger)this).ToString();
|
||||
return ((BigInteger)this).ToString("x");
|
||||
}
|
||||
|
||||
public string ToString(string format)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
@@ -27,7 +27,7 @@
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ namespace Encrypt
|
||||
{
|
||||
if ((args.Length < 1) || !File.Exists(args[0]))
|
||||
{
|
||||
Console.WriteLine("Usage: Encode <file>");
|
||||
Console.WriteLine(@"Usage: Encode <file>");
|
||||
Console.ReadKey();
|
||||
return;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user