Compare commits
785 Commits
Author | SHA1 | Date |
---|---|---|
![]() |
24b5e28904 | 12 months ago |
![]() |
2fc6dc32d1 | 12 months ago |
![]() |
09c57e15f4 | 1 year ago |
![]() |
7d4614ad54 | 1 year ago |
![]() |
c62287c7c3 | 1 year ago |
![]() |
a49d0cc78b | 1 year ago |
![]() |
fd820643c5 | 1 year ago |
![]() |
3bc94bf1bd | 1 year ago |
![]() |
3c29e85b00 | 1 year ago |
![]() |
193b8bf054 | 1 year ago |
![]() |
0f2443a2fa | 1 year ago |
![]() |
7afa40390b | 1 year ago |
![]() |
a66e07deae | 1 year ago |
![]() |
681d1b0e05 | 1 year ago |
![]() |
249df0176a | 2 years ago |
![]() |
cdd0684ffb | 2 years ago |
![]() |
d6c53b1569 | 2 years ago |
![]() |
76e016f59d | 2 years ago |
![]() |
2823184077 | 2 years ago |
![]() |
5b350102de | 2 years ago |
![]() |
8c0a75cee9 | 2 years ago |
![]() |
7442c8da53 | 2 years ago |
![]() |
41e1ddd308 | 2 years ago |
![]() |
6f557c490f | 2 years ago |
![]() |
c83bad2531 | 2 years ago |
![]() |
aacf853876 | 2 years ago |
![]() |
e7c2e37ad4 | 2 years ago |
![]() |
1072d54f13 | 2 years ago |
![]() |
7fee3e5995 | 2 years ago |
![]() |
ec9519a0e7 | 2 years ago |
![]() |
ab8ac8304d | 2 years ago |
![]() |
5012b3e358 | 2 years ago |
![]() |
ec097240a6 | 2 years ago |
![]() |
1f1b005d26 | 2 years ago |
![]() |
f734c450cb | 2 years ago |
![]() |
1d62270730 | 2 years ago |
![]() |
27df38d205 | 2 years ago |
![]() |
23928b2b34 | 2 years ago |
![]() |
37453fd3c1 | 2 years ago |
![]() |
87ba6b0514 | 2 years ago |
![]() |
4a5a092796 | 2 years ago |
![]() |
1c1e3766da | 2 years ago |
![]() |
e51fda3a06 | 2 years ago |
![]() |
6f96104a09 | 2 years ago |
![]() |
d0e0dc22e9 | 2 years ago |
![]() |
30fec0a79f | 2 years ago |
![]() |
684a6ea92e | 2 years ago |
![]() |
dce3a9dab4 | 2 years ago |
![]() |
d658fe89ab | 2 years ago |
![]() |
718b3cda2c | 2 years ago |
![]() |
6cd2eab066 | 2 years ago |
![]() |
f41667367a | 2 years ago |
![]() |
f951ebc08e | 2 years ago |
![]() |
8798c739ba | 2 years ago |
![]() |
097c055f96 | 2 years ago |
![]() |
48b73261c3 | 3 years ago |
![]() |
79a8eaf260 | 3 years ago |
![]() |
76fd58e9be | 3 years ago |
![]() |
a385a74c4d | 3 years ago |
![]() |
b6867c9c88 | 3 years ago |
![]() |
edc1735916 | 3 years ago |
![]() |
8dae8c1cbe | 3 years ago |
![]() |
5f767ad03e | 3 years ago |
![]() |
9b977e2e4f | 3 years ago |
![]() |
880d4918f5 | 3 years ago |
![]() |
68ee9b056a | 3 years ago |
![]() |
27340ef5c5 | 3 years ago |
![]() |
e11f113b98 | 3 years ago |
![]() |
699d75dcd3 | 3 years ago |
![]() |
a657eb7721 | 3 years ago |
![]() |
c630abb8d1 | 3 years ago |
![]() |
19d05f5dc0 | 3 years ago |
![]() |
6904705083 | 3 years ago |
![]() |
bfd87c703d | 3 years ago |
![]() |
559bc76b34 | 3 years ago |
![]() |
c5979072c9 | 3 years ago |
![]() |
cf02b9fa3a | 3 years ago |
![]() |
29a4f498f9 | 3 years ago |
![]() |
28e9e07c7e | 3 years ago |
![]() |
ba18d18c8d | 3 years ago |
![]() |
ce2ce7e96b | 3 years ago |
![]() |
da088a1938 | 3 years ago |
![]() |
ad0bc86908 | 3 years ago |
![]() |
b355b64bf1 | 3 years ago |
![]() |
afc2d1035e | 3 years ago |
![]() |
b6cd6b61e0 | 3 years ago |
![]() |
23d71f322d | 3 years ago |
![]() |
df66698b4d | 3 years ago |
![]() |
91b0e6ed67 | 3 years ago |
![]() |
9da09a22a9 | 3 years ago |
![]() |
98f088a1d3 | 3 years ago |
![]() |
4b5db538fd | 3 years ago |
![]() |
65318c44b6 | 3 years ago |
![]() |
e1e6919411 | 3 years ago |
![]() |
3f8150e391 | 3 years ago |
![]() |
d00fb7fffb | 3 years ago |
![]() |
80f609d5e6 | 3 years ago |
![]() |
10622ba36b | 3 years ago |
![]() |
dd3e2a6870 | 3 years ago |
![]() |
e29736d732 | 3 years ago |
![]() |
d34b3f4f70 | 3 years ago |
![]() |
021b3100ac | 3 years ago |
![]() |
893e298107 | 3 years ago |
![]() |
219111eef1 | 3 years ago |
![]() |
7c06680cba | 3 years ago |
![]() |
a3b04b7bc4 | 3 years ago |
![]() |
fa8e3c0798 | 3 years ago |
![]() |
15398c9ab5 | 3 years ago |
![]() |
1615c8ea9a | 3 years ago |
![]() |
aeb8cb6157 | 3 years ago |
![]() |
4fb8113821 | 3 years ago |
![]() |
30217b41cc | 3 years ago |
![]() |
9424917185 | 3 years ago |
![]() |
22f6a823ea | 3 years ago |
![]() |
8addfc2095 | 3 years ago |
![]() |
4d951e04c5 | 3 years ago |
![]() |
3fe0effcda | 3 years ago |
![]() |
5b4f6f2fd9 | 3 years ago |
![]() |
a4fdf089bb | 3 years ago |
![]() |
b3868a2f9f | 3 years ago |
![]() |
319dc4494b | 3 years ago |
![]() |
a9efd32dbc | 3 years ago |
![]() |
35ac479430 | 3 years ago |
![]() |
00bf70aa8c | 3 years ago |
![]() |
8fe6f0d551 | 3 years ago |
![]() |
7d90a01287 | 3 years ago |
![]() |
9f09152d7c | 3 years ago |
![]() |
03a2137087 | 3 years ago |
![]() |
10a4bc6e76 | 3 years ago |
![]() |
25bcd14618 | 3 years ago |
![]() |
d2b36449c2 | 3 years ago |
![]() |
fd514f32d6 | 3 years ago |
![]() |
cfbe677bc5 | 3 years ago |
![]() |
9032e84415 | 3 years ago |
![]() |
8b43a644b1 | 3 years ago |
![]() |
26bec663d2 | 3 years ago |
![]() |
c76b5dd2da | 3 years ago |
![]() |
bb7c2421cd | 3 years ago |
![]() |
ee948a0c08 | 3 years ago |
![]() |
030ae3f7b5 | 3 years ago |
![]() |
e44a44c9e7 | 3 years ago |
![]() |
3288bc0fc5 | 3 years ago |
![]() |
584a733b2a | 3 years ago |
![]() |
b62060b67f | 3 years ago |
![]() |
5fe49d4618 | 3 years ago |
![]() |
1954da2b78 | 3 years ago |
![]() |
532298c378 | 3 years ago |
![]() |
5ca0cd5512 | 3 years ago |
![]() |
d4312d21ac | 3 years ago |
![]() |
1213b67a5a | 3 years ago |
![]() |
b444fba88c | 3 years ago |
![]() |
bf747f6bea | 3 years ago |
![]() |
e51ef87bf5 | 3 years ago |
![]() |
19f7066c38 | 3 years ago |
![]() |
ee2c461ff0 | 3 years ago |
![]() |
3cb6123a63 | 3 years ago |
![]() |
377d708f4e | 4 years ago |
![]() |
3e5fadce4b | 4 years ago |
![]() |
f60ff65fc4 | 4 years ago |
![]() |
9d9f03585f | 4 years ago |
![]() |
f0651adb36 | 4 years ago |
![]() |
2adb4dec23 | 4 years ago |
![]() |
258651eca8 | 4 years ago |
![]() |
210cf30897 | 4 years ago |
![]() |
77e8144348 | 4 years ago |
![]() |
d7b48a891e | 4 years ago |
![]() |
cb78c0e403 | 4 years ago |
![]() |
398b14e65f | 4 years ago |
![]() |
8aa988068c | 4 years ago |
![]() |
d40b359292 | 4 years ago |
![]() |
1f2da92626 | 4 years ago |
![]() |
ec1678e88a | 4 years ago |
![]() |
c838255c1e | 4 years ago |
![]() |
457b43a6e7 | 4 years ago |
![]() |
c210e086cd | 4 years ago |
![]() |
c7b554beb3 | 4 years ago |
![]() |
f7f3c2ae8f | 4 years ago |
![]() |
19c617c4f3 | 4 years ago |
![]() |
cfa94cbf10 | 4 years ago |
![]() |
96e93c4be3 | 4 years ago |
![]() |
2092f42f80 | 4 years ago |
![]() |
a82964bd66 | 4 years ago |
![]() |
5d1f66d7e6 | 4 years ago |
![]() |
824c9ad5dd | 4 years ago |
![]() |
f98c1a956d | 4 years ago |
![]() |
56847ec171 | 4 years ago |
![]() |
a7362928f4 | 4 years ago |
![]() |
c3191b2864 | 4 years ago |
![]() |
e06b485258 | 4 years ago |
![]() |
81b26f1cb6 | 4 years ago |
![]() |
b374644d30 | 4 years ago |
![]() |
b27681f408 | 4 years ago |
![]() |
d036b09712 | 4 years ago |
![]() |
94563cb9f6 | 4 years ago |
![]() |
83e21e207b | 4 years ago |
![]() |
88148f39ac | 4 years ago |
![]() |
d5ec52ef78 | 4 years ago |
![]() |
8c55ff636d | 4 years ago |
![]() |
aaf893da34 | 4 years ago |
![]() |
32087c47de | 4 years ago |
![]() |
20b99b4ef3 | 4 years ago |
![]() |
8918a442e0 | 4 years ago |
![]() |
8eeb6f06b3 | 4 years ago |
![]() |
de27a6388d | 4 years ago |
![]() |
e0b5ed180f | 4 years ago |
![]() |
92a3b7668d | 4 years ago |
![]() |
9d4fb692fe | 4 years ago |
![]() |
01b1f96590 | 4 years ago |
![]() |
0dc79d4dd8 | 4 years ago |
![]() |
36c65bd2e2 | 4 years ago |
![]() |
7ac0ccc7b6 | 4 years ago |
![]() |
93d8dfc856 | 4 years ago |
![]() |
7861582621 | 4 years ago |
![]() |
434b9f59b7 | 4 years ago |
![]() |
50fc97734e | 4 years ago |
![]() |
89812fd333 | 4 years ago |
![]() |
394bf4ccba | 4 years ago |
![]() |
ce9584d122 | 4 years ago |
![]() |
09c77afee4 | 4 years ago |
![]() |
9b19e88af7 | 4 years ago |
![]() |
856800936f | 4 years ago |
![]() |
a02c63b1de | 4 years ago |
![]() |
76b4e9ed7b | 4 years ago |
![]() |
00b42f969d | 4 years ago |
![]() |
2e18175dac | 4 years ago |
![]() |
ce13002ce1 | 4 years ago |
![]() |
d49c159686 | 4 years ago |
![]() |
472e586a14 | 4 years ago |
![]() |
d7a55eca08 | 4 years ago |
![]() |
ae6941f451 | 4 years ago |
![]() |
6998b7397c | 4 years ago |
![]() |
6f376620d3 | 4 years ago |
![]() |
c621840d42 | 4 years ago |
![]() |
dabff06fe8 | 4 years ago |
![]() |
7c3601cb74 | 4 years ago |
![]() |
6b9437b8c0 | 4 years ago |
![]() |
82e57900fa | 4 years ago |
![]() |
9790630d25 | 4 years ago |
![]() |
263c34f016 | 4 years ago |
![]() |
f259096e12 | 4 years ago |
![]() |
e67cb1af31 | 4 years ago |
![]() |
db5e24bc1a | 4 years ago |
![]() |
ba45973d59 | 4 years ago |
![]() |
f0c1d6348e | 4 years ago |
![]() |
6525a72930 | 4 years ago |
![]() |
c5579758bb | 4 years ago |
![]() |
bb64d9d8fe | 4 years ago |
![]() |
2ace50b712 | 4 years ago |
![]() |
ca58c70342 | 4 years ago |
![]() |
4ffed8de11 | 4 years ago |
![]() |
982b1097fc | 4 years ago |
![]() |
161e88a3ef | 4 years ago |
![]() |
8bec67d8d6 | 4 years ago |
![]() |
78cd0ed391 | 4 years ago |
![]() |
40b8f99201 | 4 years ago |
![]() |
ef1895c2be | 4 years ago |
![]() |
da08489bc3 | 4 years ago |
![]() |
7185c3b8d4 | 4 years ago |
![]() |
de3aba0cb6 | 4 years ago |
![]() |
c8078e3eb1 | 4 years ago |
![]() |
1bb76893a2 | 4 years ago |
![]() |
8b82cd34e1 | 4 years ago |
![]() |
1a09b9548a | 4 years ago |
![]() |
3514e08252 | 4 years ago |
![]() |
8578344e85 | 4 years ago |
![]() |
1b2d194694 | 4 years ago |
![]() |
d1fd0c7e34 | 4 years ago |
![]() |
f866132e84 | 4 years ago |
![]() |
efe4513d11 | 4 years ago |
![]() |
b2f417bdbf | 4 years ago |
![]() |
fcefc746fe | 4 years ago |
![]() |
91bb816621 | 4 years ago |
![]() |
72feb2f614 | 4 years ago |
![]() |
9e6e3487da | 4 years ago |
![]() |
e0b4a720dd | 4 years ago |
![]() |
cb3f460fcf | 4 years ago |
![]() |
530cdc0383 | 4 years ago |
![]() |
f6110c1158 | 4 years ago |
![]() |
5aec4c94b1 | 4 years ago |
![]() |
7540b6a8d7 | 4 years ago |
![]() |
abd26eedca | 4 years ago |
![]() |
cda2eba93b | 4 years ago |
![]() |
ee9d6656b3 | 4 years ago |
![]() |
56bda24641 | 5 years ago |
![]() |
5ba428fa5b | 5 years ago |
![]() |
3532623319 | 5 years ago |
![]() |
c4dcd37449 | 5 years ago |
![]() |
2b1104c0d3 | 5 years ago |
![]() |
bd4bd0fab6 | 5 years ago |
![]() |
4e15343f5b | 5 years ago |
![]() |
f49be0d844 | 5 years ago |
![]() |
ea268b46a7 | 5 years ago |
![]() |
fd3847dcc5 | 5 years ago |
![]() |
d546ebac6f | 5 years ago |
![]() |
ed810fde0f | 5 years ago |
![]() |
e04e424b02 | 5 years ago |
![]() |
7f381b54ba | 5 years ago |
![]() |
0fd1176ede | 5 years ago |
![]() |
91f3ed7989 | 5 years ago |
![]() |
dc22dc76ec | 5 years ago |
![]() |
42bb617841 | 5 years ago |
![]() |
d5d8b70dc2 | 5 years ago |
![]() |
842bc271cd | 5 years ago |
![]() |
cc905b5013 | 5 years ago |
![]() |
9e27ed5a77 | 5 years ago |
![]() |
5512b0f9be | 5 years ago |
![]() |
4dc971ba56 | 5 years ago |
![]() |
60d66e5ba4 | 5 years ago |
![]() |
3984a47324 | 5 years ago |
![]() |
5afa1310f3 | 5 years ago |
![]() |
5e39c94cf3 | 5 years ago |
![]() |
cdd00da057 | 5 years ago |
![]() |
e47601a81e | 5 years ago |
![]() |
b1fc481ab8 | 5 years ago |
![]() |
da9b77af7a | 5 years ago |
![]() |
35713550fb | 5 years ago |
![]() |
fe39cc9b24 | 5 years ago |
![]() |
19f2cbf0e7 | 5 years ago |
![]() |
b0fb3259e5 | 5 years ago |
![]() |
4f0667b597 | 5 years ago |
![]() |
de2ce1d008 | 5 years ago |
![]() |
db1671587e | 5 years ago |
![]() |
9e064ab709 | 5 years ago |
![]() |
23a3b3a371 | 5 years ago |
![]() |
5630275a0d | 5 years ago |
![]() |
8111734f40 | 5 years ago |
![]() |
6c2b9ad473 | 5 years ago |
![]() |
69bf867c41 | 5 years ago |
![]() |
895e74d680 | 5 years ago |
![]() |
db0a7d5e8a | 5 years ago |
![]() |
74a227bdf2 | 5 years ago |
![]() |
5f2e14f712 | 5 years ago |
![]() |
945fe080f3 | 5 years ago |
![]() |
176de25ca0 | 5 years ago |
![]() |
bc29a0b048 | 5 years ago |
![]() |
d08f5a67ac | 5 years ago |
![]() |
96ba766a0a | 5 years ago |
![]() |
8bf76601ea | 5 years ago |
![]() |
474a482766 | 5 years ago |
![]() |
bf27774a86 | 5 years ago |
![]() |
40f8b76ad7 | 5 years ago |
![]() |
4793e298ff | 5 years ago |
![]() |
ae4f940753 | 5 years ago |
![]() |
0879ad0d46 | 5 years ago |
![]() |
c02e99a022 | 5 years ago |
![]() |
3e98fdfa90 | 5 years ago |
![]() |
4deca9a4c0 | 5 years ago |
![]() |
5d704b8026 | 5 years ago |
![]() |
a606848a8b | 5 years ago |
![]() |
7b671f3a01 | 5 years ago |
![]() |
b88c4216c8 | 5 years ago |
![]() |
1f174c3f65 | 5 years ago |
![]() |
8ac9a732df | 5 years ago |
![]() |
2baeb59e61 | 5 years ago |
![]() |
146dbb9057 | 5 years ago |
![]() |
0c9d1b16f8 | 5 years ago |
![]() |
8a55ef47bf | 5 years ago |
![]() |
14f4f1ccf0 | 5 years ago |
![]() |
fb5ed11001 | 5 years ago |
![]() |
a5bcd3c251 | 5 years ago |
![]() |
9348683462 | 5 years ago |
![]() |
cc80bffa69 | 5 years ago |
![]() |
53d8a2f715 | 5 years ago |
![]() |
23da9ba28e | 5 years ago |
![]() |
981c2dd5f3 | 5 years ago |
![]() |
e59aa5521e | 5 years ago |
![]() |
767bc887de | 5 years ago |
![]() |
49cc901263 | 5 years ago |
![]() |
a165d1698d | 5 years ago |
![]() |
3f42387ed7 | 5 years ago |
![]() |
e4fcb923a0 | 5 years ago |
![]() |
00a821e67e | 5 years ago |
![]() |
543d7802f5 | 5 years ago |
![]() |
b27e363372 | 5 years ago |
![]() |
18833799cc | 5 years ago |
![]() |
42802db6f1 | 5 years ago |
![]() |
036f60e4f1 | 5 years ago |
![]() |
07525b598f | 5 years ago |
![]() |
1f56110d32 | 5 years ago |
![]() |
98e7c5816a | 5 years ago |
![]() |
fb9fc7b88b | 5 years ago |
![]() |
7ee278cead | 5 years ago |
![]() |
a095c16139 | 5 years ago |
![]() |
ec5ccb62a0 | 5 years ago |
![]() |
5e520f21b5 | 5 years ago |
![]() |
7e1c2ef18f | 5 years ago |
![]() |
e1ab323c1b | 5 years ago |
![]() |
3a2eea3611 | 5 years ago |
![]() |
fcdb83bc2f | 5 years ago |
![]() |
b04e651623 | 5 years ago |
![]() |
bef1ad21b4 | 5 years ago |
![]() |
bafe27a0e8 | 5 years ago |
![]() |
9809582f96 | 5 years ago |
![]() |
42013e1550 | 5 years ago |
![]() |
0b58716ea3 | 5 years ago |
![]() |
3e1a23a6d0 | 5 years ago |
![]() |
aabe20031f | 5 years ago |
![]() |
69e359b03f | 5 years ago |
![]() |
a17e9603e0 | 5 years ago |
![]() |
2bc47a6a6c | 5 years ago |
![]() |
131fcf5236 | 5 years ago |
![]() |
ed8c8b3ac7 | 5 years ago |
![]() |
e4b2849894 | 5 years ago |
![]() |
6a3c66eafa | 5 years ago |
![]() |
ee4da06690 | 5 years ago |
![]() |
cbd5c0b36f | 5 years ago |
![]() |
504c260667 | 5 years ago |
![]() |
9ab37e9836 | 5 years ago |
![]() |
805d73b86f | 5 years ago |
![]() |
9ac8192bae | 5 years ago |
![]() |
3e83cd6194 | 5 years ago |
![]() |
34647c6876 | 5 years ago |
![]() |
401a436c95 | 5 years ago |
![]() |
473eec8464 | 5 years ago |
![]() |
f5b5c0d3ad | 5 years ago |
![]() |
dcbd9f94ab | 5 years ago |
![]() |
172883478a | 5 years ago |
![]() |
30f98e54cb | 5 years ago |
![]() |
ca97f2548f | 5 years ago |
![]() |
7bac935648 | 5 years ago |
![]() |
7c68e3e3f6 | 5 years ago |
![]() |
c2c7c7171e | 5 years ago |
![]() |
649db2b3d6 | 5 years ago |
![]() |
b857e4c4ec | 5 years ago |
![]() |
88acbd49c4 | 5 years ago |
![]() |
0129032f08 | 5 years ago |
![]() |
cc22c69fb1 | 5 years ago |
![]() |
24a380c845 | 5 years ago |
![]() |
8bc7b75e11 | 5 years ago |
![]() |
2467457b5b | 5 years ago |
![]() |
80d11fbf78 | 5 years ago |
![]() |
4ee5891388 | 5 years ago |
![]() |
2f5817e0ac | 5 years ago |
![]() |
920eabe31f | 5 years ago |
![]() |
1c2db6e3be | 5 years ago |
![]() |
004789cf39 | 5 years ago |
![]() |
4a3702112e | 5 years ago |
![]() |
27ae0a5c0f | 5 years ago |
![]() |
69d93f398c | 5 years ago |
![]() |
de6886c6f3 | 5 years ago |
![]() |
cf7dbcc612 | 5 years ago |
![]() |
02f03aea2f | 5 years ago |
![]() |
7ece9922ed | 5 years ago |
![]() |
092d8786ac | 5 years ago |
![]() |
538b9698bc | 5 years ago |
![]() |
c4de14eb45 | 5 years ago |
![]() |
d38e590c99 | 5 years ago |
![]() |
5f02ea1661 | 5 years ago |
![]() |
ede2c7766c | 5 years ago |
![]() |
801d43e118 | 5 years ago |
![]() |
a7d744d55d | 5 years ago |
![]() |
d85b7ac777 | 5 years ago |
![]() |
b3c5ecdcf2 | 5 years ago |
![]() |
3bf0e9a689 | 5 years ago |
![]() |
9ca6d696c3 | 5 years ago |
![]() |
83e8e14603 | 5 years ago |
![]() |
9b5c45a0b3 | 5 years ago |
![]() |
db5740db0e | 5 years ago |
![]() |
0e184389b9 | 5 years ago |
![]() |
b6b94b0438 | 5 years ago |
![]() |
e1eb09d55b | 5 years ago |
![]() |
9c2942a261 | 5 years ago |
![]() |
ae66945751 | 5 years ago |
![]() |
1fcbad0b65 | 5 years ago |
![]() |
d55afdfb92 | 5 years ago |
![]() |
12d703e453 | 5 years ago |
![]() |
94dcbb0119 | 5 years ago |
![]() |
b0fbf9f3a3 | 5 years ago |
![]() |
d42f96ee97 | 5 years ago |
![]() |
7e4e396403 | 5 years ago |
![]() |
a6bad96d25 | 5 years ago |
![]() |
0bc014580a | 5 years ago |
![]() |
8e95e7dbb8 | 5 years ago |
![]() |
c4a5fd2f27 | 5 years ago |
![]() |
b0bce92073 | 5 years ago |
![]() |
73f1a98b4a | 5 years ago |
![]() |
994eea4b9a | 5 years ago |
![]() |
cdf371e92e | 5 years ago |
![]() |
cc88bea491 | 5 years ago |
![]() |
cc08420e50 | 5 years ago |
![]() |
97e65d5743 | 5 years ago |
![]() |
d798814fb4 | 5 years ago |
![]() |
1744616866 | 5 years ago |
![]() |
4871989658 | 5 years ago |
![]() |
95f751ef63 | 5 years ago |
![]() |
6a2db3fe46 | 5 years ago |
![]() |
4a15e9987b | 6 years ago |
![]() |
fa3c5dd256 | 6 years ago |
![]() |
f4957cf62a | 6 years ago |
![]() |
0d4930ac25 | 6 years ago |
![]() |
9526b6aece | 6 years ago |
![]() |
efe889d567 | 6 years ago |
![]() |
ff53028ec4 | 6 years ago |
![]() |
29efa333f8 | 6 years ago |
![]() |
cb8f159914 | 6 years ago |
![]() |
fd84d21c10 | 6 years ago |
![]() |
bfcb65eabc | 6 years ago |
![]() |
c7f7989b85 | 6 years ago |
![]() |
0ba4a70d33 | 6 years ago |
![]() |
bfef9ce5e9 | 6 years ago |
![]() |
09b23aaa74 | 6 years ago |
![]() |
ae07c77d39 | 6 years ago |
![]() |
2dba040c1a | 6 years ago |
![]() |
922f3055b4 | 6 years ago |
![]() |
800c76c50e | 6 years ago |
![]() |
3fd4fed886 | 6 years ago |
![]() |
4aaced2639 | 6 years ago |
![]() |
4dede9b8a1 | 6 years ago |
![]() |
d8153483b5 | 6 years ago |
![]() |
3a248a4f20 | 6 years ago |
![]() |
0c83507727 | 6 years ago |
![]() |
7d22aba900 | 6 years ago |
![]() |
85506b994d | 6 years ago |
![]() |
0a51f2688d | 6 years ago |
![]() |
ca43b02095 | 6 years ago |
![]() |
757dd4240d | 6 years ago |
![]() |
8726bb19d1 | 6 years ago |
![]() |
94bcd9e2e2 | 6 years ago |
![]() |
0e71091830 | 6 years ago |
![]() |
0be1a98d51 | 6 years ago |
![]() |
e954529117 | 6 years ago |
![]() |
e2d3ef2c72 | 6 years ago |
![]() |
4bbfd43f2e | 6 years ago |
![]() |
ac008c2e76 | 6 years ago |
![]() |
33db13de16 | 6 years ago |
![]() |
d0da45be41 | 6 years ago |
![]() |
d984573067 | 6 years ago |
![]() |
b4b74c69a4 | 6 years ago |
![]() |
37d43fe8d4 | 6 years ago |
![]() |
d20da7c15d | 6 years ago |
![]() |
c71015f240 | 6 years ago |
![]() |
1831be663e | 6 years ago |
![]() |
d86055173d | 6 years ago |
![]() |
abcf93416f | 6 years ago |
![]() |
e834bd0cf6 | 6 years ago |
![]() |
f788256247 | 6 years ago |
![]() |
df0e7c08df | 6 years ago |
![]() |
b82a78db46 | 6 years ago |
![]() |
8991954e3c | 6 years ago |
![]() |
18c2e30f87 | 6 years ago |
![]() |
0237c9b95c | 6 years ago |
![]() |
925c19bff6 | 6 years ago |
![]() |
9f86812002 | 6 years ago |
![]() |
afe9afafc0 | 6 years ago |
![]() |
d6bf4047e1 | 6 years ago |
![]() |
7cff085bf0 | 6 years ago |
![]() |
b4c7cefb15 | 6 years ago |
![]() |
c23a698c8d | 6 years ago |
![]() |
118a731b36 | 6 years ago |
![]() |
7d1a552cde | 6 years ago |
![]() |
88fce24b83 | 6 years ago |
![]() |
320f41fc1f | 6 years ago |
![]() |
23e381fa76 | 6 years ago |
![]() |
6c53924c05 | 6 years ago |
![]() |
8c1b75b382 | 6 years ago |
![]() |
6cbadb4b45 | 6 years ago |
![]() |
2dbd775fe1 | 6 years ago |
![]() |
881ebac3dc | 6 years ago |
![]() |
5fbb67c44c | 6 years ago |
![]() |
6738215c8f | 6 years ago |
![]() |
9192e5d21b | 6 years ago |
![]() |
1120a76ecd | 6 years ago |
![]() |
5bd03b0611 | 6 years ago |
![]() |
cee97f7676 | 6 years ago |
![]() |
11d1a5ca6d | 6 years ago |
![]() |
3b32c14870 | 6 years ago |
![]() |
a03f57c0a7 | 6 years ago |
![]() |
c988b78e5f | 6 years ago |
![]() |
16c7124c2b | 6 years ago |
![]() |
3a820f3546 | 6 years ago |
![]() |
b6d8dfc69c | 6 years ago |
![]() |
7ed8516344 | 6 years ago |
![]() |
a39397d21d | 6 years ago |
![]() |
8b6e4b0b29 | 6 years ago |
![]() |
c223b1c2b5 | 6 years ago |
![]() |
17205ed874 | 6 years ago |
![]() |
aad53f380e | 6 years ago |
![]() |
8bbc905533 | 6 years ago |
![]() |
69729bd8a0 | 6 years ago |
![]() |
939476e52a | 6 years ago |
![]() |
eaaaa2b0a5 | 6 years ago |
![]() |
547d5118e0 | 6 years ago |
![]() |
5e16971bbf | 6 years ago |
![]() |
6f7df75d85 | 6 years ago |
![]() |
ec947b234e | 6 years ago |
![]() |
6e9047916c | 6 years ago |
![]() |
e4c3875e3e | 6 years ago |
![]() |
83f9f1eaa6 | 6 years ago |
![]() |
31e183d357 | 6 years ago |
![]() |
3242f147be | 6 years ago |
![]() |
903abe0b6d | 6 years ago |
![]() |
320f511d33 | 6 years ago |
![]() |
d06ab546a9 | 6 years ago |
![]() |
ebb0f761d2 | 6 years ago |
![]() |
9a97519815 | 6 years ago |
![]() |
1549367eed | 6 years ago |
![]() |
e7ece50f08 | 6 years ago |
![]() |
cba8bf5714 | 6 years ago |
![]() |
236a773365 | 6 years ago |
![]() |
c7d0f88ce2 | 6 years ago |
![]() |
9c58a886c5 | 6 years ago |
![]() |
119b3d71f7 | 6 years ago |
![]() |
ee3d4f0164 | 6 years ago |
![]() |
4254af3ff9 | 6 years ago |
![]() |
dfaae6662d | 6 years ago |
![]() |
241ab5a33d | 6 years ago |
![]() |
6b2404e80b | 6 years ago |
![]() |
46d7f6ff2d | 6 years ago |
![]() |
3391f4c139 | 6 years ago |
![]() |
74d78d0618 | 6 years ago |
![]() |
cbd0008f48 | 6 years ago |
![]() |
88849e1663 | 6 years ago |
![]() |
70ec56a0b2 | 6 years ago |
![]() |
2cf288fbeb | 6 years ago |
![]() |
57f6df3c3a | 6 years ago |
![]() |
2bfd0fd0ef | 6 years ago |
![]() |
0b181ae22c | 6 years ago |
![]() |
01ea43e95f | 6 years ago |
![]() |
486c46229f | 6 years ago |
![]() |
0d025800b4 | 6 years ago |
![]() |
965cebbe2d | 6 years ago |
![]() |
f34cdb24e7 | 6 years ago |
![]() |
84fcfbbd22 | 6 years ago |
![]() |
4c123c0c3c | 6 years ago |
![]() |
834291e7c7 | 6 years ago |
![]() |
73417cdbf2 | 6 years ago |
![]() |
b909907041 | 6 years ago |
![]() |
bac41913c1 | 6 years ago |
![]() |
d4304e0a38 | 6 years ago |
![]() |
4f59099c59 | 6 years ago |
![]() |
0d5fa50947 | 6 years ago |
![]() |
60741394a3 | 6 years ago |
![]() |
8f5b501d75 | 6 years ago |
![]() |
f5236f84fc | 6 years ago |
![]() |
4b4a85dcc2 | 6 years ago |
![]() |
2e9761c541 | 6 years ago |
![]() |
c2d73c3fe8 | 6 years ago |
![]() |
7cb69c983a | 6 years ago |
![]() |
daff495246 | 6 years ago |
![]() |
8099734f11 | 6 years ago |
![]() |
6c14425ca8 | 6 years ago |
![]() |
5a3c3ba4b3 | 6 years ago |
![]() |
28e2acbd33 | 6 years ago |
![]() |
f0df571f42 | 6 years ago |
![]() |
a9fa07a7d4 | 6 years ago |
![]() |
544b301861 | 6 years ago |
![]() |
2911781070 | 6 years ago |
![]() |
38d67a4e69 | 6 years ago |
![]() |
ebc71d9731 | 6 years ago |
![]() |
16c061b4df | 7 years ago |
![]() |
5a83af9206 | 7 years ago |
![]() |
6e9a794047 | 7 years ago |
![]() |
d376370aaa | 7 years ago |
![]() |
a3c2c4652e | 7 years ago |
![]() |
c98a2b0baa | 7 years ago |
![]() |
95cf87ebb4 | 7 years ago |
![]() |
994484d1a6 | 7 years ago |
![]() |
ecdbb8fcff | 7 years ago |
![]() |
1f144a008e | 7 years ago |
![]() |
26a45a078b | 7 years ago |
![]() |
9f03b5d3b8 | 7 years ago |
![]() |
0cddcb7d12 | 7 years ago |
![]() |
8ffbd9f265 | 7 years ago |
![]() |
ac14a4722d | 7 years ago |
![]() |
0d2775742a | 7 years ago |
![]() |
93d8bfb19d | 7 years ago |
![]() |
0308f87b85 | 7 years ago |
![]() |
9f8d52005b | 7 years ago |
![]() |
f2c811c7c7 | 7 years ago |
![]() |
287769dcba | 7 years ago |
![]() |
b35a566145 | 7 years ago |
![]() |
0dff4286aa | 7 years ago |
![]() |
0421ea2101 | 7 years ago |
![]() |
9ed1510223 | 7 years ago |
![]() |
732ad79070 | 7 years ago |
![]() |
0b2d97c738 | 7 years ago |
![]() |
9959158995 | 7 years ago |
![]() |
b6be355a99 | 7 years ago |
![]() |
e51b676414 | 7 years ago |
![]() |
5aa78a8b18 | 7 years ago |
![]() |
88b74cfab8 | 7 years ago |
![]() |
a81b76c5e3 | 7 years ago |
![]() |
9309cb78de | 7 years ago |
![]() |
199d091c6d | 7 years ago |
![]() |
0a27ec758f | 7 years ago |
![]() |
952f12bffb | 7 years ago |
![]() |
452abd7dbf | 7 years ago |
![]() |
6af7973b09 | 7 years ago |
![]() |
46f87a1656 | 7 years ago |
![]() |
3d8ab44a49 | 7 years ago |
![]() |
1c461009c2 | 7 years ago |
![]() |
87cac8dc00 | 7 years ago |
![]() |
4bd8b40b6c | 7 years ago |
![]() |
01933c415a | 7 years ago |
![]() |
1434f3e345 | 7 years ago |
![]() |
d9cb36817a | 7 years ago |
![]() |
4f1dd17752 | 7 years ago |
![]() |
832bb5e9f1 | 7 years ago |
![]() |
92c3d3adb8 | 7 years ago |
![]() |
256f55aaef | 7 years ago |
![]() |
821b065453 | 7 years ago |
![]() |
b4eab23c12 | 7 years ago |
![]() |
9826749400 | 7 years ago |
![]() |
5e35e6694b | 7 years ago |
![]() |
b6c9a56d4a | 7 years ago |
![]() |
e252715aa9 | 7 years ago |
![]() |
4157c9c5da | 7 years ago |
![]() |
bbb56a16a3 | 7 years ago |
![]() |
3b577fbf3a | 7 years ago |
![]() |
1d61afaa8b | 7 years ago |
![]() |
6a7266da93 | 7 years ago |
![]() |
0c006f2892 | 7 years ago |
![]() |
afab66cb4d | 7 years ago |
![]() |
cd50bc63b2 | 7 years ago |
![]() |
388337a60d | 7 years ago |
![]() |
5ed474a44a | 7 years ago |
![]() |
ef076efe9f | 7 years ago |
![]() |
3e30910319 | 7 years ago |
![]() |
0842097b7e | 7 years ago |
![]() |
e9936b1d0e | 7 years ago |
![]() |
4dc0f9c987 | 7 years ago |
![]() |
618a84d37c | 7 years ago |
![]() |
91c22b3193 | 7 years ago |
![]() |
cad88b67a1 | 7 years ago |
![]() |
89d623866e | 7 years ago |
![]() |
aca462c761 | 7 years ago |
![]() |
f78f338b49 | 7 years ago |
![]() |
e5be822032 | 7 years ago |
![]() |
4ba6d9903d | 7 years ago |
![]() |
d0f4c06d62 | 7 years ago |
![]() |
154b3623e7 | 7 years ago |
![]() |
d5df360f3a | 7 years ago |
![]() |
a817b3d3c6 | 7 years ago |
![]() |
2c5fb89449 | 7 years ago |
![]() |
33ce512c47 | 7 years ago |
![]() |
46211a01e7 | 7 years ago |
![]() |
e12113acde | 7 years ago |
![]() |
43e0fb4d05 | 7 years ago |
![]() |
1cc350ed4a | 7 years ago |
![]() |
c04b4e928d | 7 years ago |
![]() |
5ef3acc3e6 | 7 years ago |
![]() |
8f4af64685 | 7 years ago |
![]() |
1eaf43ac8b | 7 years ago |
![]() |
14e3a9668c | 7 years ago |
![]() |
f644b8d777 | 7 years ago |
![]() |
23208aa066 | 7 years ago |
![]() |
c9fe177a87 | 7 years ago |
![]() |
861c5b244b | 7 years ago |
![]() |
cf63ab1269 | 7 years ago |
![]() |
916f9da92e | 7 years ago |
![]() |
0ff713b7f1 | 7 years ago |
![]() |
836892849c | 7 years ago |
![]() |
e90d5d44fa | 7 years ago |
![]() |
1d120f87de | 7 years ago |
![]() |
44d8ad8d15 | 7 years ago |
![]() |
7415fbc8da | 7 years ago |
![]() |
871c63ad68 | 7 years ago |
![]() |
18cc25f1ff | 7 years ago |
![]() |
9925d98101 | 7 years ago |
![]() |
ed75aa3f46 | 7 years ago |
![]() |
46437cdbe1 | 7 years ago |
![]() |
7ec38e9615 | 7 years ago |
![]() |
2b7dc5c5fe | 7 years ago |
![]() |
5201473262 | 7 years ago |
![]() |
e6884d721b | 7 years ago |
![]() |
a14d39e2e2 | 7 years ago |
![]() |
ea20cb2081 | 7 years ago |
![]() |
9eb8b17002 | 7 years ago |
![]() |
e8ea5f142f | 7 years ago |
![]() |
54d8fb74d7 | 7 years ago |
![]() |
a5e15003ce | 7 years ago |
![]() |
56d7ee4f0b | 7 years ago |
![]() |
70c1cd691d | 7 years ago |
![]() |
8d45d44cc2 | 7 years ago |
![]() |
4d32e3c1ae | 7 years ago |
![]() |
069646f954 | 7 years ago |
![]() |
d9800a5f74 | 7 years ago |
![]() |
9d26990313 | 7 years ago |
![]() |
7767e282d6 | 7 years ago |
![]() |
fc1d62d1a7 | 7 years ago |
![]() |
c80a87d5e8 | 7 years ago |
![]() |
7600c0f3cf | 7 years ago |
![]() |
aa7e89684e | 7 years ago |
![]() |
5692d0246b | 7 years ago |
![]() |
80ce9c8967 | 7 years ago |
@ -0,0 +1,26 @@
|
||||
name: CIFuzz
|
||||
on: [pull_request]
|
||||
jobs:
|
||||
Fuzzing:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Build Fuzzers
|
||||
id: build
|
||||
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
|
||||
with:
|
||||
oss-fuzz-project-name: 'libiec61850'
|
||||
dry-run: false
|
||||
language: c
|
||||
- name: Run Fuzzers
|
||||
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
|
||||
with:
|
||||
oss-fuzz-project-name: 'libiec61850'
|
||||
fuzz-seconds: 300
|
||||
dry-run: false
|
||||
language: c
|
||||
- name: Upload Crash
|
||||
uses: actions/upload-artifact@v3
|
||||
if: failure() && steps.build.outcome == 'success'
|
||||
with:
|
||||
name: artifacts
|
||||
path: ./out/artifacts
|
@ -0,0 +1,12 @@
|
||||
name: Greetings
|
||||
|
||||
on: [pull_request, issues]
|
||||
|
||||
jobs:
|
||||
greeting:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/first-interaction@v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
pr-message: 'Push requests and other code contributions can only be accepted from authorized persons that have signed our contributor license agreement(CLA). When in doubt please write to info@libiec61850.com.'
|
@ -1 +1,2 @@
|
||||
build/
|
||||
/Debug/
|
||||
|
@ -0,0 +1,5 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please report security issues to `info@libiec61850.com`
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||
</startup>
|
||||
</configuration>
|
@ -0,0 +1,217 @@
|
||||
MODEL(simpleIO){
|
||||
LD(GenericIO){
|
||||
LN(LLN0){
|
||||
DO(Mod 0){
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=0;
|
||||
}
|
||||
DO(Beh 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Health 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(NamPlt 0){
|
||||
DA(vendor 0 20 5 0 0);
|
||||
DA(swRev 0 20 5 0 0);
|
||||
DA(d 0 20 5 0 0);
|
||||
DA(configRev 0 20 5 0 0);
|
||||
DA(ldNs 0 20 11 0 0);
|
||||
}
|
||||
DS(Events){
|
||||
DE(GGIO1$ST$SPCSO1$stVal);
|
||||
DE(GGIO1$ST$SPCSO2$stVal);
|
||||
DE(GGIO1$ST$SPCSO3$stVal);
|
||||
DE(GGIO1$ST$SPCSO4$stVal);
|
||||
}
|
||||
DS(Events2){
|
||||
DE(GGIO1$ST$SPCSO1);
|
||||
DE(GGIO1$ST$SPCSO2);
|
||||
DE(GGIO1$ST$SPCSO3);
|
||||
DE(GGIO1$ST$SPCSO4);
|
||||
}
|
||||
DS(Events3){
|
||||
DE(GGIO1$ST$SPCSO1$stVal);
|
||||
DE(GGIO1$ST$SPCSO1$q);
|
||||
DE(GGIO1$ST$SPCSO2$stVal);
|
||||
DE(GGIO1$ST$SPCSO2$q);
|
||||
DE(GGIO1$ST$SPCSO3$stVal);
|
||||
DE(GGIO1$ST$SPCSO3$q);
|
||||
DE(GGIO1$ST$SPCSO4$stVal);
|
||||
DE(GGIO1$ST$SPCSO4$q);
|
||||
}
|
||||
DS(AnalogValues){
|
||||
DE(GGIO1$MX$AnIn1);
|
||||
DE(GGIO1$MX$AnIn2);
|
||||
DE(GGIO1$MX$AnIn3);
|
||||
DE(GGIO1$MX$AnIn4);
|
||||
}
|
||||
RC(EventsRCB01 Events 0 Events 1 24 175 50 1000);
|
||||
RC(AnalogValuesRCB01 AnalogValues 0 AnalogValues 1 24 175 50 1000);
|
||||
GC(gcbEvents events Events3 2 0 1000 3000 ){
|
||||
PA(4 1 4096 010ccd010001);
|
||||
}
|
||||
GC(gcbAnalogValues analog AnalogValues 2 0 -1 -1 ){
|
||||
PA(4 1 4096 010ccd010001);
|
||||
}
|
||||
}
|
||||
LN(LPHD1){
|
||||
DO(PhyNam 0){
|
||||
DA(vendor 0 20 5 0 0);
|
||||
}
|
||||
DO(PhyHealth 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Proxy 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
}
|
||||
LN(GGIO1){
|
||||
DO(Mod 0){
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=0;
|
||||
}
|
||||
DO(Beh 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Health 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(NamPlt 0){
|
||||
DA(vendor 0 20 5 0 0);
|
||||
DA(swRev 0 20 5 0 0);
|
||||
DA(d 0 20 5 0 0);
|
||||
}
|
||||
DO(AnIn1 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(AnIn2 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(AnIn3 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(AnIn4 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(SPCSO1 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(ctlModel 0 12 4 0 0)=1;
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(SPCSO2 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(ctlModel 0 12 4 0 0)=1;
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(SPCSO3 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(ctlModel 0 12 4 0 0)=1;
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(SPCSO4 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(ctlModel 0 12 4 0 0)=1;
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Ind1 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Ind2 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Ind3 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Ind4 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,446 @@
|
||||
MODEL(simpleIO){
|
||||
LD(GenericIO){
|
||||
LN(LLN0){
|
||||
DO(Mod 0){
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=0;
|
||||
}
|
||||
DO(Beh 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Health 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(NamPlt 0){
|
||||
DA(vendor 0 20 5 0 0);
|
||||
DA(swRev 0 20 5 0 0);
|
||||
DA(d 0 20 5 0 0);
|
||||
DA(configRev 0 20 5 0 0);
|
||||
DA(ldNs 0 20 11 0 0);
|
||||
}
|
||||
DO(SetInt1 0){
|
||||
DA(setVal 0 3 2 1 0);
|
||||
}
|
||||
DO(SetInt2 0){
|
||||
DA(setVal 0 3 2 1 0);
|
||||
}
|
||||
DO(SetInt3 0){
|
||||
DA(setVal 0 3 2 1 0);
|
||||
}
|
||||
DO(SetInt4 0){
|
||||
DA(setVal 0 3 2 1 0);
|
||||
}
|
||||
DO(SetBool1 0){
|
||||
DA(setVal 0 0 2 1 0);
|
||||
}
|
||||
DO(SetBool2 0){
|
||||
DA(setVal 0 0 2 1 0);
|
||||
}
|
||||
DO(SetBool3 0){
|
||||
DA(setVal 0 0 2 1 0);
|
||||
}
|
||||
DO(SetBool4 0){
|
||||
DA(setVal 0 0 2 1 0);
|
||||
}
|
||||
DO(Int64 0){
|
||||
DA(stVal 0 4 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(SetAnVal 0){
|
||||
DA(setMag 0 27 2 1 0){
|
||||
DA(f 0 10 2 1 0);
|
||||
}
|
||||
}
|
||||
DS(Events){
|
||||
DE(GGIO1$ST$SPCSO1$stVal);
|
||||
DE(GGIO1$ST$SPCSO2$stVal);
|
||||
DE(GGIO1$ST$SPCSO3$stVal);
|
||||
DE(GGIO1$ST$SPCSO4$stVal);
|
||||
}
|
||||
DS(EventsFCDO){
|
||||
DE(GGIO1$ST$SPCSO1);
|
||||
DE(GGIO1$ST$SPCSO2);
|
||||
DE(GGIO1$ST$SPCSO3);
|
||||
DE(GGIO1$ST$SPCSO4);
|
||||
}
|
||||
DS(Booleans){
|
||||
DE(LLN0$SP$SetBool1$setVal);
|
||||
DE(LLN0$SP$SetBool2$setVal);
|
||||
DE(LLN0$SP$SetBool3$setVal);
|
||||
DE(LLN0$SP$SetBool4$setVal);
|
||||
}
|
||||
DS(Integers){
|
||||
DE(LLN01$SP$SetInt1$setVal);
|
||||
DE(LLN01$SP$SetInt2$setVal);
|
||||
DE(LLN01$SP$SetInt3$setVal);
|
||||
DE(LLN01$SP$SetInt4$setVal);
|
||||
}
|
||||
RC(EventsRCB01 Events1 0 Events 1 24 239 50 1000);
|
||||
RC(EventsRCB02 Events1 0 Events 1 24 239 50 1000);
|
||||
RC(BufferedRCB01 Events1 1 Events 1 24 239 50 1000);
|
||||
RC(BufferedRCB02 Events1 1 Events 1 24 239 50 1000);
|
||||
GC(gcbEvents events Events 1 0 1000 3000 ){
|
||||
PA(4 1 4096 010ccd010001);
|
||||
}
|
||||
}
|
||||
LN(LPHD1){
|
||||
DO(PhyNam 0){
|
||||
DA(vendor 0 20 5 0 0);
|
||||
}
|
||||
DO(PhyHealth 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Proxy 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
}
|
||||
LN(GGIO1){
|
||||
DO(Mod 0){
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=0;
|
||||
}
|
||||
DO(Beh 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Health 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(NamPlt 0){
|
||||
DA(vendor 0 20 5 0 0);
|
||||
DA(swRev 0 20 5 0 0);
|
||||
DA(d 0 20 5 0 0);
|
||||
DA(dU 0 21 5 0 0);
|
||||
}
|
||||
DO(AnIn1 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(AnIn2 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(AnIn3 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(AnIn4 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(SPCSO1 0){
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=1;
|
||||
}
|
||||
DO(SPCSO2 0){
|
||||
DA(SBO 0 17 12 0 0);
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(Cancel 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
}
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=2;
|
||||
DA(sboClass 0 12 4 0 0);
|
||||
}
|
||||
DO(SPCSO3 0){
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(Cancel 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
}
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=3;
|
||||
}
|
||||
DO(SPCSO4 0){
|
||||
DA(SBOw 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(Cancel 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
}
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=4;
|
||||
}
|
||||
DO(SPCSO5 0){
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(operTm 0 22 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=1;
|
||||
DA(Cancel 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
}
|
||||
}
|
||||
DO(SPCSO6 0){
|
||||
DA(SBO 0 17 12 0 0);
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(operTm 0 22 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(Cancel 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(operTm 0 22 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
}
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=2;
|
||||
}
|
||||
DO(SPCSO7 0){
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(operTm 0 22 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(Cancel 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(operTm 0 22 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
}
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=3;
|
||||
}
|
||||
DO(SPCSO8 0){
|
||||
DA(SBOw 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(operTm 0 22 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(Oper 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(operTm 0 22 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
DA(Check 0 24 12 0 0);
|
||||
}
|
||||
DA(Cancel 0 27 12 0 0){
|
||||
DA(ctlVal 0 0 12 0 0);
|
||||
DA(operTm 0 22 12 0 0);
|
||||
DA(origin 0 27 12 0 0){
|
||||
DA(orCat 0 12 12 0 0);
|
||||
DA(orIdent 0 13 12 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 12 0 0);
|
||||
DA(T 0 22 12 0 0);
|
||||
DA(Test 0 0 12 0 0);
|
||||
}
|
||||
DA(origin 0 27 0 0 0){
|
||||
DA(orCat 0 12 0 0 0);
|
||||
DA(orIdent 0 13 0 0 0);
|
||||
}
|
||||
DA(ctlNum 0 6 0 0 0);
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=4;
|
||||
}
|
||||
DO(Ind1 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Ind2 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Ind3 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(Ind4 0){
|
||||
DA(stVal 0 0 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(SchdAbsTm 0){
|
||||
DA(val 24 10 2 1 0);
|
||||
}
|
||||
}
|
||||
LN(MHAI1){
|
||||
DO(HA 0){
|
||||
DO(phsAHar 16){
|
||||
DA(cVal 0 27 1 5 0){
|
||||
DA(mag 0 27 1 5 0){
|
||||
DA(f 0 10 1 5 0);
|
||||
}
|
||||
DA(ang 0 27 1 5 0){
|
||||
DA(f 0 10 1 5 0);
|
||||
}
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DA(numHar 0 7 4 1 0)=16;
|
||||
DA(numCyc 0 7 4 1 0);
|
||||
DA(evalTm 0 7 4 1 0);
|
||||
DA(frequency 0 10 4 1 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,430 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<SCL xmlns="http://www.iec.ch/61850/2003/SCL">
|
||||
<Header id="" version="4.0.2" revision="" toolID="" nameStructure="IEDName">
|
||||
</Header>
|
||||
<Communication>
|
||||
<SubNetwork name="subnetwork1" type="8-MMS">
|
||||
<Text>Station bus</Text>
|
||||
<BitRate unit="b/s">10</BitRate>
|
||||
<ConnectedAP iedName="simpleIO" apName="accessPoint1">
|
||||
<Address>
|
||||
<P type="IP">10.0.0.2</P>
|
||||
<P type="IP-SUBNET">255.255.255.0</P>
|
||||
<P type="IP-GATEWAY">10.0.0.1</P>
|
||||
<P type="OSI-TSEL">0001</P>
|
||||
<P type="OSI-PSEL">00000001</P>
|
||||
<P type="OSI-SSEL">0001</P>
|
||||
</Address>
|
||||
<GSE ldInst="GenericIO" cbName="gcbEvents">
|
||||
<Address>
|
||||
<P type="VLAN-ID">1</P>
|
||||
<P type="VLAN-PRIORITY">4</P>
|
||||
<P type="MAC-Address">01-0c-cd-01-00-01</P>
|
||||
<P type="APPID">1000</P>
|
||||
</Address>
|
||||
<MinTime>1000</MinTime>
|
||||
<MaxTime>3000</MaxTime>
|
||||
</GSE>
|
||||
</ConnectedAP>
|
||||
</SubNetwork>
|
||||
</Communication>
|
||||
<IED name="simpleIO">
|
||||
<Services>
|
||||
<DynAssociation />
|
||||
<GetDirectory />
|
||||
<GetDataObjectDefinition />
|
||||
<GetDataSetValue />
|
||||
<DataSetDirectory />
|
||||
<ReadWrite />
|
||||
<GetCBValues />
|
||||
<ConfLNs fixPrefix="true" fixLnInst="true" />
|
||||
<GOOSE max="5" />
|
||||
<GSSE max="5" />
|
||||
<FileHandling />
|
||||
<GSEDir />
|
||||
<TimerActivatedControl />
|
||||
</Services>
|
||||
<AccessPoint name="accessPoint1">
|
||||
<Server>
|
||||
<Authentication />
|
||||
<LDevice inst="GenericIO">
|
||||
<LN0 lnClass="LLN0" lnType="LLN01" inst="">
|
||||
|
||||
<DataSet name="Events" desc="Events">
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO1" daName="stVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO2" daName="stVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO3" daName="stVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO4" daName="stVal" />
|
||||
</DataSet>
|
||||
|
||||
<DataSet name="EventsFCDO" desc="EventsFCDO">
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO1"/>
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO2"/>
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO3"/>
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO4"/>
|
||||
</DataSet>
|
||||
|
||||
<DataSet name="Booleans" desc="Booleans">
|
||||
<FCDA ldInst="GenericIO" lnClass="LLN0" fc="SP" doName="SetBool1" daName="setVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="LLN0" fc="SP" doName="SetBool2" daName="setVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="LLN0" fc="SP" doName="SetBool3" daName="setVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="LLN0" fc="SP" doName="SetBool4" daName="setVal" />
|
||||
</DataSet>
|
||||
|
||||
<DataSet name="Integers" desc="Integers">
|
||||
<FCDA ldInst="GenericIO" lnClass="LLN0" fc="SP" lnInst="1" doName="SetInt1" daName="setVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="LLN0" fc="SP" lnInst="1" doName="SetInt2" daName="setVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="LLN0" fc="SP" lnInst="1" doName="SetInt3" daName="setVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="LLN0" fc="SP" lnInst="1" doName="SetInt4" daName="setVal" />
|
||||
</DataSet>
|
||||
|
||||
<ReportControl name="EventsRCB" confRev="1" datSet="Events" rptID="Events1" buffered="false" intgPd="1000" bufTime="50" indexed="true">
|
||||
<TrgOps period="true" />
|
||||
<OptFields seqNum="true" timeStamp="true" dataSet="true" reasonCode="true" entryID="true" configRef="true" />
|
||||
<RptEnabled max="2" />
|
||||
</ReportControl>
|
||||
|
||||
<ReportControl name="BufferedRCB" confRev="1" datSet="Events" rptID="Events1" buffered="true" intgPd="1000" bufTime="50" indexed="true">
|
||||
<TrgOps period="true" />
|
||||
<OptFields seqNum="true" timeStamp="true" dataSet="true" reasonCode="true" entryID="true" configRef="true" />
|
||||
<RptEnabled max="2" />
|
||||
</ReportControl>
|
||||
|
||||
|
||||
<GSEControl appID="events" name="gcbEvents" type="GOOSE" datSet="Events" confRev="1"/>
|
||||
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN0>
|
||||
<LN lnClass="LPHD" lnType="LPHD1" inst="1" prefix="" />
|
||||
<LN lnClass="GGIO" lnType="GGIO1" inst="1" prefix="">
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO1">
|
||||
<DAI name="ctlModel">
|
||||
<Val>direct-with-normal-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO2">
|
||||
<DAI name="ctlModel">
|
||||
<Val>sbo-with-normal-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO3">
|
||||
<DAI name="ctlModel">
|
||||
<Val>direct-with-enhanced-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO4">
|
||||
<DAI name="ctlModel">
|
||||
<Val>sbo-with-enhanced-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO5">
|
||||
<DAI name="ctlModel">
|
||||
<Val>direct-with-normal-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO6">
|
||||
<DAI name="ctlModel">
|
||||
<Val>sbo-with-normal-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO7">
|
||||
<DAI name="ctlModel">
|
||||
<Val>direct-with-enhanced-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO8">
|
||||
<DAI name="ctlModel">
|
||||
<Val>sbo-with-enhanced-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN>
|
||||
<LN lnClass="MHAI" lnType="MHAI1" inst="1" prefix="">
|
||||
<DOI name="HA">
|
||||
<DAI name="numHar">
|
||||
<Val>16</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN>
|
||||
</LDevice>
|
||||
</Server>
|
||||
</AccessPoint>
|
||||
</IED>
|
||||
<DataTypeTemplates>
|
||||
<LNodeType id="LLN01" lnClass="LLN0">
|
||||
<DO name="Mod" type="INC_1_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_1_NamPlt" />
|
||||
<DO name="SetInt1" type="ISP" />
|
||||
<DO name="SetInt2" type="ISP" />
|
||||
<DO name="SetInt3" type="ISP" />
|
||||
<DO name="SetInt4" type="ISP" />
|
||||
<DO name="SetBool1" type="SPG_1" />
|
||||
<DO name="SetBool2" type="SPG_1" />
|
||||
<DO name="SetBool3" type="SPG_1" />
|
||||
<DO name="SetBool4" type="SPG_1" />
|
||||
<DO name="Int64" type="INS_64" />
|
||||
<DO name="SetAnVal" type="ASG" />
|
||||
</LNodeType>
|
||||
<LNodeType id="LPHD1" lnClass="LPHD">
|
||||
<DO name="PhyNam" type="DPL_1_PhyNam" />
|
||||
<DO name="PhyHealth" type="INS_1_Beh" />
|
||||
<DO name="Proxy" type="SPS_1_Proxy" />
|
||||
</LNodeType>
|
||||
<LNodeType id="GGIO1" lnClass="GGIO">
|
||||
<DO name="Mod" type="INC_1_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_2_NamPlt" />
|
||||
<DO name="AnIn1" type="MV_1_AnIn1" />
|
||||
<DO name="AnIn2" type="MV_1_AnIn1" />
|
||||
<DO name="AnIn3" type="MV_1_AnIn1" />
|
||||
<DO name="AnIn4" type="MV_1_AnIn1" />
|
||||
<DO name="SPCSO1" type="SPC_1_SPCSO1" />
|
||||
<DO name="SPCSO2" type="SPC_1_SPCSO2" />
|
||||
<DO name="SPCSO3" type="SPC_1_SPCSO3" />
|
||||
<DO name="SPCSO4" type="SPC_1_SPCSO4" />
|
||||
<DO name="SPCSO5" type="SPC_1_SPCSO5" />
|
||||
<DO name="SPCSO6" type="SPC_1_SPCSO6" />
|
||||
<DO name="SPCSO7" type="SPC_1_SPCSO7" />
|
||||
<DO name="SPCSO8" type="SPC_1_SPCSO8" />
|
||||
<DO name="Ind1" type="SPS_1_Proxy" />
|
||||
<DO name="Ind2" type="SPS_1_Proxy" />
|
||||
<DO name="Ind3" type="SPS_1_Proxy" />
|
||||
<DO name="Ind4" type="SPS_1_Proxy" />
|
||||
<DO name="SchdAbsTm" type="SCA_1_SchdAbsTm" />
|
||||
</LNodeType>
|
||||
|
||||
<LNodeType id="MHAI1" lnClass="MHAI">
|
||||
<DO name="HA" type="HWYE_1_HA" />
|
||||
</LNodeType>
|
||||
|
||||
<DOType id="SPG_1" cdc="SPG">
|
||||
|
||||
<DA name="setVal" bType="BOOLEAN" fc="SP" dchg="true" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="ASG" cdc="ASG">
|
||||
<DA name="setMag" bType="Struct" type="AnalogueValue" fc="SP" dchg="true" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="ISP" cdc="INS">
|
||||
<DA name="setVal" bType="INT32" fc="SP" dchg="true" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="HWYE_1_HA" cdc="HWYE">
|
||||
<SDO name="phsAHar" type="CMV_1_phsAHar" count="16" />
|
||||
<DA name="numHar" bType="INT16U" fc="CF" dchg="true" />
|
||||
<DA name="numCyc" bType="INT16U" fc="CF" dchg="true" />
|
||||
<DA name="evalTm" bType="INT16U" fc="CF" dchg="true" />
|
||||
<DA name="frequency" bType="FLOAT32" fc="CF" dchg="true" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="SCA_1_SchdAbsTm" cdc="SCA">
|
||||
<DA name="val" bType="FLOAT32" count="24" fc="SP" dchg="true" />
|
||||
</DOType>
|
||||
|
||||
|
||||
<DOType id="CMV_1_phsAHar" cdc="CMV">
|
||||
<DA name="cVal" bType="Struct" type="Vector" fc="MX" dchg="true" dupd="true" />
|
||||
<DA name="q" bType="Quality" fc="MX" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="MX" />
|
||||
</DOType>
|
||||
|
||||
<DAType id="Vector">
|
||||
<BDA name="mag" bType="Struct" type="AnalogueValue" /> <!-- M -->
|
||||
<BDA name="ang" bType="Struct" type="AnalogueValue" /> <!-- O -->
|
||||
</DAType>
|
||||
|
||||
<DOType id="INC_1_Mod" cdc="INC">
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="INS_1_Beh" cdc="INS">
|
||||
<DA name="stVal" bType="INT32" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="INS_64" cdc="INS">
|
||||
<DA name="stVal" bType="INT64" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="LPL_1_NamPlt" cdc="LPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
<DA name="swRev" bType="VisString255" fc="DC" />
|
||||
<DA name="d" bType="VisString255" fc="DC" />
|
||||
<DA name="configRev" bType="VisString255" fc="DC" />
|
||||
<DA name="ldNs" bType="VisString255" fc="EX" />
|
||||
</DOType>
|
||||
<DOType id="DPL_1_PhyNam" cdc="DPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
</DOType>
|
||||
<DOType id="SPS_1_Proxy" cdc="SPS">
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO8" cdc="SPC">
|
||||
<DA name="SBOw" type="SPCOperate_5" bType="Struct" fc="CO" />
|
||||
<DA name="Oper" type="SPCOperate_5" bType="Struct" fc="CO" />
|
||||
<DA name="Cancel" type="SPCCancel_5" bType="Struct" fc="CO" />
|
||||
<DA name="origin" type="Originator_1" bType="Struct" fc="ST" />
|
||||
<DA name="ctlNum" bType="INT8U" fc="ST" />
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO7" cdc="SPC">
|
||||
<DA name="Oper" type="SPCOperate_5" bType="Struct" fc="CO" />
|
||||
<DA name="Cancel" type="SPCCancel_5" bType="Struct" fc="CO" />
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO3" cdc="SPC">
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="Cancel" type="SPCCancel_1" bType="Struct" fc="CO" />
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="MV_1_AnIn1" cdc="MV">
|
||||
<DA name="mag" type="" bType="Struct" fc="MX" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="MX" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="MX" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO6" cdc="SPC">
|
||||
<DA name="SBO" bType="VisString64" fc="CO" />
|
||||
<DA name="Oper" type="SPCOperate_5" bType="Struct" fc="CO" />
|
||||
<DA name="Cancel" type="SPCCancel_5" bType="Struct" fc="CO" />
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO5" cdc="SPC">
|
||||
<DA name="Oper" type="SPCOperate_5" bType="Struct" fc="CO" />
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
<DA name="Cancel" type="SPCCancel_1" bType="Struct" fc="CO" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO4" cdc="SPC">
|
||||
<DA name="SBOw" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="Cancel" type="SPCCancel_1" bType="Struct" fc="CO" />
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="LPL_2_NamPlt" cdc="LPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
<DA name="swRev" bType="VisString255" fc="DC" />
|
||||
<DA name="d" bType="VisString255" fc="DC" />
|
||||
<DA name="dU" fc="DC" bType="Unicode255"/>
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO2" cdc="SPC">
|
||||
<DA name="SBO" bType="VisString64" fc="CO" />
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="Cancel" type="SPCCancel_1" bType="Struct" fc="CO" />
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
<DA name="sboClass" type="SboClasses" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO1" cdc="SPC">
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DAType id="SPCOperate_1">
|
||||
<BDA name="ctlVal" bType="BOOLEAN" />
|
||||
<BDA name="origin" type="Originator_1" bType="Struct" />
|
||||
<BDA name="ctlNum" bType="INT8U" />
|
||||
<BDA name="T" bType="Timestamp" />
|
||||
<BDA name="Test" bType="BOOLEAN" />
|
||||
<BDA name="Check" bType="Check" />
|
||||
</DAType>
|
||||
<DAType id="Originator_1">
|
||||
<BDA name="orCat" type="OrCat" bType="Enum" />
|
||||
<BDA name="orIdent" bType="Octet64" />
|
||||
</DAType>
|
||||
<DAType id="SPCOperate_5">
|
||||
<BDA name="ctlVal" bType="BOOLEAN" />
|
||||
<BDA name="operTm" bType="Timestamp" />
|
||||
<BDA name="origin" type="Originator_1" bType="Struct" />
|
||||
<BDA name="ctlNum" bType="INT8U" />
|
||||
<BDA name="T" bType="Timestamp" />
|
||||
<BDA name="Test" bType="BOOLEAN" />
|
||||
<BDA name="Check" bType="Check" />
|
||||
</DAType>
|
||||
<DAType id="">
|
||||
<BDA name="f" bType="FLOAT32" />
|
||||
</DAType>
|
||||
<DAType id="SPCCancel_1">
|
||||
<BDA name="ctlVal" bType="BOOLEAN" />
|
||||
<BDA name="origin" type="Originator_1" bType="Struct" />
|
||||
<BDA name="ctlNum" bType="INT8U" />
|
||||
<BDA name="T" bType="Timestamp" />
|
||||
<BDA name="Test" bType="BOOLEAN" />
|
||||
</DAType>
|
||||
<DAType id="SPCCancel_5">
|
||||
<BDA name="ctlVal" bType="BOOLEAN" />
|
||||
<BDA name="operTm" bType="Timestamp" />
|
||||
<BDA name="origin" type="Originator_1" bType="Struct" />
|
||||
<BDA name="ctlNum" bType="INT8U" />
|
||||
<BDA name="T" bType="Timestamp" />
|
||||
<BDA name="Test" bType="BOOLEAN" />
|
||||
</DAType>
|
||||
|
||||
<DAType id="AnalogueValue"><!-- sec 6.3 -->
|
||||
<!--<BDA name="i" bType="INT32" /> --><!-- GC_1 -->
|
||||
<BDA name="f" bType="FLOAT32" /><!-- GC_1 -->
|
||||
</DAType>
|
||||
|
||||
|
||||
<EnumType id="CtlModels">
|
||||
<EnumVal ord="0">status-only</EnumVal>
|
||||
<EnumVal ord="1">direct-with-normal-security</EnumVal>
|
||||
<EnumVal ord="2">sbo-with-normal-security</EnumVal>
|
||||
<EnumVal ord="3">direct-with-enhanced-security</EnumVal>
|
||||
<EnumVal ord="4">sbo-with-enhanced-security</EnumVal>
|
||||
</EnumType>
|
||||
<EnumType id="SboClasses">
|
||||
<EnumVal ord="0">operate-once</EnumVal>
|
||||
<EnumVal ord="1">operate-many</EnumVal>
|
||||
</EnumType>
|
||||
<EnumType id="OrCat">
|
||||
<EnumVal ord="0">not-supported</EnumVal>
|
||||
<EnumVal ord="1">bay-control</EnumVal>
|
||||
<EnumVal ord="2">station-control</EnumVal>
|
||||
<EnumVal ord="3">remote-control</EnumVal>
|
||||
<EnumVal ord="4">automatic-bay</EnumVal>
|
||||
<EnumVal ord="5">automatic-station</EnumVal>
|
||||
<EnumVal ord="6">automatic-remote</EnumVal>
|
||||
<EnumVal ord="7">maintenance</EnumVal>
|
||||
<EnumVal ord="8">process</EnumVal>
|
||||
</EnumType>
|
||||
</DataTypeTemplates>
|
||||
</SCL>
|
@ -0,0 +1,21 @@
|
||||
|
||||
set(goose_observer_SRCS
|
||||
goose_observer.c
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
|
||||
set_source_files_properties(${goose_observer_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
|
||||
ENDIF(MSVC)
|
||||
|
||||
add_executable(goose_observer
|
||||
${goose_observer_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(goose_observer
|
||||
iec61850
|
||||
)
|
||||
|
||||
|
@ -0,0 +1,17 @@
|
||||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = goose_observer
|
||||
PROJECT_SOURCES = goose_observer.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
@ -0,0 +1,101 @@
|
||||
/*
|
||||
* goose_observer.c
|
||||
*
|
||||
* This is an example for generic GOOSE observer
|
||||
*
|
||||
* Has to be started as root in Linux.
|
||||
*/
|
||||
|
||||
#include "goose_receiver.h"
|
||||
#include "goose_subscriber.h"
|
||||
#include "hal_thread.h"
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static int running = 1;
|
||||
|
||||
void sigint_handler(int signalId)
|
||||
{
|
||||
running = 0;
|
||||
}
|
||||
|
||||
void
|
||||
gooseListener(GooseSubscriber subscriber, void* parameter)
|
||||
{
|
||||
printf("GOOSE event:\n");
|
||||
printf(" vlanTag: %s\n", GooseSubscriber_isVlanSet(subscriber) ? "found" : "NOT found");
|
||||
if (GooseSubscriber_isVlanSet(subscriber))
|
||||
{
|
||||
printf(" vlanId: %u\n", GooseSubscriber_getVlanId(subscriber));
|
||||
printf(" vlanPrio: %u\n", GooseSubscriber_getVlanPrio(subscriber));
|
||||
}
|
||||
printf(" appId: %d\n", GooseSubscriber_getAppId(subscriber));
|
||||
uint8_t macBuf[6];
|
||||
GooseSubscriber_getSrcMac(subscriber,macBuf);
|
||||
printf(" srcMac: %02X:%02X:%02X:%02X:%02X:%02X\n", macBuf[0],macBuf[1],macBuf[2],macBuf[3],macBuf[4],macBuf[5]);
|
||||
GooseSubscriber_getDstMac(subscriber,macBuf);
|
||||
printf(" dstMac: %02X:%02X:%02X:%02X:%02X:%02X\n", macBuf[0],macBuf[1],macBuf[2],macBuf[3],macBuf[4],macBuf[5]);
|
||||
printf(" goId: %s\n", GooseSubscriber_getGoId(subscriber));
|
||||
printf(" goCbRef: %s\n", GooseSubscriber_getGoCbRef(subscriber));
|
||||
printf(" dataSet: %s\n", GooseSubscriber_getDataSet(subscriber));
|
||||
printf(" confRev: %u\n", GooseSubscriber_getConfRev(subscriber));
|
||||
printf(" ndsCom: %s\n", GooseSubscriber_needsCommission(subscriber) ? "true" : "false");
|
||||
printf(" simul: %s\n", GooseSubscriber_isTest(subscriber) ? "true" : "false");
|
||||
printf(" stNum: %u sqNum: %u\n", GooseSubscriber_getStNum(subscriber),
|
||||
GooseSubscriber_getSqNum(subscriber));
|
||||
printf(" timeToLive: %u\n", GooseSubscriber_getTimeAllowedToLive(subscriber));
|
||||
|
||||
uint64_t timestamp = GooseSubscriber_getTimestamp(subscriber);
|
||||
|
||||
printf(" timestamp: %u.%u\n", (uint32_t) (timestamp / 1000), (uint32_t) (timestamp % 1000));
|
||||
printf(" message is %s\n", GooseSubscriber_isValid(subscriber) ? "valid" : "INVALID");
|
||||
|
||||
MmsValue* values = GooseSubscriber_getDataSetValues(subscriber);
|
||||
|
||||
char buffer[1024];
|
||||
|
||||
MmsValue_printToBuffer(values, buffer, 1024);
|
||||
|
||||
printf(" AllData: %s\n", buffer);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
GooseReceiver receiver = GooseReceiver_create();
|
||||
|
||||
if (argc > 1) {
|
||||
printf("Set interface id: %s\n", argv[1]);
|
||||
GooseReceiver_setInterfaceId(receiver, argv[1]);
|
||||
}
|
||||
else {
|
||||
printf("Using interface eth0\n");
|
||||
GooseReceiver_setInterfaceId(receiver, "eth0");
|
||||
}
|
||||
|
||||
GooseSubscriber subscriber = GooseSubscriber_create("", NULL);
|
||||
GooseSubscriber_setObserver(subscriber);
|
||||
GooseSubscriber_setListener(subscriber, gooseListener, NULL);
|
||||
|
||||
GooseReceiver_addSubscriber(receiver, subscriber);
|
||||
|
||||
GooseReceiver_start(receiver);
|
||||
|
||||
if (GooseReceiver_isRunning(receiver)) {
|
||||
signal(SIGINT, sigint_handler);
|
||||
|
||||
while (running) {
|
||||
Thread_sleep(100);
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("Failed to start GOOSE subscriber. Reason can be that the Ethernet interface doesn't exist or root permission are required.\n");
|
||||
}
|
||||
|
||||
GooseReceiver_stop(receiver);
|
||||
|
||||
GooseReceiver_destroy(receiver);
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
|
||||
set(iec61850_client_async_SRCS
|
||||
client_example_async.c
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
set_source_files_properties(${iec61850_client_async_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(MSVC)
|
||||
|
||||
add_executable(iec61850_client_async
|
||||
${iec61850_client_async_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(iec61850_client_async
|
||||
iec61850
|
||||
)
|
@ -0,0 +1,17 @@
|
||||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = client_example_async
|
||||
PROJECT_SOURCES = client_example_async.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
@ -0,0 +1,322 @@
|
||||
/*
|
||||
* client_example_async.c
|
||||
*
|
||||
* Shows how to use the asynchronous client API
|
||||
*
|
||||
* This example is intended to be used with server_example_basic_io.
|
||||
*/
|
||||
|
||||
#include "iec61850_client.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "hal_thread.h"
|
||||
|
||||
static ClientDataSet clientDataSet = NULL;
|
||||
|
||||
static void
|
||||
printValue(char* name, MmsValue* value)
|
||||
{
|
||||
char buf[1000];
|
||||
|
||||
MmsValue_printToBuffer(value, buf, 1000);
|
||||
|
||||
printf("%s: %s\n", name, buf);
|
||||
}
|
||||
|
||||
static void
|
||||
readObjectHandler (uint32_t invokeId, void* parameter, IedClientError err, MmsValue* value)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
printValue((char*) parameter, value);
|
||||
|
||||
MmsValue_delete(value);
|
||||
}
|
||||
else {
|
||||
printf("Failed to read object %s (err=%i)\n", (char*) parameter, err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
readDataSetHandler(uint32_t invokeId, void* parameter, IedClientError err, ClientDataSet dataSet)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
clientDataSet = dataSet;
|
||||
|
||||
printf("Data set has %d entries\n", ClientDataSet_getDataSetSize(dataSet));
|
||||
|
||||
MmsValue* values = ClientDataSet_getValues(dataSet);
|
||||
|
||||
if (MmsValue_getType(values) == MMS_ARRAY) {
|
||||
int i;
|
||||
for (i = 0; i < MmsValue_getArraySize(values); i++) {
|
||||
printf(" [%i]", i);
|
||||
printValue("", MmsValue_getElement(values, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("Failed to read data set (err=%i)\n", err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
writeDataSetHandler(uint32_t invokeId, void* parameter, IedClientError err, LinkedList /* <MmsValue*> */accessResults)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
|
||||
if (accessResults) {
|
||||
|
||||
int i = 0;
|
||||
|
||||
LinkedList element = LinkedList_getNext(accessResults);
|
||||
|
||||
while (element) {
|
||||
MmsValue* accessResultValue = (MmsValue*) LinkedList_getData(element);
|
||||
|
||||
printf(" access-result[%i]", i);
|
||||
printValue("", accessResultValue);
|
||||
|
||||
|
||||
element = LinkedList_getNext(element);
|
||||
i++;
|
||||
}
|
||||
|
||||
LinkedList_destroyDeep(accessResults, (LinkedListValueDeleteFunction) MmsValue_delete);
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("Failed to write data set (err=%i)\n", err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reportCallbackFunction(void* parameter, ClientReport report)
|
||||
{
|
||||
MmsValue* dataSetValues = ClientReport_getDataSetValues(report);
|
||||
|
||||
printf("received report for %s\n", ClientReport_getRcbReference(report));
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 4; i++) {
|
||||
ReasonForInclusion reason = ClientReport_getReasonForInclusion(report, i);
|
||||
|
||||
if (reason != IEC61850_REASON_NOT_INCLUDED) {
|
||||
printf(" GGIO1.SPCSO%i.stVal: %i (included for reason %i)\n", i,
|
||||
MmsValue_getBoolean(MmsValue_getElement(dataSetValues, i)), reason);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
getVarSpecHandler (uint32_t invokeId, void* parameter, IedClientError err, MmsVariableSpecification* spec)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
printf("variable: %s has type %d\n", (char*) parameter, MmsVariableSpecification_getType(spec));
|
||||
|
||||
MmsVariableSpecification_destroy(spec);
|
||||
}
|
||||
else {
|
||||
printf("Failed to get variable specification for object %s (err=%i)\n", (char*) parameter, err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
getNameListHandler(uint32_t invokeId, void* parameter, IedClientError err, LinkedList nameList, bool moreFollows)
|
||||
{
|
||||
if (err != IED_ERROR_OK) {
|
||||
printf("Get name list error: %d\n", err);
|
||||
}
|
||||
else {
|
||||
|
||||
char* ldName = (char*) parameter;
|
||||
|
||||
LinkedList element = LinkedList_getNext(nameList);
|
||||
|
||||
while (element) {
|
||||
|
||||
char* variableName = (char*) LinkedList_getData(element);
|
||||
|
||||
printf(" %s/%s\n", ldName, variableName);
|
||||
|
||||
element = LinkedList_getNext(element);
|
||||
}
|
||||
|
||||
LinkedList_destroy(nameList);
|
||||
|
||||
free(ldName);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
getServerDirectoryHandler(uint32_t invokeId, void* parameter, IedClientError err, LinkedList nameList, bool moreFollows)
|
||||
{
|
||||
IedConnection con = (IedConnection) parameter;
|
||||
|
||||
if (err != IED_ERROR_OK) {
|
||||
printf("Get server directory error: %d\n", err);
|
||||
}
|
||||
else {
|
||||
LinkedList element = LinkedList_getNext(nameList);
|
||||
|
||||
/* Call logical device variables for each logical node */
|
||||
while (element) {
|
||||
|
||||
char* ldName = (char*) LinkedList_getData(element);
|
||||
|
||||
IedClientError cerr;
|
||||
|
||||
printf("LD: %s variables:\n", ldName);
|
||||
|
||||
IedConnection_getLogicalDeviceVariablesAsync(con, &cerr, ldName, NULL, NULL, getNameListHandler, strdup(ldName));
|
||||
|
||||
printf("LD: %s data sets:\n", ldName);
|
||||
|
||||
IedConnection_getLogicalDeviceDataSetsAsync(con, &err, ldName, NULL, NULL, getNameListHandler, strdup(ldName));
|
||||
|
||||
element = LinkedList_getNext(element);
|
||||
}
|
||||
|
||||
LinkedList_destroy(nameList);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
controlActionHandler(uint32_t invokeId, void* parameter, IedClientError err, ControlActionType type, bool success)
|
||||
{
|
||||
printf("control: ID: %d type: %i err: %d success: %i\n", invokeId, type, err, success);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
char* hostname;
|
||||
int tcpPort = 102;
|
||||
|
||||
if (argc > 1)
|
||||
hostname = argv[1];
|
||||
else
|
||||
hostname = "localhost";
|
||||
|
||||
if (argc > 2)
|
||||
tcpPort = atoi(argv[2]);
|
||||
|
||||
IedClientError error;
|
||||
|
||||
IedConnection con = IedConnection_create();
|
||||
|
||||
IedConnection_connectAsync(con, &error, hostname, tcpPort);
|
||||
|
||||
if (error == IED_ERROR_OK) {
|
||||
|
||||
bool success = true;
|
||||
|
||||
while (IedConnection_getState(con) != IED_STATE_CONNECTED) {
|
||||
|
||||
if (IedConnection_getState(con) == IED_STATE_CLOSED) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
Thread_sleep(10);
|
||||
}
|
||||
|
||||
if (success) {
|
||||
|
||||
IedConnection_getServerDirectoryAsync(con, &error, NULL, NULL, getServerDirectoryHandler, con);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("read server directory error %i\n", error);
|
||||
}
|
||||
|
||||
Thread_sleep(1000);
|
||||
|
||||
|
||||
IedConnection_readObjectAsync(con, &error, "simpleIOGenericIO/GGIO1.AnIn1.mag.f", IEC61850_FC_MX, readObjectHandler, "simpleIOGenericIO/GGIO1.AnIn1.mag.f");
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("read object error %i\n", error);
|
||||
}
|
||||
|
||||
IedConnection_readObjectAsync(con, &error, "simpleIOGenericIO/GGIO1.AnIn2.mag.f", IEC61850_FC_MX, readObjectHandler, "simpleIOGenericIO/GGIO1.AnIn2.mag.f");
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("read object error %i\n", error);
|
||||
}
|
||||
|
||||
IedConnection_getVariableSpecificationAsync(con, &error, "simpleIOGenericIO/GGIO1.AnIn1", IEC61850_FC_MX, getVarSpecHandler, "simpleIOGenericIO/GGIO1.AnIn1");
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("get variable specification error %i\n", error);
|
||||
}
|
||||
|
||||
IedConnection_readDataSetValuesAsync(con, &error, "simpleIOGenericIO/LLN0.Events", NULL, readDataSetHandler, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("read data set error %i\n", error);
|
||||
}
|
||||
|
||||
LinkedList values = LinkedList_create();
|
||||
LinkedList_add(values, MmsValue_newBoolean(true));
|
||||
LinkedList_add(values, MmsValue_newBoolean(false));
|
||||
LinkedList_add(values, MmsValue_newBoolean(true));
|
||||
LinkedList_add(values, MmsValue_newBoolean(false));
|
||||
|
||||
IedConnection_writeDataSetValuesAsync(con, &error, "simpleIOGenericIO/LLN0.Events", values, writeDataSetHandler, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("write data set error %i\n", error);
|
||||
}
|
||||
|
||||
LinkedList_destroyDeep(values, (LinkedListValueDeleteFunction) MmsValue_delete);
|
||||
|
||||
Thread_sleep(1000);
|
||||
|
||||
ControlObjectClient controlClient = ControlObjectClient_create("simpleIOGenericIO/GGIO1.SPCSO1", con);
|
||||
|
||||
if (controlClient != NULL) {
|
||||
|
||||
ControlObjectClient_setOrigin(controlClient, "test1", CONTROL_ORCAT_AUTOMATIC_REMOTE);
|
||||
|
||||
MmsValue* ctlVal = MmsValue_newBoolean(true);
|
||||
|
||||
ControlObjectClient_operateAsync(controlClient, &error, ctlVal, 0, controlActionHandler, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("Failed to send operate %i\n", error);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
printf("Failed to connect to control object\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Thread_sleep(1000);
|
||||
|
||||
IedConnection_releaseAsync(con, &error);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("Release returned error: %d\n", error);
|
||||
}
|
||||
else {
|
||||
|
||||
while (IedConnection_getState(con) != IED_STATE_CLOSED) {
|
||||
Thread_sleep(10);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("Failed to connect to %s:%i\n", hostname, tcpPort);
|
||||
}
|
||||
|
||||
if (clientDataSet)
|
||||
ClientDataSet_destroy(clientDataSet);
|
||||
|
||||
IedConnection_destroy(con);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,17 @@
|
||||
|
||||
set(iec61850_client_no_thread_SRCS
|
||||
client_example_no_thread.c
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
set_source_files_properties(${iec61850_client_no_thread_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(MSVC)
|
||||
|
||||
add_executable(iec61850_client_no_thread
|
||||
${iec61850_client_no_thread_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(iec61850_client_no_thread
|
||||
iec61850
|
||||
)
|
@ -0,0 +1,17 @@
|
||||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = client_example_no_thread
|
||||
PROJECT_SOURCES = client_example_no_thread.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
@ -0,0 +1,461 @@
|
||||
/*
|
||||
* client_example_no_thread.c
|
||||
*
|
||||
* Shows how to use IedConnection in non-thread mode together with the asynchronous client API
|
||||
*
|
||||
* NOTE:
|
||||
* - in non-thread mode only asynchronous service functions can be used!
|
||||
* - the IedConnection_tick function has to be called periodically
|
||||
* - the asynchronous API returns service results by callback functions
|
||||
*
|
||||
* This example is intended to be used with server_example_basic_io.
|
||||
*/
|
||||
|
||||
#include "iec61850_client.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "hal_thread.h"
|
||||
|
||||
static ClientDataSet clientDataSet = NULL;
|
||||
|
||||
static void
|
||||
printValue(char* name, MmsValue* value)
|
||||
{
|
||||
char buf[1000];
|
||||
|
||||
MmsValue_printToBuffer(value, buf, 1000);
|
||||
|
||||
printf("%s: %s\n", name, buf);
|
||||
}
|
||||
|
||||
/* callback function for IedConnection_readObjectAsync */
|
||||
static void
|
||||
readObjectHandler (uint32_t invokeId, void* parameter, IedClientError err, MmsValue* value)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
printValue((char*) parameter, value);
|
||||
|
||||
MmsValue_delete(value);
|
||||
}
|
||||
else {
|
||||
printf("Failed to read object %s (err=%i)\n", (char*) parameter, err);
|
||||
}
|
||||
}
|
||||
|
||||
/* callback function for IedConnection_readDataSetValuesAsync */
|
||||
static void
|
||||
readDataSetHandler(uint32_t invokeId, void* parameter, IedClientError err, ClientDataSet dataSet)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
clientDataSet = dataSet;
|
||||
|
||||
printf("Data set has %d entries\n", ClientDataSet_getDataSetSize(dataSet));
|
||||
|
||||
MmsValue* values = ClientDataSet_getValues(dataSet);
|
||||
|
||||
if (MmsValue_getType(values) == MMS_ARRAY) {
|
||||
int i;
|
||||
for (i = 0; i < MmsValue_getArraySize(values); i++) {
|
||||
printf(" [%i]", i);
|
||||
printValue("", MmsValue_getElement(values, i));
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("Failed to read data set (err=%i)\n", err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
writeDataSetHandler(uint32_t invokeId, void* parameter, IedClientError err, LinkedList /* <MmsValue*> */accessResults)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
|
||||
if (accessResults) {
|
||||
|
||||
int i = 0;
|
||||
|
||||
LinkedList element = LinkedList_getNext(accessResults);
|
||||
|
||||
while (element) {
|
||||
MmsValue* accessResultValue = LinkedList_getData(element);
|
||||
|
||||
printf(" access-result[%i]", i);
|
||||
printValue("", accessResultValue);
|
||||
|
||||
|
||||
element = LinkedList_getNext(element);
|
||||
i++;
|
||||
}
|
||||
|
||||
LinkedList_destroyDeep(accessResults, (LinkedListValueDeleteFunction) MmsValue_delete);
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("Failed to write data set (err=%i)\n", err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reportCallbackFunction(void* parameter, ClientReport report)
|
||||
{
|
||||
MmsValue* dataSetValues = ClientReport_getDataSetValues(report);
|
||||
|
||||
printf("received report for %s\n", ClientReport_getRcbReference(report));
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 4; i++) {
|
||||
ReasonForInclusion reason = ClientReport_getReasonForInclusion(report, i);
|
||||
|
||||
if (reason != IEC61850_REASON_NOT_INCLUDED) {
|
||||
printf(" GGIO1.SPCSO%i.stVal: %i (included for reason %i)\n", i,
|
||||
MmsValue_getBoolean(MmsValue_getElement(dataSetValues, i)), reason);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
getControlVariableVarSpecHandler(uint32_t invokeId, void* parameter, IedClientError err, MmsVariableSpecification* spec)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
|
||||
MmsVariableSpecification** ctlVarSpec = (MmsVariableSpecification**)parameter;
|
||||
|
||||
*ctlVarSpec = spec;
|
||||
}
|
||||
else {
|
||||
printf("Failed to get variable specification for object %s (err=%i)\n", (char*) parameter, err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
getVarSpecHandler (uint32_t invokeId, void* parameter, IedClientError err, MmsVariableSpecification* spec)
|
||||
{
|
||||
if (err == IED_ERROR_OK) {
|
||||
|
||||
printf("variable: %s has type %d\n", (char*) parameter, MmsVariableSpecification_getType(spec));
|
||||
|
||||
MmsVariableSpecification_destroy(spec);
|
||||
}
|
||||
else {
|
||||
printf("Failed to get variable specification for object %s (err=%i)\n", (char*) parameter, err);
|
||||
}
|
||||
}
|
||||
|
||||
/* callback function for service functions IedConnection_getLogicalDeviceVariablesAsync, IedConnection_getLogicalDeviceDataSetsAsync */
|
||||
static void
|
||||
getNameListHandler(uint32_t invokeId, void* parameter, IedClientError err, LinkedList nameList, bool moreFollows)
|
||||
{
|
||||
if (err != IED_ERROR_OK) {
|
||||
printf("Get name list error: %d\n", err);
|
||||
}
|
||||
else {
|
||||
|
||||
char* ldName = (char*) parameter;
|
||||
|
||||
LinkedList element = LinkedList_getNext(nameList);
|
||||
|
||||
while (element) {
|
||||
|
||||
char* variableName = (char*) LinkedList_getData(element);
|
||||
|
||||
printf(" %s/%s\n", ldName, variableName);
|
||||
|
||||
element = LinkedList_getNext(element);
|
||||
}
|
||||
|
||||
LinkedList_destroy(nameList);
|
||||
|
||||
free(ldName);
|
||||
}
|
||||
}
|
||||
|
||||
/* callback function for IedConnection_getServerDirectoryAsync */
|
||||
static void
|
||||
getServerDirectoryHandler(uint32_t invokeId, void* parameter, IedClientError err, LinkedList nameList, bool moreFollows)
|
||||
{
|
||||
IedConnection con = (IedConnection) parameter;
|
||||
|
||||
if (err != IED_ERROR_OK) {
|
||||
printf("Get server directory error: %d\n", err);
|
||||
}
|
||||
else {
|
||||
LinkedList element = LinkedList_getNext(nameList);
|
||||
|
||||
/* Call logical device variables for each logical node */
|
||||
while (element) {
|
||||
|
||||
char* ldName = (char*) LinkedList_getData(element);
|
||||
|
||||
printf("LD: %s variables:\n", ldName);
|
||||
|
||||
IedConnection_getLogicalDeviceVariablesAsync(con, &err, ldName, NULL, NULL, getNameListHandler, strdup(ldName));
|
||||
|
||||
printf("LD: %s data sets:\n", ldName);
|
||||
|
||||
IedConnection_getLogicalDeviceDataSetsAsync(con, &err, ldName, NULL, NULL, getNameListHandler, strdup(ldName));
|
||||
|
||||
element = LinkedList_getNext(element);
|
||||
}
|
||||
|
||||
LinkedList_destroy(nameList);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
controlActionHandler(uint32_t invokeId, void* parameter, IedClientError err, ControlActionType type, bool success)
|
||||
{
|
||||
printf("control: ID: %d type: %i err: %d success: %i\n", invokeId, type, err, success);
|
||||
}
|
||||
|
||||
static void
|
||||
stateChangedHandler(void* parameter, IedConnection connection, IedConnectionState newState)
|
||||
{
|
||||
printf("Connection state changed: ");
|
||||
|
||||
switch (newState) {
|
||||
case IED_STATE_CLOSED:
|
||||
printf("CLOSED\n");
|
||||
break;
|
||||
case IED_STATE_CLOSING:
|
||||
printf("CLOSING\n");
|
||||
break;
|
||||
case IED_STATE_CONNECTING:
|
||||
printf("CONNECTING\n");
|
||||
break;
|
||||
case IED_STATE_CONNECTED:
|
||||
printf("CONNECTED\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
getRCBValuesHandler (uint32_t invokeId, void* parameter, IedClientError err, ClientReportControlBlock rcb)
|
||||
{
|
||||
if (parameter) {
|
||||
printf("get rcb values handler: %s (error:%i)\n", (char*)parameter, err);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
genericServiceHandler (uint32_t invokeId, void* parameter, IedClientError err)
|
||||
{
|
||||
if (parameter) {
|
||||
printf("generic service handler: %s (error:%i)\n", (char*)parameter, err);
|
||||
}
|
||||
}
|
||||
|
||||
static void waitWithTick(IedConnection con, int waitMs)
|
||||
{
|
||||
uint64_t startTime = Hal_getTimeInMs();
|
||||
|
||||
while (Hal_getTimeInMs() < (startTime + (uint64_t) waitMs))
|
||||
{
|
||||
if (IedConnection_tick(con) == true)
|
||||
Thread_sleep(10);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv) {
|
||||
|
||||
char* hostname;
|
||||
int tcpPort = 102;
|
||||
|
||||
if (argc > 1)
|
||||
hostname = argv[1];
|
||||
else
|
||||
hostname = "localhost";
|
||||
|
||||
if (argc > 2)
|
||||
tcpPort = atoi(argv[2]);
|
||||
|
||||
IedClientError error;
|
||||
|
||||
ClientReportControlBlock rcb = NULL;
|
||||
|
||||
/* create new IedConnection with non-thread mode */
|
||||
IedConnection con = IedConnection_createEx(NULL, false);
|
||||
|
||||
/* track connection state change */
|
||||
IedConnection_installStateChangedHandler(con, stateChangedHandler, NULL);
|
||||
|
||||
/* invoke association with server */
|
||||
IedConnection_connectAsync(con, &error, hostname, tcpPort);
|
||||
|
||||
if (error == IED_ERROR_OK) {
|
||||
|
||||
bool success = true;
|
||||
|
||||
/* Call IedConnection_tick until state is CONNECTED or CLOSED */
|
||||
while (IedConnection_getState(con) != IED_STATE_CONNECTED) {
|
||||
|
||||
if (IedConnection_getState(con) == IED_STATE_CLOSED) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (IedConnection_tick(con) == true)
|
||||
Thread_sleep(10);
|
||||
}
|
||||
|
||||
if (success) {
|
||||
|
||||
IedConnection_getServerDirectoryAsync(con, &error, NULL, NULL, getServerDirectoryHandler, con);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("read server directory error %i\n", error);
|
||||
}
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
rcb = ClientReportControlBlock_create("simpleIOGenericIO/LLN0.RP.EventsRCB01");
|
||||
|
||||
/* Read RCB values */
|
||||
IedConnection_getRCBValuesAsync(con, &error, "simpleIOGenericIO/LLN0.RP.EventsRCB01", rcb, getRCBValuesHandler, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("getRCBValues service error!\n");
|
||||
}
|
||||
else {
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
/* prepare the parameters of the RCP */
|
||||
ClientReportControlBlock_setResv(rcb, true);
|
||||
ClientReportControlBlock_setDataSetReference(rcb, "simpleIOGenericIO/LLN0$Events"); /* NOTE the "$" instead of "." ! */
|
||||
ClientReportControlBlock_setRptEna(rcb, true);
|
||||
ClientReportControlBlock_setGI(rcb, true);
|
||||
|
||||
/* Configure the report receiver */
|
||||
IedConnection_installReportHandler(con, "simpleIOGenericIO/LLN0.RP.EventsRCB", ClientReportControlBlock_getRptId(rcb), reportCallbackFunction,
|
||||
NULL);
|
||||
|
||||
/* Write RCB parameters and enable report */
|
||||
IedConnection_setRCBValuesAsync(con, &error, rcb, RCB_ELEMENT_RESV | RCB_ELEMENT_DATSET | RCB_ELEMENT_RPT_ENA | RCB_ELEMENT_GI, true, genericServiceHandler, NULL);
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
}
|
||||
|
||||
IedConnection_readObjectAsync(con, &error, "simpleIOGenericIO/GGIO1.AnIn1.mag.f", IEC61850_FC_MX, readObjectHandler, "simpleIOGenericIO/GGIO1.AnIn1.mag.f");
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("read object error %i\n", error);
|
||||
}
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
IedConnection_readObjectAsync(con, &error, "simpleIOGenericIO/GGIO1.AnIn2.mag.f", IEC61850_FC_MX, readObjectHandler, "simpleIOGenericIO/GGIO1.AnIn2.mag.f");
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("read object error %i\n", error);
|
||||
}
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
IedConnection_getVariableSpecificationAsync(con, &error, "simpleIOGenericIO/GGIO1.AnIn1", IEC61850_FC_MX, getVarSpecHandler, "simpleIOGenericIO/GGIO1.AnIn1");
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("get variable specification error %i\n", error);
|
||||
}
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
IedConnection_readDataSetValuesAsync(con, &error, "simpleIOGenericIO/LLN0.Events", NULL, readDataSetHandler, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("read data set error %i\n", error);
|
||||
}
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
LinkedList values = LinkedList_create();
|
||||
LinkedList_add(values, MmsValue_newBoolean(true));
|
||||
LinkedList_add(values, MmsValue_newBoolean(false));
|
||||
LinkedList_add(values, MmsValue_newBoolean(true));
|
||||
LinkedList_add(values, MmsValue_newBoolean(false));
|
||||
|
||||
IedConnection_writeDataSetValuesAsync(con, &error, "simpleIOGenericIO/LLN0.Events", values, writeDataSetHandler, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("write data set error %i\n", error);
|
||||
}
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
LinkedList_destroyDeep(values, (LinkedListValueDeleteFunction) MmsValue_delete);
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
/* Get the variable specification for the controllable data object by online service */
|
||||
MmsVariableSpecification* ctlVarSpec = NULL;
|
||||
|
||||
IedConnection_getVariableSpecificationAsync(con, &error, "simpleIOGenericIO/GGIO1.SPCSO1", IEC61850_FC_CO,
|
||||
getControlVariableVarSpecHandler, &ctlVarSpec);
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
if (ctlVarSpec != NULL) {
|
||||
|
||||
/* ControlObjectClient_create function cannot be used in non-thread mode - use ControlObjectClient_createEx instead */
|
||||
ControlObjectClient controlClient = ControlObjectClient_createEx("simpleIOGenericIO/GGIO1.SPCSO1", con,
|
||||
CONTROL_MODEL_DIRECT_NORMAL, ctlVarSpec);
|
||||
|
||||
if (controlClient != NULL) {
|
||||
|
||||
ControlObjectClient_setOrigin(controlClient, "test1", CONTROL_ORCAT_AUTOMATIC_REMOTE);
|
||||
|
||||
MmsValue* ctlVal = MmsValue_newBoolean(true);
|
||||
|
||||
ControlObjectClient_operateAsync(controlClient, &error, ctlVal, 0, controlActionHandler, NULL);
|
||||
|
||||
waitWithTick(con, 1000);
|
||||
|
||||
MmsValue_delete(ctlVal);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("Failed to send operate %i\n", error);
|
||||
}
|
||||
|
||||
ControlObjectClient_destroy(controlClient);
|
||||
}
|
||||
else {
|
||||
printf("Failed to connect to control object\n");
|
||||
}
|
||||
|
||||
MmsVariableSpecification_destroy(ctlVarSpec);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
IedConnection_releaseAsync(con, &error);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("Release returned error: %d\n", error);
|
||||
}
|
||||
else {
|
||||
|
||||
/* Call IedConnection_tick until state is CLOSED */
|
||||
while (IedConnection_getState(con) != IED_STATE_CLOSED) {
|
||||
if (IedConnection_tick(con) == true)
|
||||
Thread_sleep(10);
|
||||
}
|
||||
}
|
||||
|
||||
if (rcb != NULL)
|
||||
ClientReportControlBlock_destroy(rcb);
|
||||
}
|
||||
else {
|
||||
printf("Failed to connect to %s:%i\n", hostname, tcpPort);
|
||||
}
|
||||
|
||||
if (clientDataSet)
|
||||
ClientDataSet_destroy(clientDataSet);
|
||||
|
||||
IedConnection_destroy(con);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,17 @@
|
||||
|
||||
set(iec61850_client_file_async_SRCS
|
||||
client_example_async.c
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
set_source_files_properties(${iec61850_client_file_async_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(MSVC)
|
||||
|
||||
add_executable(iec61850_client_file_async
|
||||
${iec61850_client_file_async_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(iec61850_client_file_async
|
||||
iec61850
|
||||
)
|
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* client_example_async.c
|
||||
*
|
||||
* Shows how to use the asynchronous client API
|
||||
*
|
||||
* This example is intended to be used with server_example_basic_io.
|
||||
*/
|
||||
|
||||
#include "iec61850_client.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "hal_thread.h"
|
||||
|
||||
static bool fileTransferComplete = false;
|
||||
|
||||
static bool
|
||||
getFileAsyncHandler (uint32_t invokeId, void* parameter, IedClientError err, uint32_t originalInvokeId,
|
||||
uint8_t* buffer, uint32_t bytesRead, bool moreFollows)
|
||||
{
|
||||
if ((err != IED_ERROR_OK) || (moreFollows == false)) {
|
||||
|
||||
if (err == IED_ERROR_OK) {
|
||||
printf("Received %d bytes\n", bytesRead);
|
||||
}
|
||||
|
||||
printf("File transfer complete (err:%d)\n", err);
|
||||
fileTransferComplete = true;
|
||||
}
|
||||
else {
|
||||
printf("Received %d bytes\n", bytesRead);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
char* hostname;
|
||||
char* filename = NULL;
|
||||
|
||||
if (argc > 1)
|
||||
hostname = argv[1];
|
||||
else
|
||||
hostname = "localhost";
|
||||
|
||||
if (argc > 2)
|
||||
filename = argv[2];
|
||||
|
||||
IedClientError error;
|
||||
|
||||
IedConnection con = IedConnection_create();
|
||||
|
||||
IedConnection_connectAsync(con, &error, hostname, 102);
|
||||
|
||||
if (error == IED_ERROR_OK) {
|
||||
|
||||
bool success = true;
|
||||
|
||||
while (IedConnection_getState(con) != IED_STATE_CONNECTED) {
|
||||
|
||||
if (IedConnection_getState(con) == IED_STATE_CLOSED) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
|
||||
Thread_sleep(10);
|
||||
}
|
||||
|
||||
if (success) {
|
||||
|
||||
if (filename) {
|
||||
IedConnection_getFileAsync(con, &error, filename, getFileAsyncHandler, NULL);
|
||||
|
||||
printf("Started file download\n");
|
||||
|
||||
while (fileTransferComplete == false)
|
||||
Thread_sleep(10);
|
||||
}
|
||||
}
|
||||
|
||||
Thread_sleep(1000);
|
||||
|
||||
IedConnection_releaseAsync(con, &error);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("Release returned error: %d\n", error);
|
||||
}
|
||||
else {
|
||||
|
||||
while (IedConnection_getState(con) != IED_STATE_CLOSED) {
|
||||
Thread_sleep(10);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("Failed to connect to %s\n", hostname);
|
||||
}
|
||||
|
||||
|
||||
IedConnection_destroy(con);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<!--2014.05.12-21:21:53 Academic and Evaluation License (AEL) Powered by Masson Technologies (www.massontech.com)-->
|
||||
<!--2014.05.12-21:21:53 This file is generated using RedWind IED Modeler (www.iedmodeler.com)-->
|
||||
<!--2014.05.12-21:21:53 ????? RedWind IED Modeler ???? (www.iedmodeler.com)-->
|
||||
<SCL xmlns="http://www.iec.ch/61850/2003/SCL" revision="" version="">
|
||||
<Header id="" nameStructure="IEDName" toolID="RedWind IED Modeler">
|
||||
<History>
|
@ -0,0 +1,35 @@
|
||||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = server_example_basic_io
|
||||
PROJECT_SOURCES = server_example_basic_io.c
|
||||
PROJECT_SOURCES += static_model.c
|
||||
|
||||
PROJECT_ICD_FILE = simpleIO_direct_control.cid
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
LDLIBS += -lm -lpthread
|
||||
|
||||
CP = cp
|
||||
|
||||
LIBIEC61850_INSTALL_DIR = ../../.install
|
||||
|
||||
LIBIEC61850_LIB_DIR = $(LIBIEC61850_INSTALL_DIR)/lib
|
||||
LIBIEC61850_INC_DIR = $(LIBIEC61850_INSTALL_DIR)/include
|
||||
LIBIEC61850_INCLUDES = -I$(LIBIEC61850_INC_DIR)
|
||||
|
||||
INCLUDES += $(LIBIEC61850_INCLUDES)
|
||||
|
||||
model: $(PROJECT_ICD_FILE)
|
||||
java -jar $(LIBIEC_HOME)/tools/model_generator/genmodel.jar $(PROJECT_ICD_FILE)
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) -L$(LIBIEC61850_LIB_DIR) -liec61850 $(LDLIBS)
|
||||
mkdir -p vmd-filestore
|
||||
$(CP) $(PROJECT_BINARY_NAME) vmd-filestore/IEDSERVER.BIN
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
||||
rm -f vmd-filestore/IEDSERVER.BIN
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue