Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
PastureGateway
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
steven.sha
PastureGateway
Commits
0bbb9e7b
Commit
0bbb9e7b
authored
Jun 14, 2019
by
leon.huang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add channel communication fail times
parent
051dba9a
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
197 additions
and
4238 deletions
+197
-4238
ModualControl.cs
ModbusDemo/MessageFormat/ModualControl.cs
+71
-45
ModSearch.cs
ModbusDemo/ModbusDemo/Common/ModSearch.cs
+0
-173
WTModbus.cs
ModbusDemo/ModbusDemo/Common/WTModbus.cs
+0
-165
Demo_818X.Designer.cs
ModbusDemo/ModbusDemo/Demo_818X.Designer.cs
+0
-526
Demo_818X.cs
ModbusDemo/ModbusDemo/Demo_818X.cs
+0
-310
Demo_818X.resx
ModbusDemo/ModbusDemo/Demo_818X.resx
+0
-827
LibModbus.dll
ModbusDemo/ModbusDemo/Lib/LibModbus.dll
+0
-0
LibSocket.dll
ModbusDemo/ModbusDemo/Lib/LibSocket.dll
+0
-0
MDemo.Designer.cs
ModbusDemo/ModbusDemo/MDemo.Designer.cs
+0
-544
MDemo.cs
ModbusDemo/ModbusDemo/MDemo.cs
+0
-106
MDemo.resx
ModbusDemo/ModbusDemo/MDemo.resx
+0
-120
ModbusDemo.csproj
ModbusDemo/ModbusDemo/ModbusDemo.csproj
+0
-112
ProTest.Designer.cs
ModbusDemo/ModbusDemo/ProTest.Designer.cs
+0
-492
ProTest.cs
ModbusDemo/ModbusDemo/ProTest.cs
+0
-287
ProTest.resx
ModbusDemo/ModbusDemo/ProTest.resx
+0
-120
Program.cs
ModbusDemo/ModbusDemo/Program.cs
+0
-23
AssemblyInfo.cs
ModbusDemo/ModbusDemo/Properties/AssemblyInfo.cs
+0
-36
Resources.Designer.cs
ModbusDemo/ModbusDemo/Properties/Resources.Designer.cs
+0
-73
Resources.resx
ModbusDemo/ModbusDemo/Properties/Resources.resx
+0
-124
Settings.Designer.cs
ModbusDemo/ModbusDemo/Properties/Settings.Designer.cs
+0
-30
Settings.settings
ModbusDemo/ModbusDemo/Properties/Settings.settings
+0
-7
057.png
ModbusDemo/ModbusDemo/Resources/057.png
+0
-0
ModualPoll.cs
ModbusDemo/Modular/ModualPoll.cs
+27
-3
modual.cs
ModbusDemo/Modular/modual.cs
+7
-2
Form1.cs
ModbusDemo/windows/Form1.cs
+92
-113
No files found.
ModbusDemo/MessageFormat/ModualControl.cs
View file @
0bbb9e7b
...
...
@@ -11,6 +11,8 @@ using ModbusDemo.windows;
using
ModbusDemo
;
using
ModbusDemo.Modular
;
using
ModbusDemo.Common
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
ModbusDemo.MessageFormat
{
public
class
ModualControl
...
...
@@ -60,15 +62,19 @@ namespace ModbusDemo.MessageFormat
public
bool
[]
bControlBit
=
new
bool
[
8
];
}
public
static
List
<
ModualCntrol
>
liModuualControl
=
new
List
<
ModualCntrol
>();
public
const
ushort
usDefineControlTimes
=
1
;
string
strMapCfg
=
"[{ srcId: 123, srcType: \"WTDR66C\", srcCh:\"d0\", dstCh:[\"d0\",\"d1\"]}"
;
public
static
void
vGetaWay_Receive_Control
(
string
sDataString
,
out
string
stResponseData
)
{
byte
byModualIndex
=
0
;
MqttRoot
cControl
=
new
MqttRoot
();
var
jsonObj
=
new
JObject
();
MqttRoot
cControl
=
new
MqttRoot
();
var
jsonObj
=
new
JObject
();
try
{
cControl
=
JsonConvert
.
DeserializeObject
<
MqttRoot
>(
sDataString
);
jsonObj
=
JObject
.
Parse
(
sDataString
);
}
...
...
@@ -97,8 +103,8 @@ namespace ModbusDemo.MessageFormat
}
else
{
byModualIndex
=
0
;
cModualCntrol
.
sbModualIndex
=
j
;
byModualIndex
=
0
xFF
;
cModualCntrol
.
sbModualIndex
=
0xFF
;
}
}
if
(
jsonObj
[
"ss"
][
i
][
"op"
]
!=
null
)
...
...
@@ -106,49 +112,49 @@ namespace ModbusDemo.MessageFormat
if
(
jsonObj
[
"ss"
][
i
][
"op"
][
"d0"
]
!=
null
)
{
cControl
.
ss
[
i
].
op
.
bD0HasConfig
=
true
;
cModualCntrol
.
bControlData
[
i
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d0
);
cModualCntrol
.
bControlData
[
0
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d0
);
cModualCntrol
.
bControlBit
[
0
]
=
true
;
}
if
(
jsonObj
[
"ss"
][
i
][
"op"
][
"d1"
]
!=
null
)
{
cControl
.
ss
[
i
].
op
.
bD1HasConfig
=
true
;
cModualCntrol
.
bControlData
[
i
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d1
);
cModualCntrol
.
bControlData
[
1
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d1
);
cModualCntrol
.
bControlBit
[
1
]
=
true
;
}
if
(
jsonObj
[
"ss"
][
i
][
"op"
][
"d2"
]
!=
null
)
{
cControl
.
ss
[
i
].
op
.
bD2HasConfig
=
true
;
cModualCntrol
.
bControlData
[
i
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d2
);
cModualCntrol
.
bControlData
[
2
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d2
);
cModualCntrol
.
bControlBit
[
2
]
=
true
;
}
if
(
jsonObj
[
"ss"
][
i
][
"op"
][
"d3"
]
!=
null
)
{
cControl
.
ss
[
0
].
op
.
bD3HasConfig
=
true
;
cModualCntrol
.
bControlData
[
i
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d3
);
cModualCntrol
.
bControlData
[
3
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d3
);
cModualCntrol
.
bControlBit
[
3
]
=
true
;
}
if
(
jsonObj
[
"ss"
][
i
][
"op"
][
"d4"
]
!=
null
)
{
cControl
.
ss
[
i
].
op
.
bD4HasConfig
=
true
;
cModualCntrol
.
bControlData
[
i
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d4
);
cModualCntrol
.
bControlData
[
4
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d4
);
cModualCntrol
.
bControlBit
[
4
]
=
true
;
}
if
(
jsonObj
[
"ss"
][
i
][
"op"
][
"d5"
]
!=
null
)
{
cControl
.
ss
[
i
].
op
.
bD5HasConfig
=
true
;
cModualCntrol
.
bControlData
[
i
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d5
);
cModualCntrol
.
bControlData
[
5
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d5
);
cModualCntrol
.
bControlBit
[
5
]
=
true
;
}
if
(
jsonObj
[
"ss"
][
i
][
"op"
][
"d6"
]
!=
null
)
{
cControl
.
ss
[
i
].
op
.
bD6HasConfig
=
true
;
cModualCntrol
.
bControlData
[
i
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d6
);
cModualCntrol
.
bControlData
[
6
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d6
);
cModualCntrol
.
bControlBit
[
6
]
=
true
;
}
if
(
jsonObj
[
"ss"
][
i
][
"op"
][
"d7"
]
!=
null
)
{
cControl
.
ss
[
i
].
op
.
bD7HasConfig
=
true
;
cModualCntrol
.
bControlData
[
i
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d7
);
cModualCntrol
.
bControlData
[
7
]
=
Convert
.
ToBoolean
(
cControl
.
ss
[
i
].
op
.
d7
);
cModualCntrol
.
bControlBit
[
7
]
=
true
;
}
if
(
ModbusErrorCode
==
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
cModualCntrol
.
ulStartTime
<=
Form1
.
GetTimeStamp
())
...
...
@@ -163,11 +169,11 @@ namespace ModbusDemo.MessageFormat
}
if
(
ModbusErrorCode
==
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
)
{
if
(
cModualCntrol
.
bStartControl
==
true
&&
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
))
if
(
cModualCntrol
.
bStartControl
==
true
&&
cModualCntrol
.
ulStartTime
!=
0
&&
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
))
{
liModuualControl
.
Add
(
cModualCntrol
);
}
else
if
(
cModualCntrol
.
bStartControl
==
false
)
else
if
(
cModualCntrol
.
bStartControl
==
false
&&
cModualCntrol
.
ulStartTime
!=
0
)
{
liModuualControl
.
Add
(
cModualCntrol
);
}
...
...
@@ -175,9 +181,10 @@ namespace ModbusDemo.MessageFormat
if
(
cControl
.
ss
[
i
].
op
.
bD0HasConfig
==
true
&&
ModbusErrorCode
==
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d0"
]
=
1
;
if
(
byModualIndex
!=
0
)
if
(
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
0
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
0
]
=
0
;
if
(
cModualCntrol
.
bStartControl
==
true
&&
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
))
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
0
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -185,12 +192,13 @@ namespace ModbusDemo.MessageFormat
else
if
(
cControl
.
ss
[
i
].
op
.
bD0HasConfig
==
true
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d0"
]
=
0
;
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
)
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
0
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
0
]
+=
usDefineControlTimes
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
0
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
&&
cModualCntrol
.
bStartControl
==
true
)
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
xFF
&&
cModualCntrol
.
bStartControl
==
true
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
0
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -199,9 +207,10 @@ namespace ModbusDemo.MessageFormat
if
(
cControl
.
ss
[
i
].
op
.
bD1HasConfig
==
true
&&
ModbusErrorCode
==
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d1"
]
=
1
;
if
(
byModualIndex
!=
0
)
if
(
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
1
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
1
]
=
0
;
if
(
cModualCntrol
.
bStartControl
==
true
&&
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
))
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
1
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -209,12 +218,13 @@ namespace ModbusDemo.MessageFormat
else
if
(
cControl
.
ss
[
i
].
op
.
bD1HasConfig
==
true
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d1"
]
=
0
;
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
)
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
1
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
1
]
+=
usDefineControlTimes
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
1
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
&&
cModualCntrol
.
bStartControl
==
true
)
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
xFF
&&
cModualCntrol
.
bStartControl
==
true
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
1
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -222,9 +232,10 @@ namespace ModbusDemo.MessageFormat
if
(
cControl
.
ss
[
i
].
op
.
bD2HasConfig
==
true
&&
ModbusErrorCode
==
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d2"
]
=
1
;
if
(
byModualIndex
!=
0
)
if
(
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
2
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
2
]
=
0
;
if
(
cModualCntrol
.
bStartControl
==
true
&&
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
))
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
2
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -232,12 +243,13 @@ namespace ModbusDemo.MessageFormat
else
if
(
cControl
.
ss
[
i
].
op
.
bD2HasConfig
==
true
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d2"
]
=
0
;
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
)
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
2
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
2
]
+=
usDefineControlTimes
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
2
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
&&
cModualCntrol
.
bStartControl
==
true
)
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
xFF
&&
cModualCntrol
.
bStartControl
==
true
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
2
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -245,9 +257,10 @@ namespace ModbusDemo.MessageFormat
if
(
cControl
.
ss
[
i
].
op
.
bD3HasConfig
==
true
&&
ModbusErrorCode
==
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d3"
]
=
1
;
if
(
byModualIndex
!=
0
)
if
(
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
3
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
3
]
=
0
;
if
(
cModualCntrol
.
bStartControl
==
true
&&
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
))
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
3
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -255,12 +268,13 @@ namespace ModbusDemo.MessageFormat
else
if
(
cControl
.
ss
[
i
].
op
.
bD3HasConfig
==
true
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d3"
]
=
0
;
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
)
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
3
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
3
]
+=
usDefineControlTimes
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
3
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
&&
cModualCntrol
.
bStartControl
==
true
)
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
xFF
&&
cModualCntrol
.
bStartControl
==
true
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
3
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -268,9 +282,10 @@ namespace ModbusDemo.MessageFormat
if
(
cControl
.
ss
[
i
].
op
.
bD4HasConfig
==
true
&&
ModbusErrorCode
==
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d4"
]
=
1
;
if
(
byModualIndex
!=
0
)
if
(
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
4
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
4
]
=
0
;
if
(
cModualCntrol
.
bStartControl
==
true
&&
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
))
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
4
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -278,12 +293,13 @@ namespace ModbusDemo.MessageFormat
else
if
(
cControl
.
ss
[
i
].
op
.
bD4HasConfig
==
true
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d4"
]
=
0
;
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
)
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
4
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
4
]
+=
usDefineControlTimes
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
4
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
&&
cModualCntrol
.
bStartControl
==
true
)
if
(!
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
xFF
&&
cModualCntrol
.
bStartControl
==
true
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
4
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -291,9 +307,10 @@ namespace ModbusDemo.MessageFormat
if
(
cControl
.
ss
[
i
].
op
.
bD5HasConfig
==
true
&&
ModbusErrorCode
==
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d5"
]
=
1
;
if
(
byModualIndex
!=
0
)
if
(
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
5
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
5
]
=
0
;
if
(
cModualCntrol
.
bStartControl
==
true
&&
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
))
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
5
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -301,12 +318,13 @@ namespace ModbusDemo.MessageFormat
else
if
(
cControl
.
ss
[
i
].
op
.
bD5HasConfig
==
true
)
{
jsonObj
[
"ss"
][
i
][
"op"
][
"d5"
]
=
0
;
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
)
if
(
ModbusErrorCode
!=
ModbusComm
.
eModbusErrorCode
.
MB_EMASTERNOERR
&&
byModualIndex
!=
0
xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
5
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usCommFailTimes
[
5
]
+=
usDefineControlTimes
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
5
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
if
(
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
&&
cModualCntrol
.
bStartControl
==
true
)
if
(
Enumerable
.
SequenceEqual
(
cModualCntrol
.
bControlData
,
btReadTempData
)
&&
byModualIndex
!=
0
xFF
&&
cModualCntrol
.
bStartControl
==
true
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
byModualIndex
].
usNowAlarmCode
[
5
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
...
...
@@ -364,10 +382,11 @@ namespace ModbusDemo.MessageFormat
{
for
(
sbyte
k
=
0
;
k
<
6
;
k
++)
{
if
(
liModuualControl
[
i
].
bControlBit
[
k
]
==
true
)
if
(
liModuualControl
[
i
].
bControlBit
[
k
]
==
true
&&
liModuualControl
[
i
].
sbModualIndex
!=
0xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
5
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
5
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
+=
usDefineControlTimes
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
}
}
...
...
@@ -375,11 +394,12 @@ namespace ModbusDemo.MessageFormat
{
for
(
sbyte
k
=
0
;
k
<
6
;
k
++)
{
if
(
liModuualControl
[
i
].
bControlBit
[
k
]
==
true
)
if
(
liModuualControl
[
i
].
bControlBit
[
k
]
==
true
&&
liModuualControl
[
i
].
sbModualIndex
!=
0xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
5
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
=
0
;
if
(
Enumerable
.
SequenceEqual
(
bControlData
,
btReadTempData
))
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
5
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
}
}
...
...
@@ -407,10 +427,11 @@ namespace ModbusDemo.MessageFormat
{
for
(
sbyte
k
=
0
;
k
<
6
;
k
++)
{
if
(
liModuualControl
[
i
].
bControlBit
[
k
]
==
true
)
if
(
liModuualControl
[
i
].
bControlBit
[
k
]
==
true
&&
liModuualControl
[
i
].
sbModualIndex
!=
0xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
5
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
5
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
+=
usDefineControlTimes
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
}
}
...
...
@@ -418,11 +439,12 @@ namespace ModbusDemo.MessageFormat
{
for
(
sbyte
k
=
0
;
k
<
6
;
k
++)
{
if
(
liModuualControl
[
i
].
bControlBit
[
k
]
==
true
)
if
(
liModuualControl
[
i
].
bControlBit
[
k
]
==
true
&&
liModuualControl
[
i
].
sbModualIndex
!=
0xFF
)
{
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
5
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
=
0
;
if
(
Enumerable
.
SequenceEqual
(
bControlData
,
btReadTempData
))
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
5
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
ModualPoll
.
cx66c
.
sX66cAlarmStruct
[
liModuualControl
[
i
].
sbModualIndex
].
usNowAlarmCode
[
k
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelControlError
;
}
}
}
...
...
@@ -431,7 +453,11 @@ namespace ModbusDemo.MessageFormat
}
}
}
Thread
.
Sleep
(
100
);
}
}
private
void
v
}
}
ModbusDemo/ModbusDemo/Common/ModSearch.cs
deleted
100644 → 0
View file @
051dba9a
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Net
;
using
System.Net.Sockets
;
using
System.Threading
;
using
System.Text.RegularExpressions
;
using
System.Collections
;
using
System.Management
;
using
System.Net.NetworkInformation
;
namespace
ModbusDemo.Common
{
class
ModSearch
{
public
struct
DeviceInfo
{
public
string
ModuleName
;
public
string
MacAddr
;
public
string
IpAddr
;
public
string
Netmask
;
public
string
Gateway
;
public
bool
bActive
;
};
public
UdpClient
client
;
public
IPEndPoint
endpoint
;
Thread
searchth
;
ManualResetEvent
mre
=
new
ManualResetEvent
(
false
);
public
DeviceInfo
m_DeviceInfo
;
public
ArrayList
myHMIList
=
new
ArrayList
();
string
FMAC
=
null
;
string
localip
=
null
;
/// <summary>
/// 构造函数
/// </summary>
public
ModSearch
()
{
myHMIList
.
Clear
();
NetworkInterface
[]
nics
=
NetworkInterface
.
GetAllNetworkInterfaces
();
foreach
(
NetworkInterface
adapter
in
nics
)
{
if
(
adapter
.
Name
==
"本地连接"
)
//这里是为了匹配我自己电脑网卡
{
bool
Pd1
=
(
adapter
.
NetworkInterfaceType
==
NetworkInterfaceType
.
Ethernet
);
//判断是否是以太网连接
if
(
Pd1
)
{
{
IPInterfaceProperties
ip
=
adapter
.
GetIPProperties
();
//IP配置信息
UnicastIPAddressInformationCollection
ipCollection
=
ip
.
UnicastAddresses
;
foreach
(
UnicastIPAddressInformation
ipadd
in
ipCollection
)
{
if
(
ipadd
.
Address
.
AddressFamily
==
AddressFamily
.
InterNetwork
)
this
.
localip
=
ipadd
.
Address
.
ToString
();
//获取ip
}
}
}
}
}
}
public
void
ThStart
()
{
if
(
mre
!=
null
)
mre
.
Reset
();
Console
.
WriteLine
(
"搜索线程开始...."
);
searchth
=
new
Thread
(
ThreadMethod
);
searchth
.
IsBackground
=
true
;
searchth
.
Start
();
}
public
void
ThStop
()
{
Console
.
WriteLine
(
"搜索线程结束...."
);
mre
.
Set
();
}
public
int
HMICount
()
{
return
myHMIList
.
Count
;
}
private
void
ThreadMethod
()
{
byte
[]
sendBytes
=
new
byte
[]
{
0x57
,
0x54
,
0x04
,
0x00
,
0x00
,
0x00
,
0x03
,
0x00
,
0x00
,
0x00
,
0x55
,
0xAA
};
int
iReadBytes
=
0
;
try
{
client
=
new
UdpClient
(
new
IPEndPoint
(
IPAddress
.
Any
,
0
));
// client = new UdpClient(new IPEndPoint(IPAddress.Parse(this.localip), 0));
endpoint
=
new
IPEndPoint
(
IPAddress
.
Parse
(
"255.255.255.255"
),
5048
);
client
.
Send
(
sendBytes
,
sendBytes
.
Length
,
endpoint
);
Thread
.
Sleep
(
500
);
byte
[]
recvBytes
;
client
.
Client
.
Blocking
=
false
;
while
(!
mre
.
WaitOne
(
500
))
{
iReadBytes
=
30
;
int
buffSizeCurrent
;
buffSizeCurrent
=
client
.
Client
.
Available
;
if
(
buffSizeCurrent
>
0
)
{
recvBytes
=
client
.
Receive
(
ref
endpoint
);
iReadBytes
=
recvBytes
.
Length
;
DoRecvDataCallBack
(
recvBytes
,
iReadBytes
);
}
}
}
catch
{
}
}
public
Boolean
DoRecvDataCallBack
(
byte
[]
pcData
,
int
iRecvLength
)
{
int
i
;
int
count
=
0
;
byte
[]
pBuf
=
pcData
;
int
iDataLength
=
0
;
if
(
iRecvLength
<
8
)
return
false
;
if
((
pBuf
[
0
]
==
(
byte
)
0x57
)
&&
(
pBuf
[
1
]
==
(
byte
)
0x54
)
&&
(
pBuf
[
iRecvLength
-
2
]
==
(
byte
)
0x55
)
&&
(
pBuf
[
iRecvLength
-
1
]
==
(
byte
)
0xAA
))
{
iDataLength
=
(
int
)(
pBuf
[
2
]
&
0xFF
)
|
(
int
)((
pBuf
[
3
]
&
0xFF
)
<<
8
)
|
(
int
)((
pBuf
[
4
]
&
0xFF
)
<<
16
)
|
(
int
)((
pBuf
[
5
]
&
0xFF
)
<<
24
);
if
((
iDataLength
>=
4
)
&&
(
iRecvLength
==
8
+
iDataLength
))
{
System
.
Text
.
ASCIIEncoding
asciiEncoding
=
new
System
.
Text
.
ASCIIEncoding
();
m_DeviceInfo
.
bActive
=
false
;
for
(
i
=
0
;
i
<
100
;
i
++
)
{
if
(
asciiEncoding
.
GetString
(
pBuf
,
6
+
i
,
1
)
==
"\0"
)
break
;
count
++;
}
// m_DeviceInfo.ModuleName = String.Format("{0}", asciiEncoding.GetString(pBuf, 6, count));
//脱机
m_DeviceInfo
.
ModuleName
=
String
.
Format
(
"{0}{1}{2}{3}"
,
asciiEncoding
.
GetString
(
pBuf
,
6
,
1
),
asciiEncoding
.
GetString
(
pBuf
,
7
,
1
),
asciiEncoding
.
GetString
(
pBuf
,
8
,
1
),
asciiEncoding
.
GetString
(
pBuf
,
9
,
1
));
m_DeviceInfo
.
MacAddr
=
String
.
Format
(
"{0}:{1}:{2}:{3}:{4}:{5}"
,
pBuf
[
10
],
pBuf
[
11
],
pBuf
[
12
],
pBuf
[
13
],
pBuf
[
14
],
pBuf
[
15
]);
m_DeviceInfo
.
IpAddr
=
String
.
Format
(
"{0}.{1}.{2}.{3}"
,
pBuf
[
16
],
pBuf
[
17
],
pBuf
[
18
],
pBuf
[
19
]);
m_DeviceInfo
.
Netmask
=
String
.
Format
(
"{0}.{1}.{2}.{3}"
,
pBuf
[
20
],
pBuf
[
21
],
pBuf
[
22
],
pBuf
[
23
]);
m_DeviceInfo
.
Gateway
=
String
.
Format
(
"{0}.{1}.{2}.{3}"
,
pBuf
[
24
],
pBuf
[
25
],
pBuf
[
26
],
pBuf
[
27
]);
if
(
m_DeviceInfo
.
IpAddr
!=
"0.0.0.0"
)
{
myHMIList
.
Add
(
m_DeviceInfo
);
}
return
true
;
}
}
return
false
;
}
}
}
ModbusDemo/ModbusDemo/Common/WTModbus.cs
deleted
100644 → 0
View file @
051dba9a
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Runtime.InteropServices
;
namespace
ModbusDemo.Common
{
class
WTModbus
{
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnLibModbus"
,
CharSet
=
CharSet
.
Unicode
)]
public
static
extern
uint
fnLibModbus
();
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnReadCoilStatus"
)]
public
static
extern
int
fnReadCoilStatus
(
uint
handle
,
ushort
address
,
ushort
num
,
[
MarshalAs
(
UnmanagedType
.
LPArray
,
SizeParamIndex
=
1
)]
System
.
Byte
[]
dest
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnReadInputStatus"
)]
public
static
extern
int
fnReadInputStatus
(
uint
handle
,
ushort
address
,
ushort
num
,
[
MarshalAs
(
UnmanagedType
.
LPArray
,
SizeParamIndex
=
1
)]
System
.
Char
[]
dest
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnReadHoldingReg"
)]
public
static
extern
int
fnReadHoldingReg
(
uint
handle
,
ushort
address
,
ushort
num
,
[
MarshalAs
(
UnmanagedType
.
LPArray
,
SizeParamIndex
=
1
)]
System
.
UInt16
[]
dest
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnReadInputReg"
)]
public
static
extern
int
fnReadInputReg
(
uint
handle
,
ushort
address
,
ushort
num
,
[
MarshalAs
(
UnmanagedType
.
LPArray
,
SizeParamIndex
=
1
)]
System
.
UInt16
[]
dest
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnWriteSingleCoil"
)]
public
static
extern
int
fnWriteSingleCoil
(
uint
handle
,
ushort
address
,
ushort
state
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnWriteHoldingReg"
)]
public
static
extern
int
fnWriteHoldingReg
(
uint
handle
,
ushort
address
,
ushort
state
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnWriteMultipleCoils"
)]
public
static
extern
int
fnWriteMultipleCoils
(
uint
handle
,
ushort
address
,
ushort
num
,
[
MarshalAs
(
UnmanagedType
.
LPArray
,
SizeParamIndex
=
1
)]
System
.
Char
[]
src
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnWriteMultipleRegs"
)]
public
static
extern
int
fnWriteMultipleRegs
(
uint
handle
,
ushort
address
,
ushort
num
,
[
MarshalAs
(
UnmanagedType
.
LPArray
,
SizeParamIndex
=
1
)]
System
.
UInt16
[]
src
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnReportSlaveID"
)]
public
static
extern
int
fnReportSlaveID
(
uint
handle
,
[
MarshalAs
(
UnmanagedType
.
LPArray
,
SizeParamIndex
=
1
)]
System
.
Char
[]
src
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnMaskWriteReg"
)]
public
static
extern
int
fnMaskWriteReg
(
uint
handle
,
ushort
address
,
ushort
amask
,
ushort
omask
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnReadWriteMultipleRegs"
)]
public
static
extern
int
fnReadWriteMultipleRegs
(
uint
handle
,
ushort
waddress
,
ushort
wnum
,
ushort
raddress
,
ushort
rnum
,
[
MarshalAs
(
UnmanagedType
.
LPArray
,
SizeParamIndex
=
1
)]
System
.
UInt16
[]
dest
,
byte
[]
Ip
,
ushort
wTcpPort
);
[
DllImport
(
@"LibModbus.dll"
,
EntryPoint
=
"fnLibModbusClose"
)]
public
static
extern
void
fnLibModbusClose
(
uint
handle
);
private
uint
hModbusHandle
;
private
System
.
UInt16
[]
dest
=
new
System
.
UInt16
[
10
]
{
0
,
0
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
0
};
public
WTModbus
()
{
this
.
hModbusHandle
=
fnLibModbus
();
}
~
WTModbus
()
{
fnLibModbusClose
(
hModbusHandle
);
}
/// <summary>
/// 读线圈状态
/// </summary>
/// <param name="addr">地址</param>
/// <param name="num">线圈数目</param>
/// <param name="ip">设备IP</param>
/// <param name="wport">端口号 默认502</param>
/// <param name="buf">读取结果</param>
/// <returns>
/// 0 -- no error
/// 1 -- illegal register address.
/// 2 -- illegal argument
/// 3 -- porting layer error
/// 4 -- insufficient resources
/// 5 -- I/O error
/// 6 -- protocol stack in illegal state
/// 7 -- timeout error occurred
/// 8 -- slave address error
/// 9 -- exception error occurred
/// 10-- CRC check error
/// 11-- send data error
/// 12-- receive data error
/// 13-- TCP connect error
/// 14-- close error
/// </returns>
public
int
ReadCoilStatus
(
ushort
addr
,
ushort
num
,
String
ip
,
ushort
wport
,
ref
byte
[]
buf
)
{
int
ret
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnReadCoilStatus
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
num
,
buf
,
bIp
,
wport
);
return
ret
;
}
public
int
ReadInputStatus
(
ushort
addr
,
ushort
num
,
String
ip
,
ushort
wport
,
ref
char
[]
buf
)
{
int
ret
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnReadInputStatus
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
1
,
buf
,
bIp
,
502
);
return
ret
;
}
public
int
ReadHoldingReg
(
ushort
addr
,
ushort
num
,
String
ip
,
ushort
wport
,
ref
UInt16
[]
buf
)
{
int
ret
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnReadHoldingReg
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
num
,
buf
,
bIp
,
wport
);
return
ret
;
}
public
int
ReadInputReg
(
ushort
addr
,
ushort
num
,
String
ip
,
ushort
wport
,
ref
UInt16
[]
buf
)
{
int
ret
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnReadInputReg
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
1
,
dest
,
bIp
,
wport
);
buf
[
0
]
=
dest
[
0
];
return
ret
;
}
public
int
WriteSingleCoil
(
ushort
addr
,
ushort
state
,
String
ip
,
ushort
wport
)
{
int
ret
=
0
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnWriteSingleCoil
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
state
,
bIp
,
wport
);
return
ret
;
}
public
int
WriteHoldingReg
(
ushort
addr
,
ushort
state
,
String
ip
,
ushort
wport
)
{
int
ret
=
0
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnWriteHoldingReg
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
state
,
bIp
,
wport
);
return
ret
;
}
public
int
ReadHoldingReg
(
ushort
addr
,
ushort
num
,
String
ip
,
ushort
wport
,
ref
char
[]
buf
)
{
int
ret
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnWriteMultipleCoils
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
1
,
buf
,
bIp
,
wport
);
return
ret
;
}
public
int
WriteMultipleRegs
(
ushort
addr
,
ushort
num
,
String
ip
,
ushort
wport
,
ref
ushort
[]
buf
)
{
int
ret
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnWriteMultipleRegs
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
num
,
buf
,
bIp
,
wport
);
return
ret
;
}
public
int
ReportSlaveID
(
ushort
addr
,
ushort
num
,
String
ip
,
ushort
wport
,
ref
char
[]
buf
)
{
int
ret
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnReportSlaveID
(
hModbusHandle
,
buf
,
bIp
,
502
);
return
ret
;
}
public
int
MaskWriteReg
(
ushort
addr
,
ushort
amask
,
ushort
omask
,
String
ip
,
ushort
wport
)
{
int
ret
=
0
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnMaskWriteReg
(
hModbusHandle
,
(
ushort
)(
addr
-
1
),
amask
,
omask
,
bIp
,
wport
);
return
ret
;
}
public
int
ReadWriteMultipleRegs
(
ushort
waddr
,
ushort
wnum
,
ushort
raddr
,
ushort
rnum
,
String
ip
,
ushort
wport
,
ref
UInt16
[]
buf
)
{
int
ret
=
0
;
byte
[]
bIp
=
Encoding
.
Unicode
.
GetBytes
(
ip
);
ret
=
fnReadWriteMultipleRegs
(
hModbusHandle
,
(
ushort
)(
waddr
-
1
),
wnum
,
raddr
,
rnum
,
buf
,
bIp
,
wnum
);
return
ret
;
}
}
}
ModbusDemo/ModbusDemo/Demo_818X.Designer.cs
deleted
100644 → 0
View file @
051dba9a
namespace
ModbusDemo
{
partial
class
Demo_818X
{
/// <summary>
/// Required designer variable.
/// </summary>
private
System
.
ComponentModel
.
IContainer
components
=
null
;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected
override
void
Dispose
(
bool
disposing
)
{
if
(
disposing
&&
(
components
!=
null
))
{
components
.
Dispose
();
}
base
.
Dispose
(
disposing
);
}
#
region
Windows
Form
Designer
generated
code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private
void
InitializeComponent
()
{
System
.
ComponentModel
.
ComponentResourceManager
resources
=
new
System
.
ComponentModel
.
ComponentResourceManager
(
typeof
(
Demo_818X
));
this
.
groupBox4
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
label32
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label33
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label7
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label6
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label5
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label1
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label2
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
comboBox1
=
new
System
.
Windows
.
Forms
.
ComboBox
();
this
.
button3
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
label4
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label3
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
groupBox1
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
label24
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label25
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label26
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label27
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label28
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label29
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label30
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label31
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label16
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label17
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label18
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label19
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label20
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label21
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label22
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label23
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label15
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label14
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label13
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label12
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label11
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label10
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label9
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label8
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
button1
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
pictureBox1
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
groupBox4
.
SuspendLayout
();
this
.
groupBox1
.
SuspendLayout
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox1
)).
BeginInit
();
this
.
SuspendLayout
();
//
// groupBox4
//
this
.
groupBox4
.
Controls
.
Add
(
this
.
label32
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
label33
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
label7
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
label6
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
label5
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
label1
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
label2
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
comboBox1
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
button3
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
label4
);
this
.
groupBox4
.
Controls
.
Add
(
this
.
label3
);
this
.
groupBox4
.
Location
=
new
System
.
Drawing
.
Point
(
12
,
12
);
this
.
groupBox4
.
Name
=
"groupBox4"
;
this
.
groupBox4
.
Size
=
new
System
.
Drawing
.
Size
(
533
,
103
);
this
.
groupBox4
.
TabIndex
=
5
;
this
.
groupBox4
.
TabStop
=
false
;
this
.
groupBox4
.
Text
=
"模块搜索功能:"
;
//
// label32
//
this
.
label32
.
AutoSize
=
true
;
this
.
label32
.
Location
=
new
System
.
Drawing
.
Point
(
338
,
64
);
this
.
label32
.
Name
=
"label32"
;
this
.
label32
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label32
.
TabIndex
=
11
;
this
.
label32
.
Text
=
"0:0:0:0"
;
//
// label33
//
this
.
label33
.
AutoSize
=
true
;
this
.
label33
.
Location
=
new
System
.
Drawing
.
Point
(
303
,
64
);
this
.
label33
.
Name
=
"label33"
;
this
.
label33
.
Size
=
new
System
.
Drawing
.
Size
(
29
,
12
);
this
.
label33
.
TabIndex
=
10
;
this
.
label33
.
Text
=
"Mac:"
;
//
// label7
//
this
.
label7
.
AutoSize
=
true
;
this
.
label7
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
64
);
this
.
label7
.
Name
=
"label7"
;
this
.
label7
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label7
.
TabIndex
=
9
;
this
.
label7
.
Text
=
"0.0.0.0"
;
//
// label6
//
this
.
label6
.
AutoSize
=
true
;
this
.
label6
.
Location
=
new
System
.
Drawing
.
Point
(
76
,
64
);
this
.
label6
.
Name
=
"label6"
;
this
.
label6
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label6
.
TabIndex
=
8
;
this
.
label6
.
Text
=
"0.0.0.0"
;
//
// label5
//
this
.
label5
.
AutoSize
=
true
;
this
.
label5
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
31
);
this
.
label5
.
Name
=
"label5"
;
this
.
label5
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label5
.
TabIndex
=
7
;
this
.
label5
.
Text
=
"0.0.0.0"
;
//
// label1
//
this
.
label1
.
AutoSize
=
true
;
this
.
label1
.
Location
=
new
System
.
Drawing
.
Point
(
166
,
64
);
this
.
label1
.
Name
=
"label1"
;
this
.
label1
.
Size
=
new
System
.
Drawing
.
Size
(
53
,
12
);
this
.
label1
.
TabIndex
=
6
;
this
.
label1
.
Text
=
"Gateway:"
;
//
// label2
//
this
.
label2
.
AutoSize
=
true
;
this
.
label2
.
Location
=
new
System
.
Drawing
.
Point
(
17
,
65
);
this
.
label2
.
Name
=
"label2"
;
this
.
label2
.
Size
=
new
System
.
Drawing
.
Size
(
59
,
12
);
this
.
label2
.
TabIndex
=
5
;
this
.
label2
.
Text
=
"Netmask:"
;
//
// comboBox1
//
this
.
comboBox1
.
FormattingEnabled
=
true
;
this
.
comboBox1
.
Location
=
new
System
.
Drawing
.
Point
(
78
,
27
);
this
.
comboBox1
.
Name
=
"comboBox1"
;
this
.
comboBox1
.
Size
=
new
System
.
Drawing
.
Size
(
82
,
20
);
this
.
comboBox1
.
TabIndex
=
3
;
//
// button3
//
this
.
button3
.
Location
=
new
System
.
Drawing
.
Point
(
305
,
24
);
this
.
button3
.
Name
=
"button3"
;
this
.
button3
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
button3
.
TabIndex
=
2
;
this
.
button3
.
Text
=
"search"
;
this
.
button3
.
UseVisualStyleBackColor
=
true
;
this
.
button3
.
Click
+=
new
System
.
EventHandler
(
this
.
button3_Click
);
//
// label4
//
this
.
label4
.
AutoSize
=
true
;
this
.
label4
.
Location
=
new
System
.
Drawing
.
Point
(
166
,
30
);
this
.
label4
.
Name
=
"label4"
;
this
.
label4
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label4
.
TabIndex
=
1
;
this
.
label4
.
Text
=
"模块IP:"
;
//
// label3
//
this
.
label3
.
AutoSize
=
true
;
this
.
label3
.
Location
=
new
System
.
Drawing
.
Point
(
17
,
31
);
this
.
label3
.
Name
=
"label3"
;
this
.
label3
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
label3
.
TabIndex
=
0
;
this
.
label3
.
Text
=
"模块名称:"
;
//
// groupBox1
//
this
.
groupBox1
.
Controls
.
Add
(
this
.
pictureBox1
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label24
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label25
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label26
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label27
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label28
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label29
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label30
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label31
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label16
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label17
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label18
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label19
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label20
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label21
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label22
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label23
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label15
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label14
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label13
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label12
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label11
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label10
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label9
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label8
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
button1
);
this
.
groupBox1
.
Location
=
new
System
.
Drawing
.
Point
(
12
,
135
);
this
.
groupBox1
.
Name
=
"groupBox1"
;
this
.
groupBox1
.
Size
=
new
System
.
Drawing
.
Size
(
533
,
281
);
this
.
groupBox1
.
TabIndex
=
6
;
this
.
groupBox1
.
TabStop
=
false
;
this
.
groupBox1
.
Text
=
"数据展示"
;
//
// label24
//
this
.
label24
.
AutoSize
=
true
;
this
.
label24
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
236
);
this
.
label24
.
Name
=
"label24"
;
this
.
label24
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label24
.
TabIndex
=
25
;
this
.
label24
.
Text
=
"label24"
;
//
// label25
//
this
.
label25
.
AutoSize
=
true
;
this
.
label25
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
211
);
this
.
label25
.
Name
=
"label25"
;
this
.
label25
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label25
.
TabIndex
=
24
;
this
.
label25
.
Text
=
"label25"
;
//
// label26
//
this
.
label26
.
AutoSize
=
true
;
this
.
label26
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
186
);
this
.
label26
.
Name
=
"label26"
;
this
.
label26
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label26
.
TabIndex
=
23
;
this
.
label26
.
Text
=
"label26"
;
//
// label27
//
this
.
label27
.
AutoSize
=
true
;
this
.
label27
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
161
);
this
.
label27
.
Name
=
"label27"
;
this
.
label27
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label27
.
TabIndex
=
22
;
this
.
label27
.
Text
=
"label27"
;
//
// label28
//
this
.
label28
.
AutoSize
=
true
;
this
.
label28
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
136
);
this
.
label28
.
Name
=
"label28"
;
this
.
label28
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label28
.
TabIndex
=
21
;
this
.
label28
.
Text
=
"label28"
;
//
// label29
//
this
.
label29
.
AutoSize
=
true
;
this
.
label29
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
111
);
this
.
label29
.
Name
=
"label29"
;
this
.
label29
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label29
.
TabIndex
=
20
;
this
.
label29
.
Text
=
"label29"
;
//
// label30
//
this
.
label30
.
AutoSize
=
true
;
this
.
label30
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
86
);
this
.
label30
.
Name
=
"label30"
;
this
.
label30
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label30
.
TabIndex
=
19
;
this
.
label30
.
Text
=
"label30"
;
//
// label31
//
this
.
label31
.
AutoSize
=
true
;
this
.
label31
.
Location
=
new
System
.
Drawing
.
Point
(
219
,
61
);
this
.
label31
.
Name
=
"label31"
;
this
.
label31
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label31
.
TabIndex
=
18
;
this
.
label31
.
Text
=
"label31"
;
//
// label16
//
this
.
label16
.
AutoSize
=
true
;
this
.
label16
.
Location
=
new
System
.
Drawing
.
Point
(
113
,
236
);
this
.
label16
.
Name
=
"label16"
;
this
.
label16
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label16
.
TabIndex
=
17
;
this
.
label16
.
Text
=
"label16"
;
//
// label17
//
this
.
label17
.
AutoSize
=
true
;
this
.
label17
.
Location
=
new
System
.
Drawing
.
Point
(
113
,
211
);
this
.
label17
.
Name
=
"label17"
;
this
.
label17
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label17
.
TabIndex
=
16
;
this
.
label17
.
Text
=
"label17"
;
//
// label18
//
this
.
label18
.
AutoSize
=
true
;
this
.
label18
.
Location
=
new
System
.
Drawing
.
Point
(
113
,
186
);
this
.
label18
.
Name
=
"label18"
;
this
.
label18
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label18
.
TabIndex
=
15
;
this
.
label18
.
Text
=
"label18"
;
//
// label19
//
this
.
label19
.
AutoSize
=
true
;
this
.
label19
.
Location
=
new
System
.
Drawing
.
Point
(
113
,
161
);
this
.
label19
.
Name
=
"label19"
;
this
.
label19
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label19
.
TabIndex
=
14
;
this
.
label19
.
Text
=
"label19"
;
//
// label20
//
this
.
label20
.
AutoSize
=
true
;
this
.
label20
.
Location
=
new
System
.
Drawing
.
Point
(
113
,
136
);
this
.
label20
.
Name
=
"label20"
;
this
.
label20
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label20
.
TabIndex
=
13
;
this
.
label20
.
Text
=
"label20"
;
//
// label21
//
this
.
label21
.
AutoSize
=
true
;
this
.
label21
.
Location
=
new
System
.
Drawing
.
Point
(
113
,
111
);
this
.
label21
.
Name
=
"label21"
;
this
.
label21
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label21
.
TabIndex
=
12
;
this
.
label21
.
Text
=
"label21"
;
//
// label22
//
this
.
label22
.
AutoSize
=
true
;
this
.
label22
.
Location
=
new
System
.
Drawing
.
Point
(
113
,
86
);
this
.
label22
.
Name
=
"label22"
;
this
.
label22
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label22
.
TabIndex
=
11
;
this
.
label22
.
Text
=
"label22"
;
//
// label23
//
this
.
label23
.
AutoSize
=
true
;
this
.
label23
.
Location
=
new
System
.
Drawing
.
Point
(
113
,
61
);
this
.
label23
.
Name
=
"label23"
;
this
.
label23
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label23
.
TabIndex
=
10
;
this
.
label23
.
Text
=
"label23"
;
//
// label15
//
this
.
label15
.
AutoSize
=
true
;
this
.
label15
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
236
);
this
.
label15
.
Name
=
"label15"
;
this
.
label15
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label15
.
TabIndex
=
9
;
this
.
label15
.
Text
=
"label15"
;
//
// label14
//
this
.
label14
.
AutoSize
=
true
;
this
.
label14
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
211
);
this
.
label14
.
Name
=
"label14"
;
this
.
label14
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label14
.
TabIndex
=
8
;
this
.
label14
.
Text
=
"label14"
;
//
// label13
//
this
.
label13
.
AutoSize
=
true
;
this
.
label13
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
186
);
this
.
label13
.
Name
=
"label13"
;
this
.
label13
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label13
.
TabIndex
=
7
;
this
.
label13
.
Text
=
"label13"
;
//
// label12
//
this
.
label12
.
AutoSize
=
true
;
this
.
label12
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
161
);
this
.
label12
.
Name
=
"label12"
;
this
.
label12
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label12
.
TabIndex
=
6
;
this
.
label12
.
Text
=
"label12"
;
//
// label11
//
this
.
label11
.
AutoSize
=
true
;
this
.
label11
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
136
);
this
.
label11
.
Name
=
"label11"
;
this
.
label11
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label11
.
TabIndex
=
5
;
this
.
label11
.
Text
=
"label11"
;
//
// label10
//
this
.
label10
.
AutoSize
=
true
;
this
.
label10
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
111
);
this
.
label10
.
Name
=
"label10"
;
this
.
label10
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label10
.
TabIndex
=
4
;
this
.
label10
.
Text
=
"label10"
;
//
// label9
//
this
.
label9
.
AutoSize
=
true
;
this
.
label9
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
86
);
this
.
label9
.
Name
=
"label9"
;
this
.
label9
.
Size
=
new
System
.
Drawing
.
Size
(
41
,
12
);
this
.
label9
.
TabIndex
=
3
;
this
.
label9
.
Text
=
"label9"
;
//
// label8
//
this
.
label8
.
AutoSize
=
true
;
this
.
label8
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
61
);
this
.
label8
.
Name
=
"label8"
;
this
.
label8
.
Size
=
new
System
.
Drawing
.
Size
(
41
,
12
);
this
.
label8
.
TabIndex
=
2
;
this
.
label8
.
Text
=
"label8"
;
//
// button1
//
this
.
button1
.
Location
=
new
System
.
Drawing
.
Point
(
305
,
20
);
this
.
button1
.
Name
=
"button1"
;
this
.
button1
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
button1
.
TabIndex
=
1
;
this
.
button1
.
Text
=
"UpData"
;
this
.
button1
.
UseVisualStyleBackColor
=
true
;
this
.
button1
.
Click
+=
new
System
.
EventHandler
(
this
.
button1_Click
);
//
// pictureBox1
//
this
.
pictureBox1
.
Image
=
global
::
ModbusDemo
.
Properties
.
Resources
.
_057
;
this
.
pictureBox1
.
Location
=
new
System
.
Drawing
.
Point
(
305
,
61
);
this
.
pictureBox1
.
Name
=
"pictureBox1"
;
this
.
pictureBox1
.
Size
=
new
System
.
Drawing
.
Size
(
96
,
87
);
this
.
pictureBox1
.
SizeMode
=
System
.
Windows
.
Forms
.
PictureBoxSizeMode
.
Zoom
;
this
.
pictureBox1
.
TabIndex
=
26
;
this
.
pictureBox1
.
TabStop
=
false
;
//
// Demo_818X
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
6F
,
12F
);
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
Font
;
this
.
ClientSize
=
new
System
.
Drawing
.
Size
(
558
,
429
);
this
.
Controls
.
Add
(
this
.
groupBox1
);
this
.
Controls
.
Add
(
this
.
groupBox4
);
this
.
Icon
=
((
System
.
Drawing
.
Icon
)(
resources
.
GetObject
(
"$this.Icon"
)));
this
.
Name
=
"Demo_818X"
;
this
.
Text
=
"模块测试Demo"
;
this
.
groupBox4
.
ResumeLayout
(
false
);
this
.
groupBox4
.
PerformLayout
();
this
.
groupBox1
.
ResumeLayout
(
false
);
this
.
groupBox1
.
PerformLayout
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox1
)).
EndInit
();
this
.
ResumeLayout
(
false
);
}
#
endregion
private
System
.
Windows
.
Forms
.
GroupBox
groupBox4
;
private
System
.
Windows
.
Forms
.
Label
label4
;
private
System
.
Windows
.
Forms
.
Label
label3
;
private
System
.
Windows
.
Forms
.
Button
button3
;
private
System
.
Windows
.
Forms
.
ComboBox
comboBox1
;
private
System
.
Windows
.
Forms
.
GroupBox
groupBox1
;
private
System
.
Windows
.
Forms
.
Label
label1
;
private
System
.
Windows
.
Forms
.
Label
label2
;
private
System
.
Windows
.
Forms
.
Label
label5
;
private
System
.
Windows
.
Forms
.
Label
label7
;
private
System
.
Windows
.
Forms
.
Label
label6
;
private
System
.
Windows
.
Forms
.
Button
button1
;
private
System
.
Windows
.
Forms
.
Label
label15
;
private
System
.
Windows
.
Forms
.
Label
label14
;
private
System
.
Windows
.
Forms
.
Label
label13
;
private
System
.
Windows
.
Forms
.
Label
label12
;
private
System
.
Windows
.
Forms
.
Label
label11
;
private
System
.
Windows
.
Forms
.
Label
label10
;
private
System
.
Windows
.
Forms
.
Label
label9
;
private
System
.
Windows
.
Forms
.
Label
label8
;
private
System
.
Windows
.
Forms
.
Label
label24
;
private
System
.
Windows
.
Forms
.
Label
label25
;
private
System
.
Windows
.
Forms
.
Label
label26
;
private
System
.
Windows
.
Forms
.
Label
label27
;
private
System
.
Windows
.
Forms
.
Label
label28
;
private
System
.
Windows
.
Forms
.
Label
label29
;
private
System
.
Windows
.
Forms
.
Label
label30
;
private
System
.
Windows
.
Forms
.
Label
label31
;
private
System
.
Windows
.
Forms
.
Label
label16
;
private
System
.
Windows
.
Forms
.
Label
label17
;
private
System
.
Windows
.
Forms
.
Label
label18
;
private
System
.
Windows
.
Forms
.
Label
label19
;
private
System
.
Windows
.
Forms
.
Label
label20
;
private
System
.
Windows
.
Forms
.
Label
label21
;
private
System
.
Windows
.
Forms
.
Label
label22
;
private
System
.
Windows
.
Forms
.
Label
label23
;
private
System
.
Windows
.
Forms
.
Label
label32
;
private
System
.
Windows
.
Forms
.
Label
label33
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox1
;
}
}
\ No newline at end of file
ModbusDemo/ModbusDemo/Demo_818X.cs
deleted
100644 → 0
View file @
051dba9a
using
System
;
using
System.Collections.Generic
;
using
System.ComponentModel
;
using
System.Data
;
using
System.Drawing
;
using
System.Linq
;
using
System.Text
;
using
ModbusDemo.Common
;
using
System.Threading
;
using
System.Windows.Forms
;
using
System.Net.Sockets
;
using
System.Net
;
namespace
ModbusDemo
{
public
partial
class
Demo_818X
:
Form
{
WTModbus
ReadTest
=
new
WTModbus
();
ModSearch
n_ModSearch
=
new
ModSearch
();
ModSearch
.
DeviceInfo
n_DeviceInfo
;
const
int
MAX_AN_CH_NUM
=
8
;
ushort
[]
typeData
=
new
ushort
[
8
];
//当前量程读数
byte
[]
AbnoSignal
=
new
byte
[
8
];
//通道异常信号
ushort
[]
Inputtype
=
new
ushort
[
8
];
//输入类型
ushort
[]
m_u16ADData
=
new
ushort
[
MAX_AN_CH_NUM
];
//保存AD的值
string
[]
Strcom
=
new
string
[]
{
"A_10V"
,
"A_5V"
,
"A_2_5V"
,
"A_1V"
,
"A_500mV"
,
"A_100mV"
,
"A_20mV"
,
"T-K"
,
"T-J"
,
"T-R"
,
"T-S"
,
"T-B"
,
"T_E"
,
"T_T"
,
"T_N"
,
"I_0_20mA"
,
"I_4_20mA"
,
"null"
};
string
[]
unit
=
new
string
[]
{
"null"
,
"℃"
,
"V"
,
"MV"
,
"MA"
};
public
class
UserInfo
{
public
int
UserId
{
get
;
set
;
}
public
string
UserCompany
{
get
;
set
;
}
public
float
Data
{
get
;
set
;
}
public
ushort
UserModel
{
get
;
set
;
}
public
double
[]
NegMin
=
{-
10.000
,
-
5.000
,
-
2.500
,
-
1.000
,
-
500.00
,
-
100.00
,
-
20.00
,
0
,
0
,
0
,
0
,
0
,
0
,
-
100
,
0
,
-
20
,
-
20
};
//负数最小值
public
double
[]
NegMax
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
//负数最大值
public
double
[]
PosMin
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
500
,
500
,
500
,
0
,
0
,
0
,
0
,
0
};
//正数最小值
public
double
[]
PosMax
=
{
10.000
,
5.000
,
2.500
,
1.000
,
500.00
,
100.00
,
20.000
,
1370
,
760
,
1750
,
1750
,
1800
,
1000
,
400
,
200
,
20
,
20
};
//正数最大值
public
ushort
[]
usMin
=
{
0x8000
,
0x8000
,
0x8000
,
0x8000
,
0x8000
,
0x8000
,
0x8000
,
0x0000
,
0x0000
,
0x2492
,
0x2492
,
0x2381
,
0x0000
,
0xE000
,
0x0000
,
0x8000
,
0x8000
};
public
ushort
[]
usMax
=
{
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x0000
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
,
0x7FFF
};
}
UserInfo
users
=
new
UserInfo
();
UserInfo
users1
=
new
UserInfo
();
UserInfo
users2
=
new
UserInfo
();
UserInfo
users3
=
new
UserInfo
();
UserInfo
users4
=
new
UserInfo
();
UserInfo
users5
=
new
UserInfo
();
UserInfo
users6
=
new
UserInfo
();
UserInfo
users7
=
new
UserInfo
();
public
Demo_818X
()
{
InitializeComponent
();
}
private
void
button3_Click
(
object
sender
,
EventArgs
e
)
{
n_ModSearch
.
ThStart
();
label5
.
Text
=
n_ModSearch
.
m_DeviceInfo
.
IpAddr
;
comboBox1
.
Text
=
n_ModSearch
.
m_DeviceInfo
.
ModuleName
;
label6
.
Text
=
n_ModSearch
.
m_DeviceInfo
.
Netmask
;
label7
.
Text
=
n_ModSearch
.
m_DeviceInfo
.
Gateway
;
label32
.
Text
=
n_ModSearch
.
m_DeviceInfo
.
MacAddr
;
}
private
void
button1_Click
(
object
sender
,
EventArgs
e
)
{
int
ret
=
0
;
n_ModSearch
.
ThStop
();
ret
=
ReadTest
.
ReadHoldingReg
(
1
,
8
,
n_ModSearch
.
m_DeviceInfo
.
IpAddr
,
502
,
ref
typeData
);
//当前量程读数
ret
=
ReadTest
.
ReadHoldingReg
(
11
,
8
,
n_ModSearch
.
m_DeviceInfo
.
IpAddr
,
502
,
ref
Inputtype
);
//输入类型
ret
=
ReadTest
.
ReadCoilStatus
(
200
,
8
,
n_ModSearch
.
m_DeviceInfo
.
IpAddr
,
502
,
ref
AbnoSignal
);
//异常信号备用
ShowValue
();
}
public
void
ShowValue
()
{
/********************/
users
.
UserId
=
0
;
//通道
users
.
Data
=
typeData
[
0
];
//数据
users
.
UserCompany
=
Strcom
[
Inputtype
[
0
]];
//通道类型
users
.
UserModel
=
Inputtype
[
0
];
//确定计算公式
/********************/
users1
.
UserId
=
1
;
//通道
users1
.
Data
=
typeData
[
1
];
//数据
users1
.
UserCompany
=
Strcom
[
Inputtype
[
1
]];
//通道类型
users1
.
UserModel
=
Inputtype
[
1
];
//确定计算公式
/********************/
users2
.
UserId
=
2
;
//通道
users2
.
Data
=
typeData
[
2
];
//数据
users2
.
UserCompany
=
Strcom
[
Inputtype
[
2
]];
//通道类型
users2
.
UserModel
=
Inputtype
[
2
];
//确定计算公式
/********************/
users3
.
UserId
=
3
;
//通道
users3
.
Data
=
typeData
[
3
];
//数据
users3
.
UserCompany
=
Strcom
[
Inputtype
[
3
]];
//通道类型
users3
.
UserModel
=
Inputtype
[
3
];
//确定计算公式
/********************/
users4
.
UserId
=
4
;
//通道
users4
.
Data
=
typeData
[
4
];
//数据
users4
.
UserCompany
=
Strcom
[
Inputtype
[
4
]];
//通道类型
users4
.
UserModel
=
Inputtype
[
4
];
//确定计算公式
/********************/
users5
.
UserId
=
5
;
//通道
users5
.
Data
=
typeData
[
5
];
//数据
users5
.
UserCompany
=
Strcom
[
Inputtype
[
5
]];
//通道类型
users5
.
UserModel
=
Inputtype
[
5
];
//确定计算公式
/********************/
users6
.
UserId
=
6
;
//通道
users6
.
Data
=
typeData
[
6
];
//数据
users6
.
UserCompany
=
Strcom
[
Inputtype
[
6
]];
//通道类型
users6
.
UserModel
=
Inputtype
[
6
];
//确定计算公式
/********************/
users7
.
UserId
=
7
;
//通道
users7
.
Data
=
typeData
[
7
];
//数据
users7
.
UserCompany
=
Strcom
[
Inputtype
[
7
]];
//通道类型
users7
.
UserModel
=
Inputtype
[
7
];
//确定计算公式
//显示通道类型
this
.
label8
.
Text
=
Strcom
[
Inputtype
[
0
]];
this
.
label9
.
Text
=
Strcom
[
Inputtype
[
1
]];
this
.
label10
.
Text
=
Strcom
[
Inputtype
[
2
]];
this
.
label11
.
Text
=
Strcom
[
Inputtype
[
3
]];
this
.
label12
.
Text
=
Strcom
[
Inputtype
[
4
]];
this
.
label13
.
Text
=
Strcom
[
Inputtype
[
5
]];
this
.
label14
.
Text
=
Strcom
[
Inputtype
[
6
]];
this
.
label15
.
Text
=
Strcom
[
Inputtype
[
7
]];
//通道单位获取
this
.
label31
.
Text
=
Conversion
(
Convert
.
ToUInt16
(
users
.
UserModel
),
users
.
Data
)[
1
];
this
.
label30
.
Text
=
Conversion
(
Convert
.
ToUInt16
(
users1
.
UserModel
),
users1
.
Data
)[
1
];
this
.
label29
.
Text
=
Conversion
(
Convert
.
ToUInt16
(
users2
.
UserModel
),
users2
.
Data
)[
1
];
this
.
label28
.
Text
=
Conversion
(
Convert
.
ToUInt16
(
users3
.
UserModel
),
users3
.
Data
)[
1
];
this
.
label27
.
Text
=
Conversion
(
Convert
.
ToUInt16
(
users4
.
UserModel
),
users4
.
Data
)[
1
];
this
.
label26
.
Text
=
Conversion
(
Convert
.
ToUInt16
(
users5
.
UserModel
),
users5
.
Data
)[
1
];
this
.
label25
.
Text
=
Conversion
(
Convert
.
ToUInt16
(
users6
.
UserModel
),
users6
.
Data
)[
1
];
this
.
label24
.
Text
=
Conversion
(
Convert
.
ToUInt16
(
users7
.
UserModel
),
users7
.
Data
)[
1
];
////根据通道类型换算数据
//////输入格式为:NegMin NegMax PosMin PosMax usMin usMax
this
.
label23
.
Text
=
current
(
users
.
NegMin
[
users
.
UserModel
],
users
.
NegMax
[
users
.
UserModel
],
users
.
PosMin
[
users
.
UserModel
],
users
.
PosMax
[
users
.
UserModel
],
users
.
usMin
[
users
.
UserModel
],
users
.
usMax
[
users
.
UserModel
],
users
.
Data
);
//处理函数
this
.
label22
.
Text
=
current
(
users1
.
NegMin
[
users1
.
UserModel
],
users1
.
NegMax
[
users1
.
UserModel
],
users1
.
PosMin
[
users1
.
UserModel
],
users1
.
PosMax
[
users1
.
UserModel
],
users1
.
usMin
[
users1
.
UserModel
],
users1
.
usMax
[
users1
.
UserModel
],
users1
.
Data
);
//处理函数
this
.
label21
.
Text
=
current
(
users2
.
NegMin
[
users2
.
UserModel
],
users2
.
NegMax
[
users2
.
UserModel
],
users2
.
PosMin
[
users2
.
UserModel
],
users2
.
PosMax
[
users2
.
UserModel
],
users2
.
usMin
[
users2
.
UserModel
],
users2
.
usMax
[
users2
.
UserModel
],
users2
.
Data
);
//处理函数
this
.
label20
.
Text
=
current
(
users3
.
NegMin
[
users3
.
UserModel
],
users3
.
NegMax
[
users3
.
UserModel
],
users3
.
PosMin
[
users3
.
UserModel
],
users3
.
PosMax
[
users3
.
UserModel
],
users3
.
usMin
[
users3
.
UserModel
],
users3
.
usMax
[
users3
.
UserModel
],
users3
.
Data
);
//处理函数
this
.
label19
.
Text
=
current
(
users4
.
NegMin
[
users4
.
UserModel
],
users4
.
NegMax
[
users4
.
UserModel
],
users4
.
PosMin
[
users4
.
UserModel
],
users4
.
PosMax
[
users4
.
UserModel
],
users4
.
usMin
[
users4
.
UserModel
],
users4
.
usMax
[
users4
.
UserModel
],
users4
.
Data
);
//处理函数
this
.
label18
.
Text
=
current
(
users5
.
NegMin
[
users5
.
UserModel
],
users5
.
NegMax
[
users5
.
UserModel
],
users5
.
PosMin
[
users5
.
UserModel
],
users5
.
PosMax
[
users5
.
UserModel
],
users5
.
usMin
[
users5
.
UserModel
],
users5
.
usMax
[
users5
.
UserModel
],
users5
.
Data
);
//处理函数
this
.
label17
.
Text
=
current
(
users6
.
NegMin
[
users6
.
UserModel
],
users6
.
NegMax
[
users6
.
UserModel
],
users6
.
PosMin
[
users6
.
UserModel
],
users6
.
PosMax
[
users6
.
UserModel
],
users6
.
usMin
[
users6
.
UserModel
],
users6
.
usMax
[
users6
.
UserModel
],
users6
.
Data
);
//处理函数
this
.
label16
.
Text
=
current
(
users7
.
NegMin
[
users7
.
UserModel
],
users7
.
NegMax
[
users7
.
UserModel
],
users7
.
PosMin
[
users7
.
UserModel
],
users7
.
PosMax
[
users7
.
UserModel
],
users7
.
usMin
[
users7
.
UserModel
],
users7
.
usMax
[
users7
.
UserModel
],
users7
.
Data
);
//处理函数
}
double
parameter
;
string
parameter2
;
//输入格式为:NegMin NegMax PosMin PosMax usMin usMax
public
string
current
(
double
NegMin
,
double
NegMax
,
double
PosMin
,
double
PosMax
,
double
usMin
,
double
usMax
,
float
Input
)
//处理函数
{
if
(
Input
>=
0x0000
&&
Input
<=
0x7FFF
)
{
parameter
=
Convert
.
ToSingle
(
PosMin
+
((
PosMax
-
PosMin
)
*
Input
)
/
usMax
);
parameter2
=
parameter
.
ToString
(
"F3"
);
}
else
{
parameter
=
-
Convert
.
ToSingle
(
PosMin
+
((
PosMax
-
PosMin
)
*
(
0x10000
-
Input
))
/
(
0x10000
-
usMax
));
parameter2
=
parameter
.
ToString
(
"F3"
);
}
if
(
parameter2
==
"0.000"
)
{
parameter2
=
"Burn_out"
;
return
parameter2
;
}
else
return
parameter2
;
}
/**********************************************************************/
public
string
Calculation
(
double
maxNum
,
double
minNum
,
float
Input
)
{
double
parameter
;
string
parameter2
;
parameter
=
Convert
.
ToSingle
(
double
.
Parse
(
Input
.
ToString
())
*
minNum
/
maxNum
);
parameter2
=
parameter
.
ToString
(
"F3"
);
return
parameter2
;
}
string
[]
text
=
new
string
[
3
];
/**********************************************************************/
public
string
[]
Conversion
(
UInt16
type
,
float
typedata
)
//, ushort[] typedata
{
switch
(
type
)
{
case
0
:
//"V","A_10V"
text
[
0
]
=
Calculation
(
10.000
,
-
10.000
,
typedata
);
text
[
1
]
=
"V"
;
break
;
case
1
:
//"V","A_5V"
text
[
0
]
=
Calculation
(
5.000
,
-
5.000
,
typedata
);
text
[
1
]
=
"V"
;
break
;
case
2
:
//"V","A_2_5V"
text
[
0
]
=
Calculation
(-
2.500
,
2.500
,
typedata
);
text
[
1
]
=
"V"
;
break
;
case
3
:
//"V","A_1V"
text
[
0
]
=
Calculation
(
1
,
-
1
,
typedata
);
text
[
1
]
=
"V"
;
break
;
case
4
:
//"MV","A_500mV"
text
[
0
]
=
Calculation
(
500.00
,
-
500.00
,
typedata
);
text
[
1
]
=
"MV"
;
break
;
case
5
:
//"MV","A_100mV"
text
[
0
]
=
Calculation
(
100.00
,
-
100.00
,
typedata
);
text
[
1
]
=
"MV"
;
break
;
case
6
:
//"MV","A_20mV"
//text[0] = "MV";
text
[
1
]
=
"MV"
;
break
;
case
7
:
//"℃","T-K"
text
[
0
]
=
Calculation
(
0x7FFF
,
1370.0f
,
typedata
);
text
[
1
]
=
"℃"
;
break
;
case
8
:
//"℃" ,"T-J"
text
[
0
]
=
Calculation
(
0x7FFF
,
7600.0f
,
typedata
);
text
[
1
]
=
"℃"
;
break
;
case
9
:
//"℃" ,"T-R"
text
[
0
]
=
Calculation
(
0x7FFF
,
1750.0f
,
typedata
);
text
[
1
]
=
"℃"
;
break
;
case
10
:
//"℃" ,"T-S"
text
[
0
]
=
Calculation
(
0x7FFF
,
1750.0f
,
typedata
);
text
[
1
]
=
"℃"
;
break
;
case
11
:
//"℃","T-B"
text
[
0
]
=
Calculation
(
0x7FFF
,
1800.0f
,
typedata
);
text
[
1
]
=
"℃"
;
break
;
case
12
:
//"℃" ,"T_E"
text
[
0
]
=
Calculation
(
0x7FFF
,
1000.0d
,
typedata
);
text
[
1
]
=
"℃"
;
break
;
case
13
:
//"℃" ,"T_T"
text
[
0
]
=
Calculation
(
0x7FFF
,
400.0f
,
typedata
);
text
[
1
]
=
"℃"
;
break
;
case
14
:
//"℃" ,"T_N"
text
[
0
]
=
Calculation
(
0x7FFF
,
1800
,
typedata
);
text
[
1
]
=
"℃"
;
break
;
case
15
:
// "MA","I_0_20mA"
text
[
0
]
=
Calculation
(
0x7FFF
,
1800
,
typedata
);
text
[
1
]
=
"MA"
;
break
;
case
16
:
// "MA", "I_4_20mA"
text
[
0
]
=
Calculation
(
0x7FFF
,
1800
,
typedata
);
text
[
1
]
=
"MA"
;
break
;
default
:
MessageBox
.
Show
(
"我没有这个范围"
);
break
;
}
/*****************有效判断*****************************/
if
(
text
[
0
]
==
"0.000"
)
{
text
[
0
]
=
"Burn_out"
;
return
text
;
}
else
return
text
;
//通过Case做判断并输出一个数组
}
}
}
ModbusDemo/ModbusDemo/Demo_818X.resx
deleted
100644 → 0
View file @
051dba9a
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema
id=
"root"
xmlns=
""
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
xmlns:msdata=
"urn:schemas-microsoft-com:xml-msdata"
>
<xsd:import
namespace=
"http://www.w3.org/XML/1998/namespace"
/>
<xsd:element
name=
"root"
msdata:IsDataSet=
"true"
>
<xsd:complexType>
<xsd:choice
maxOccurs=
"unbounded"
>
<xsd:element
name=
"metadata"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
use=
"required"
type=
"xsd:string"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"assembly"
>
<xsd:complexType>
<xsd:attribute
name=
"alias"
type=
"xsd:string"
/>
<xsd:attribute
name=
"name"
type=
"xsd:string"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"data"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
<xsd:element
name=
"comment"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"2"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
msdata:Ordinal=
"1"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
msdata:Ordinal=
"3"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
msdata:Ordinal=
"4"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"resheader"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader
name=
"resmimetype"
>
<value>
text/microsoft-resx
</value>
</resheader>
<resheader
name=
"version"
>
<value>
2.0
</value>
</resheader>
<resheader
name=
"reader"
>
<value>
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader
name=
"writer"
>
<value>
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<assembly
alias=
"System.Drawing"
name=
"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
<data
name=
"$this.Icon"
type=
"System.Drawing.Icon, System.Drawing"
mimetype=
"application/x-microsoft.net.object.bytearray.base64"
>
<value>
AAABAAEAY2YAAAEAIABQpAAAFgAAACgAAABjAAAAzAAAAAEAIAAAAAAAyJ0AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAI0AAADVAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANUAAACOAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAUQAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAAUQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjgAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAAjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAxQAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAAxQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAA2QAA
ANkAAADZAgIC1uLi4vv//////////+Xl5f/l5eX////////////l5eX/5eXl////////////5eXl/+Xl
5f///////////+Xl5f/i4uL7AgIC0QAAANkAAADZAAAA2QAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAA2QAAANkAAADZISEhv+Xl5f///////////+Xl
5f/l5eX////////////l5eX/5eXl////////////5eXl/+Xl5f///////////+Xl5f/l5eX/JycnuAAA
ANkAAADZAAAA2QAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAACOAAAA2QAAANkAAADZcXFxt//////l5eX/5eXl////////////5eXl/+Xl5f///////////+Xl
5f/l5eX////////////l5eX/5eXl////////////YmJivgAAAN0AAADZAAAA2QAAAI4AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCAAAA2QAAANkAAADZxcXF0v//
///l5eX/5eXl////////////5eXl/+Xl5f///////////+Xl5f/l5eX////////////l5eX/5eXl////
////////rq6u1gAAAN0AAADZAAAA2QAAAMUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAB8AAADZAAAA2QAAANkCAgLR4uLi++Xl5f///////////+Xl5f/l5eX/////////
///l5eX/5eXl////////////5eXl/+Xl5f///////////+Xl5f/l5eX//Pz8+wICAtEAAADZAAAA2QAA
ANkAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAAADZAAAA2QAA
ANknJye45eXl/+Xl5f///////////+Xl5f/l5eX////////////l5eX/5eXl////////////5eXl/+Xl
5f///////////+Xl5f/l5eX//////ycnJ7gAAADZAAAA2QAAANkAAABWAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIsAAADZAAAA2QAAANlxcXG3////////////////////////
/////////////////////////////////////////////////////////////////////////////3Fx
cbcAAADZAAAA2QAAANkAAACLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AMEAAADZAAAA2QAAANnFxcXS////////////////////////////////////////////////////////
/////////////////////////////////////////////8XFxdIAAADZAAAA2QAAANkAAADBAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAANkAAADZAAAA2QICAtH8/Pz7////////
////////////////////////////////////////////////////////////////////////////////
//////////////z8/PsCAgLRAAAA2QAAANkAAADZAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAVgAAANkAAADZAAAA2ScnJ7j/////////////////////////////////////////////
//////////////////////////////////////////////////////////////////8nJye4AAAA2QAA
ANkAAADZAAAAVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAACFAAAA0wAAANkAAADZAAAA2XFx
cbf/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////9xcXG3AAAA2QAAANkAAADZAAAA0wAAAIUAAAAlAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAVAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAiAAAAkwAAANgAAADZAAAA2QAAANkAAADZAAAA2Nra2t7/////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///a2treAAAA2AAAANkAAADZAAAA2QAAANkAAADYAAAAkwAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAALAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAANEAAADZAAAAvgAAAH0AAABAAAAACAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAIIAAADWAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZYGBgtf//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////YWFhtQAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANYAAACDAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAACAAAAEAAAAB9AAAAvQAAANkAAADRAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAwgAA
ANkAAADZAAAA2QAAANkAAADZAAAA0gAAAJ0AAABfAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABLAAAAxgAAANkAAADZAAAA2QAAANkAAADZAAAA2QwMDMWUlJS+////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////5SUlL8MDAzFAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAAxgAA
AEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAF4AAACdAAAA0gAAANkAAADZAAAA2QAA
ANkAAADZAAAAwgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAALoAAAB8AAAAPgAAAAgAAAAAAAAADQAAAI4AAADZAAAA2QAAANkAAADZAAAA2QAA
ANkaGhq8pKSkxP39/f3/////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///9/f39pKSkxBoaGrwAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAACOAAAADQAAAAAAAAAIAAAAPgAA
AHwAAAC6AAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAAHEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ABsAAADRAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANEAAACZAAAAvAAAANkAAADZAAAA2QAAANkAAADZDg4Owqenp8X+/v7+////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////7+/v6lpaXEDg4OwgAA
ANkAAADZAAAA2QAAANkAAADZAAAAvAAAAJkAAADRAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADbAAAA3QAAANoAAADZAAAA2QAAANEAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEAAADZAAAA2QAAANkICAjJoqKixk5O
TrQMDAzHAAAA3AAAANoAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QIC
AtNubm63+/v7+v//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////+vr6+WxsbLYBAQHUAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QwMDMVGRka5kpKSyggICMsAAADZAAAA2QAA
ANkAAACRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAANQAAANkAAADZAAAA2QAAANmPj4/A5eXl/+3t7f/t7e3/wMDA4XZ2drwlJSW4AQEB1AAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZFRUVvtra2t7/////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////Z2dndFBQUvwAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAQEB1CQk
JLpvb2++ycnJ3//////4+Pj/9/f3/5SUlL8AAADZAAAA2QAAANkAAADZAAAANQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAsAAAANkAAADZAAAA2RgY
GL319fX+5+fn//Ly8v//////8vLy//39/f//////9vb29KqqqsVKSkq0CgoKxgAAANkAAADZAAAA2QAA
ANhZWVm1+vr6+f//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////+fn5+FRU
VLQAAADYAAAA2QAAANkAAADZCgoKxkpKSrSqqqrF9vb29Pv7+//m5ub/5+fn//Ly8v/l5eX/8vLy//z8
/P4YGBi/AAAA2QAAANkAAADZAAAAsAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABWAAAA2QAAANkAAADZAAAA2MXFxdL/////+vr6//Pz8//+/v7/6+vr/+fn
5//5+fn//////////////////////9bW1tyMjIy8jo6Ovd7e3uH/////////////////////////////
///////////////////////////////////////////////////+/fz/9+zj//DayP/pzLL/5cCh/+G3
lP/fsoz/3a6G/96wiP/ftI//4biV/+XAof/pzLL/8NrI//fs4//+/fz/////////////////////////
///////////////////////////////////////////////////e3t7hmZmZwIyMjLzW1tbc////////
///////////////////39/f//f39//n5+f/m5ub/8fHx/+rq6v+urq7WAAAA2gAAANkAAADZAAAA2QAA
AFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAADGAAAA2QAA
ANkAAADZOzs7tezs7P/4+Pj/7u7u/+Xl5f/v7+//7Ozs/+fn5//+/v7/////////////////////////
////////////////////////////////////////////////////////////////////////////////
///+/fz/9ObZ/+jIrf/esYv/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/esYv/6Mit//Pj1v/+/Pv/////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////j4
+P/09PT///////b29v/s7Oz/Ozs7tgAAANkAAADZAAAA2QAAAMYAAAANAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYAAADZAAAA2QAAANkCAgLS2dnZ6OXl5f/r6+v/9/f3/+rq
6v/8/Pz///////z8/P//////////////////////////////////////////////////////////////
/////////////////////////////////////////Pfz/+3Uv//gtI//3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/ftI//7dS+//z38///////////////////////////////////////////////////////////////
////////////////////////////////////////+Pj4/+Xl5f/o6Oj/+vr6/+3t7f/5+fn/5ubm5wIC
AtEAAADZAAAA2QAAANkAAAB3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAA
ANQAAADZAAAA2QAAANltbW23/v7+//Pz8//5+fn///////Ly8v/x8fH//f39////////////////////
//////////////////////////////////////////////////////////////////////////////37
+P/t1L7/3rGK/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/96xiv/t1L7//fv4////
////////////////////////////////////////////////////////////////////////////////
/////////////+zs7P/z8/P/8vLy/+Xl5f/r6+v/8fHx/19fX74AAADaAAAA2QAAANkAAADUAAAAIAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAANkAAADZAAAA2QwMDMbw8PD3//////X1
9f/o6Oj/9fX1/+bm5v/l5eX/+fn5////////////////////////////////////////////////////
////////////////////////////////////////9OXZ/+C2kv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/4LaS//Tl2f//////////////////////////////
/////////////////////////////////////////////////////////////////////////v7+/+/v
7//8/Pz/7+/v/97e3vgKCgrIAAAA2QAAANkAAADZAAAAmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAA8AAAA2QAAANkAAADZAAAA2ZqamsTl5eX/7Ozs/+3t7f/l5eX/9vb2//r6+v/y8vL/////////
//////////////////////////////////////////////////////////////////////////////78
+//rz7f/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/rz7f//vz7////////////////////////////////////////////////////
///////////////////////////////////7+/v/6urq/+7u7v//////9/f3//j4+P+hoaHDAAAA2QAA
ANkAAADZAAAA2QAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAC1AAAA2QAAANkAAADZICAguvf3
9//o6Oj/8/Pz///////z8/P//Pz8////////////////////////////////////////////////////
////////////////////////////////////////+/bx/+S+nf/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/5L6e//v2
8v//////////////////////////////////////////////////////////////////////////////
///8/Pz/5ubm/+jo6P/x8fH/5eXl//Hx8f/8/Pz/Hh4evgAAANkAAADZAAAA2QAAALUAAAADAAAAAAAA
AAAAAAAAAAAAAAAAAF0AAADZAAAA2QAAANkAAADXzs7O1//////6+vr/8fHx//7+/v/q6ur/5ubm//n5
+f//////////////////////////////////////////////////////////////////////////////
///58er/4beT/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/+G4lf/68uz/////////////////////////
////////////////////////////////////////////////////////+fn5//7+/v/6+vr/5ubm//Pz
8//q6ur/t7e33AAAANkAAADZAAAA2QAAANkAAABdAAAAAAAAAAAAAAAAAAAADwAAAMoAAADZAAAA2QAA
ANlGRka16urq//b29v/t7e3/5eXl//Dw8P/u7u7/6Ojo//7+/v//////////////////////////////
//////////////////////////////////////////////rz7f/gtZD/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3K2G/7iZfvV9a1zdQzs0zh0ZF8sJBwbRAgIC1gIC
AtYJBwbRHRkXy0M7NM59a1zduJl+9dythv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/gtZD/+vPt////////////////////////////////////////////////////
///////////////////////////////////29vb/9PT0///////39/f/7u7u/0ZGRrUAAADZAAAA2QAA
ANkAAADKAAAAEAAAAAAAAAAAAAAAfgAAANkAAADZAAAA2QQEBM/e3t7s5eXl/+zs7P/5+fn/7Ozs//39
/f///////v7+////////////////////////////////////////////////////////////////////
////////+/by/+G4lf/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/8ym
hfxvYFTYDw4MzgAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2Q8O
DM5vYFTYzKaF/N2uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/4biV//v2
8v////////////////////////////////////////////////////////////////////////////j4
+P/l5eX/5+fn//n5+f/r6+v/+Pj4/+zs7OwEBATPAAAA2QAAANkAAADZAAAAfgAAAAAAAAAkAAAA1gAA
ANkAAADZAAAA2Xp6erj/////9fX1//j4+P//////8fHx/+/v7//9/f3/////////////////////////
///////////////////////////////////////////////////+/Pv/5L6d/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/SqYb+XlJJ0wICAtYAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAgIC1l5SSdPSqYb+3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/+S+nv/+/Pv/////////////////////////
///////////////////////////////////////////////////t7e3/9fX1//Pz8//l5eX/7Ozs/+/v
7/9qamrAAAAA2gAAANkAAADZAAAA1gAAACUAAACNAAAA2QAAANkAAADZCgoKx/Ly8vr+/v7/9PT0/+bm
5v/z8/P/5ubm/+Xl5f/6+vr/////////////////////////////////////////////////////////
///////////////////rz7f/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/52F
ceoKCQfQAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkKCQfQnYVx6t2uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/rz7f/////////////////////////////////////////////////////////
//////////////////////////////7+/v/w8PD//v7+//Dw8P/h4eH7CQkJyQAAANkAAADZAAAA2QAA
AI4AAACfAAAA2QAAANkAAADZAAAA2nR0dMLr6+v/7u7u/+Xl5f/4+Pj/+/v7//T09P//////////////
//////////////////////////////////////////////////////////////Tm2f/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/brYb/XVFH0wAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
AMwAAACOAAAAVgAAAC4AAAARAAAABAAAAAQAAAARAAAALgAAAFYAAACOAAAAzAAAANkAAADZAAAA2QAA
ANkAAADZAAAA2V1RR9PbrYb/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/9OXZ////
////////////////////////////////////////////////////////////////////////+vr6/+np
6f/s7Oz///////b29v+CgoK8AAAA2AAAANkAAADZAAAA2QAAAKIAAAA6AAAA1AAAANkAAADZAAAA2gAA
ANx3d3e8//////T09P/7+/v/////////////////////////////////////////////////////////
/////////////////////////fv5/+C2kv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/9er
hv88NS7MAAAA2QAAANkAAADZAAAA2QAAANkAAAC6AAAAUwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFMAAAC6AAAA2QAAANkAAADZAAAA2QAAANk7My7M16uG/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/4LaS//37+P//////////////////////////////
/////////////////////////////////////////f39/+bm5v/p6en/8PDw/2xsbMAAAADbAAAA2QAA
ANkAAADZAAAA1AAAADYAAAAAAAAAPwAAANEAAADZAAAA2QAAANkAAADZcXFxt+np6f/m5ub/+Pj4////
////////////////////////////////////////////////////////////////////////7dS//92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/262G/zw1LswAAADZAAAA2QAAANkAAADZAAAA0QAA
AGMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAEAAAAYwAAANEAAADZAAAA2QAAANkAAADZPDUuzNuthv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/+3Uvv//////////////////////////////////////////////////////////////
//////////////r6+v/+/v7/b29vuAAAAN0AAADbAAAA2QAAANkAAADRAAAAQAAAAAAAAAAAAAAAAAAA
ADgAAADRAAAA2QAAANkAAADZAAAA2WFhYbrp6en//v7+////////////////////////////////////
///////////////////////////////////89/P/3rGK/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/XVFH0wAAANkAAADZAAAA2QAAANkAAAC7AAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAC7AAAA2QAA
ANkAAADZAAAA2V1RR9Pdrob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/96xiv/89/P/////////
//////////////////////////////////////////////////////////////////9hYWG1AAAA2QAA
ANkAAADZAAAA2QAAANEAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAzAAAANkAAADZAAAA2QAA
ANlcXFy1////////////////////////////////////////////////////////////////////////
///t1L//3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv+dhXHqAAAA2QAAANkAAADZAAAA2QAA
ALAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAArwAAANkAAADZAAAA2QAAANmdhXHq3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/t1L//////////////////////////////////////////
/////////////////////////////1xcXLUAAADZAAAA2QAAANkAAADZAAAAzAAAADYAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAALwAAAMwAAADZAAAA2QAAANkAAADZVVVVtP7+/v7/////////////
//////////////////////////////////////////////79/P/ftI//3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/9Kphv4KCQfQAAAA2QAAANkAAADZAAAAuwAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAEgAAALoAAADZAAAA2QAAANkKCQfQ0qmG/t2uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/ftI///vz7///////////////////////////////////////////////////////+/v7+SkpKtAAA
ANkAAADZAAAA2QAAANkAAADMAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ACwAAADHAAAA2QAAANkAAADZAAAA2UpKSrT+/v7+////////////////////////////////////////
//////////////Pj1v/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/15SSdMAAADZAAAA2QAA
ANkAAADRAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAADRAAAA2QAA
ANkAAADZXlJJ092uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/8+PW////////////////////
//////////////////////////////z8/PxHR0e0AAAA2QAAANkAAADZAAAA2QAAAMcAAAAtAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAAxwAAANkAAADZAAAA2QAA
ANlHR0e0/v7+/v///////////////////////////////////////////////+jIrf/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/zaWE/QICAtYAAADZAAAA2QAAANkAAABjAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAAAA2QAAANkAAADZAgIC1symhfzdrob/3a6G/92u
hv/drob/3a6G/92uhv/drob/6Mit/////////////////////////////////////////////v7+/js7
O7UAAADZAAAA2QAAANkAAADZAAAAxwAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAMEAAADZAAAA2QAAANkAAADZhISEuv//////////////////
/////////////////////////v38/96xi//drob/3a6G/92uhv/drob/3a6G/92uhv/drob/b2BU2AAA
ANkAAADZAAAA2QAAALoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAEAAAAugAAANkAAADZAAAA2W9gVNjdrob/3a6G/92uhv/drob/3a6G/92uhv/drob/3rGL//79
/P//////////////////////////////////////fX19uQAAANkAAADZAAAA2QAAANkAAADBAAAAJQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AB8AAADBAAAA2QAAANkAAADZERERwf//////////////////////////////////////////9+zj/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/crYb/Dw4MzgAAANkAAADZAAAA2QAAAFMAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUwAAANkAAADZAAAA2Q8O
DM7crYb/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G//fs4///////////////////////////////
////////EBAQwQAAANkAAADZAAAA2QAAAMEAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAA2QAAANkAAADZAgIC0f//
////////////////////////////////////////8NrI/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv+4mX71AAAA2QAAANkAAADZAAAAzAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAMwAAADZAAAA2QAAANm5mH723a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G//DayP//////////////////////////////////////AgIC0QAAANkAAADZAAAA2QAA
ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAXAAAA2QAAANkAAADZCAgIyf//////////////////////////////////
////////6cyy/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv9+bF3dAAAA2QAAANkAAADZAAAAjwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AI4AAADZAAAA2QAAANl9a1zd3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/+nMsv//////////////
////////////////////////CAgIyQAAANkAAADZAAAA2QAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAA2QAA
ANkAAADZGBgYvf//////////////////////////////////////////5cCh/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv9DOzTOAAAA2QAAANkAAADZAAAAVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYAAADZAAAA2QAAANlDOzTO3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/+XAof//////////////////////////////////////GBgYvQAA
ANkAAADZAAAA2QAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDAAAA2QAAANkAAADZKysrt///////////////////
////////////////////////4beU/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv8dGRfLAAAA2QAA
ANkAAADZAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAC4AAADZAAAA2QAAANkdGRfL3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/+G4
lf//////////////////////////////////////KysrtwAAANkAAADZAAAA2QAAAEEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABLAAAA2QAAANkAAADZOjo6tf//////////////////////////////////////////37KM/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv8JBwbRAAAA2QAAANkAAADZAAAAEgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAADZAAAA2QAA
ANkJBwfR3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/9+0j///////////////////////////////
////////Ozs7tQAAANkAAADZAAAA2QAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRAAAA2QAAANkAAADZQEBAtP//
////////////////////////////////////////3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv8CAgLWAAAA2QAAANkAAADZAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADZAAAA2QAAANkCAgLW3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/96wif//////////////////////////////////////QUFBtAAAANkAAADZAAAA2QAA
AFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABRAAAA2QAAANkAAADZQEBAtP//////////////////////////////////
////////3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv8CAgLWAAAA2QAAANkAAADZAAAABQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAUAAADZAAAA2QAAANkCAgLW3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv//////////////
////////////////////////QUFBtAAAANkAAADZAAAA2QAAAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLAAAA2QAA
ANkAAADZOjo6tf//////////////////////////////////////////37KM/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv8JBwbRAAAA2QAAANkAAADZAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAADZAAAA2QAAANkJBwfR3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/9+yjP//////////////////////////////////////Ojo6tQAA
ANkAAADZAAAA2QAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDAAAA2QAAANkAAADZKysrt///////////////////
////////////////////////4beU/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv8dGRfLAAAA2QAA
ANkAAADZAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAC4AAADZAAAA2QAAANkdGRfL3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/+G3
lP//////////////////////////////////////KysrtwAAANkAAADZAAAA2QAAAEEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAvAAAA2QAAANkAAADZGBgYvf//////////////////////////////////////////5cCh/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv9DOzTOAAAA2QAAANkAAADZAAAAVgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYAAADZAAAA2QAA
ANlDOzTO3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/+XAof//////////////////////////////
////////GBgYvQAAANkAAADZAAAA2QAAAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAA2QAAANkAAADZCAgIyf//
////////////////////////////////////////6cyy/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv9+bF3dAAAA2QAAANkAAADZAAAAjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI4AAADZAAAA2QAAANl9a1zd3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/+nMsv//////////////////////////////////////CAgIyQAAANkAAADZAAAA2QAA
ABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAhAAAA2QAAANkAAADZAgIC0v//////////////////////////////////
////////8NrI/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv+4mX71AAAA2QAAANkAAADZAAAAzAAA
AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
AMwAAADZAAAA2QAAANm5mH723a6G/92uhv/drob/3a6G/92uhv/drob/3a6G//DayP//////////////
////////////////////////AgIC0QAAANkAAADZAAAA2QAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAADBAAAA2QAA
ANkAAADZERERwf//////////////////////////////////////////9+zj/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/crYb/Dw4MzgAAANkAAADZAAAA2QAAAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAANkAAADZAAAA2Q8ODM7crYb/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G//fs4///////////////////////////////////////ERERwQAA
ANkAAADZAAAA2QAAAMEAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAMEAAADZAAAA2QAAANkAAADZhISEuv//////////////////
/////////////////////////v38/96xi//drob/3a6G/92uhv/drob/3a6G/92uhv/drob/b2BU2AAA
ANkAAADZAAAA2QAAALoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAEAAAAugAAANkAAADZAAAA2W9gVNjdrob/3a6G/92uhv/drob/3a6G/92uhv/drob/3rGL//79
/P//////////////////////////////////////fX19uQAAANkAAADZAAAA2QAAANkAAADCAAAAJgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAAxwAA
ANkAAADZAAAA2QAAANlKSkq0/v7+/v///////////////////////////////////////////////+jJ
rv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/zaWE/QICAtYAAADZAAAA2QAAANkAAABjAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAAAA2QAAANkAAADZAgIC1sym
hfzdrob/3a6G/92uhv/drob/3a6G/92uhv/drob/6Mit////////////////////////////////////
/////////v7+/js7O7UAAADZAAAA2QAAANkAAADZAAAAxwAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAADHAAAA2QAAANkAAADZAAAA2UpKSrT+/v7+////////
//////////////////////////////////////////////Tm2f/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/15SSdMAAADZAAAA2QAAANkAAADRAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAACYAAADRAAAA2QAAANkAAADZXlJJ092uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/9ObZ//////////////////////////////////////////////////z8/PxISEi0AAAA2QAA
ANkAAADZAAAA2QAAAMcAAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwAA
AMwAAADZAAAA2QAAANkAAADZWFhYtP7+/v7/////////////////////////////////////////////
//////////////79/P/gtI//3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/9Kphv4KCQnQAAAA2QAA
ANkAAADZAAAAuwAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAALsAAADZAAAA2QAA
ANkKCQnQ0qmG/t2uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/gtI///v38////////////////////
///////////////////////////////////+/v7+TU1NtAAAANkAAADZAAAA2QAAANkAAADMAAAALwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3AAAAzAAAANkAAADZAAAA2QAAANlcXFy1////////
///////////////////////////////////////////////////////////////////t1L//3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv+dhXHqAAAA2QAAANkAAADZAAAA2QAAALEAAAASAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAASAAAAsQAAANkAAADZAAAA2QAAANmdhXHq3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/t1L//////////////////////////////////////////////////////////
/////////////1xcXLUAAADZAAAA2QAAANkAAADZAAAAzAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ADgAAADRAAAA2QAAANkAAADZAAAA2WxsbLb/////////////////////////////////////////////
///////////////////////////////////89/P/3rGK/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/XVFH0wAAANkAAADZAAAA2QAAANkAAAC7AAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAC7AAAA2QAA
ANkAAADZAAAA2V1RR9Pdrob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/96xiv/89/P/////////
//////////////////////////////////////////////////////////////7+/v9YWFi8AAAA2wAA
ANkAAADZAAAA2QAAANEAAAA4AAAAAAAAAAAAAAAAAAAAQAAAANEAAADZAAAA2QAAANkAAADbY2Njvvv7
+//+/v7/+vr6////////////////////////////////////////////////////////////////////
////////7dXA/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/262G/z01L80AAADZAAAA2QAA
ANkAAADZAAAA0QAAAGMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAEAAAAYwAAANEAAADZAAAA2QAAANkAAADZPDUuzNuthv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/+3Uv///////////////////////////////////////////////
//////////////////////////////j4+P/m5ub/ZGRkvQAAANkAAADZAAAA2QAAANkAAADRAAAAQQAA
AAAAAAA6AAAA1AAAANkAAADZAAAA2QAAANh3d3e+5eXl//Dw8P/p6en/5ubm//39/f//////////////
/////////////////////////////////////////////////////////fv5/+G3k//drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/9erhv89NS/NAAAA2QAAANkAAADZAAAA2QAAANkAAAC6AAAAVAAA
AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFMAAAC6AAAA2QAA
ANkAAADZAAAA2QAAANk8NS7M16uG/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/4LaS//37
+P//////////////////////////////////////////////////////////////////////////////
///7+/v/9PT0/319fbkAAADaAAAA3AAAANoAAADZAAAA1AAAADYAAACfAAAA2QAAANkAAADZAAAA2IaG
hrv5+fn/9vb2///////s7Oz/6enp//r6+v//////////////////////////////////////////////
//////////////////////////////Xm2v/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/brYb/XVFH0wAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAAMwAAACPAAAAVgAAAC8AAAASAAAABgAA
AAYAAAASAAAALwAAAFYAAACPAAAAzAAAANkAAADZAAAA2QAAANkAAADZAAAA2V1RR9PbrYb/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/9OXZ////////////////////////////////////
////////////////////////////////////////9PT0//v7+//4+Pj/5eXl/+7u7v94eHjAAAAA3AAA
ANoAAADZAAAA2QAAAKIAAACNAAAA2QAAANkAAADZCgoKxvDw8Pnm5ub/8PDw//7+/v/w8PD//v7+////
////////////////////////////////////////////////////////////////////////////////
///rz7j/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/52FceoKCQfQAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkKCQfQnYVx6t2uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/rz7f/////////////////////////////////////////////////////////////////////////
///6+vr/5eXl/+bm5v/09PT/5ubm//T09P/6+vr6CgoKyAAAANkAAADZAAAA2QAAAI4AAAAkAAAA1gAA
ANkAAADZAAAA2XZ2drrl5eX/7+/v/+zs7P/l5eX/8/Pz//X19f/t7e3/////////////////////////
///////////////////////////////////////////////////+/Pv/5L6d/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/SqYb+XlJJ0wICAtYAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAgIC1l5SSdPSqYb+3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/+S+nf/+/Pv/////////////////////////
///////////////////////////////////////////////////9/f3/7+/v//Hx8f//////+fn5//X1
9f95eXm5AAAA2QAAANkAAADZAAAA1gAAACQAAAAAAAAAfQAAANkAAADZAAAA2QQEBM/o6Ojr//////j4
+P/r6+v/+fn5/+fn5//l5eX/+Pj4////////////////////////////////////////////////////
////////////////////////+/bx/+G3k//drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/82mhP1vYFTYDw4MzgAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2Q8ODM5vYFTYzaaE/d2uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/4beT//v28f//////////////////////////////////////////////////////////////
//////////////39/f///////f39/+zs7P/5+fn/7Ozs/9HR0e0EBATRAAAA2QAAANkAAADZAAAAfgAA
AAAAAAAAAAAADwAAAMoAAADZAAAA2QAAANlHR0e0/Pz8/+7u7v/39/f///////T09P/29vb/////////
//////////////////////////////////////////////////////////////////////////////nx
6v/gtZD/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3K2G/7iZ
fvV+bF3dQzs0zh0ZF8sJBwbRAgIC1QICAtUJBwbRHRkXy0M7NM5+bF3duJl+9dythv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/gtZD/+fHq////////////////////
/////////////////////////////////////////////////////////v7+/+jo6P/u7u7/8PDw/+Xl
5f/t7e3/9vb2/z8/P7oAAADZAAAA2QAAANkAAADKAAAADwAAAAAAAAAAAAAAAAAAAFwAAADZAAAA2QAA
ANkAAADYw8PD2eXl5f/q6ur/8/Pz/+bm5v/6+vr//v7+//n5+f//////////////////////////////
///////////////////////////////////////////////////58er/4beT/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/+G4lf/68+3/////////////////////////////////////////////////////////
////////////////////////+fn5/+bm5v/q6ur//v7+//Hx8f/6+vr/zs7O1wAAANcAAADZAAAA2QAA
ANkAAABdAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAC1AAAA2QAAANkAAADZHh4euvDw8P/8/Pz/8fHx/+Xl
5f/x8fH/6Ojo/+bm5v/8/Pz/////////////////////////////////////////////////////////
////////////////////////+/bx/+S+nf/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/5L6e//v28v//////////////
//////////////////////////////////////////////////////////////////////////////z8
/P/z8/P///////Pz8//o6Oj/Hh4evAAAANkAAADZAAAA2QAAALUAAAADAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAA7AAAA2QAAANkAAADZAAAA2aCgoML/////+Pj4//f39///////7u7u/+vr6//7+/v/////////
//////////////////////////////////////////////////////////////////////////////78
+//r0Lj/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/rz7f//vz7////////////////////////////////////////////////////
///////////////////////////////////y8vL/+fn5//b29v/l5eX/7e3t/+zs7P+MjIzIAAAA2gAA
ANkAAADZAAAA2QAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlwAAANkAAADZAAAA2QoK
Csbr6+v35eXl/+/v7//8/Pz/7+/v//7+/v//////////////////////////////////////////////
////////////////////////////////////////////////////////9eba/+G3k//drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/4LaS//Xm2v//////////////
//////////////////////////////////////////////////////////////////////////////n5
+f/l5eX/5ubm//X19f/o6Oj/9fX1//f39/YKCgrHAAAA2QAAANkAAADZAAAAlwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAANQAAADZAAAA2QAAANlpaWm45ubm//Ly8v/s7Oz/5eXl//Ly
8v/z8/P/7Ozs////////////////////////////////////////////////////////////////////
//////////////////////////////37+f/t1cD/3rGK/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/96xiv/t1cD//fv5////////////////////////////////////////////////////
//////////////////////////////////////////////7+/v/x8fH/8vLy///////5+fn/8vLy/21t
bbcAAADZAAAA2QAAANkAAADUAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHYAAADZAAAA2QAAANkCAgLS4+Pj5//////5+fn/7e3t//r6+v/o6Oj/5eXl//j4+P//////////////
////////////////////////////////////////////////////////////////////////////////
/////////Pfz/+3Uv//gtI//3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/gtI//7dS///z38///////////////
////////////////////////////////////////////////////////////////////////////////
/////////Pz8///////8/Pz/6urq//f39//r6+v/zMzM6QICAtQAAADZAAAA2QAAANkAAAB2AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAADGAAAA2QAAANkAAADZOzs7tfv7
+//s7Oz/9vb2///////19fX/+Pj4////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////+/fz/9ObZ/+jJ
rv/esYv/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92uhv/drob/3a6G/92u
hv/fsoz/6Mit//Pj1v/+/fz/////////////////////////////////////////////////////////
///////////////////////////////////////////////////+/v7/5+fn/+zs7P/w8PD/5eXl/+7u
7v/4+Pj/NTU1ugAAANkAAADZAAAA2QAAAMYAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABWAAAA2QAAANkAAADZAAAA2Lu7u9Pl5eX/6urq//Hx8f/m5ub/+fn5//39
/f/39/f//////////////////////9PT09qUlJS+jo6Ovd7e3uD/////////////////////////////
///////////////////////////////////////////////////+/fz/9+zj//DayP/pzLL/5cCh/+G3
lP/fsoz/3a6G/92uhv/fsoz/4beU/+XAof/pzLL/8NrI//fs4//+/fz/////////////////////////
///////////////////////////////////////////////////e3t7gjo6OvZSUlL7T09Pa////////
///////////////////5+fn/5+fn/+vr6///////8/Pz//r6+v/FxcXSAAAA2AAAANkAAADZAAAA2QAA
AFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAArwAA
ANkAAADZAAAA2RgYGL3y8vL+/f39//Ly8v/l5eX/8vLy/+fn5//m5ub/8fHx9aqqqsVKSkq0CgoKxgAA
ANkAAADZAAAA2QAAANhYWFi0+fn5+P//////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////+fn5+FJSUrQAAADYAAAA2QAAANkAAADZCgoKx0pKSrSqqqrF9vb29P///////////f39//Ly
8v//////8vLy/+bm5v4YGBi/AAAA2QAAANkAAADZAAAAsAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANQAAANkAAADZAAAA2QAAANmUlJS+//////f3
9//4+Pj/1tbW3G9vb70gICC+AQEB1QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZFRUVvtnZ
2d3/////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////W1tbcFBQUvwAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAQEB1CIiIrl6enq4zc3N3eXl5f/s7Oz/7e3t/4GBgcUAAADaAAAA2QAA
ANkAAADZAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAJAAAADZAAAA2QAAANkICAjJnp6ex0JCQrwKCgrKAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QEBAdRsbGy2+vr6+f//////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////+vr6+WpqarYBAQHUAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2gkJCctISEi3p6enxQgICMoAAADZAAAA2QAAANkAAACRAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAADRAAAA2QAA
ANkAAADZAAAA2QAAAN0AAADbAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANEAAACZAAAAvAAA
ANkAAADZAAAA2QAAANkAAADZDg4OwqWlpcT+/v7+////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////7+/v6kpKTEDg4OwgAAANkAAADZAAAA2QAA
ANkAAADZAAAAvAAAAJkAAADRAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANEAAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAALoAAAB7AAAAPAAAAAcAAAAAAAAADQAAAI4AAADZAAAA2QAAANkAAADZAAAA2QAA
ANkYGBi9pKSkxPz8/Pz/////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///8/Pz8pKSkxBgYGL0AAADZAAAA2QAAANkAAADZAAAA2QAAANkAAACOAAAADQAAAAAAAAAHAAAAPAAA
AHoAAAC6AAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAAHEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAJAAAAwgAAANkAAADZAAAA2QAAANkAAADZAAAA0QAAAJsAAABdAAAAHwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAABLAAAAxgAAANkAAADZAAAA2QAAANkAAADZAAAA2QwMDMaSkpK+////////
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////5KSkr4MDAzGAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAAxgAAAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAF0AAACbAAAA0QAA
ANkAAADZAAAA2QAAANkAAADZAAAAwgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAANAAAADZAAAAvAAA
AH0AAABAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAA
AIEAAADWAAAA2QAAANkAAADZAAAA2QAAANkAAADZYGBgtf//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////YGBgtQAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANYAAACCAAAADgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEAAAAB9AAAAvAAAANkAAADQAAAAPgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAkgAAANgAAADZAAAA2QAA
ANkAAADZAAAA2NnZ2d3/////////////////////////////////////////////////////////////
///////////////////////////////////////////////////a2treAAAA2AAAANkAAADZAAAA2QAA
ANkAAADYAAAAkwAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAACIAAAA0wAAANkAAADZAAAA2WxsbLb/////////////
////////////////////////////////////////////////////////////////////////////////
//////////////////9xcXG3AAAA2QAAANkAAADZAAAA0wAAAIQAAAAkAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAVgAAANkAAADZAAAA2ScnJ7j/////////////////////////////////////////////
//////////////////////////////////////////////////////////////////8nJye4AAAA2QAA
ANkAAADZAAAAVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAANkAAADZAAAA2QIC
AtH8/Pz7////////////////////////////////////////////////////////////////////////
//////////////////////////////z8/PsCAgLRAAAA2QAAANkAAADZAAAAHwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEAAADZAAAA2QAAANnFxcXS////////////////////////
/////////////////////////////////////////////////////////////////////////////8XF
xdIAAADZAAAA2QAAANkAAADBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AIsAAADZAAAA2QAAANlxcXG3////////////////////////////////////////////////////////
/////////////////////////////////////////////3FxcbcAAADZAAAA2QAAANkAAACLAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAAADZAAAA2QAAANknJye4////////
///l5eX/5eXl////////////5eXl/+Xl5f///////////+Xl5f/l5eX////////////l5eX/5eXl////
////////5eXl/yEhIb8AAADZAAAA2QAAANkAAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAB8AAADZAAAA2QAAANkCAgLR/Pz8+//////l5eX/5eXl////////////5eXl/+Xl
5f///////////+Xl5f/l5eX////////////l5eX/5eXl////////////4uLi+wICAtYAAADZAAAA2QAA
ANkAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBAAAA2QAA
ANkAAADZrq6u1uXl5f///////////+Xl5f/l5eX////////////l5eX/5eXl////////////5eXl/+Xl
5f///////////+Xl5f/l5eX/xcXF0gAAANkAAADZAAAA2QAAAMUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNAAAA2QAAANkAAADZYmJivuXl5f///////////+Xl
5f/l5eX////////////l5eX/5eXl////////////5eXl/+Xl5f///////////+Xl5f/l5eX/cXFxtwAA
ANkAAADZAAAA2QAAAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABYAAAA2QAAANkAAADZJycnuP/////l5eX/5eXl////////////5eXl/+Xl5f///////////+Xl
5f/l5eX////////////l5eX/5eXl////////////ISEhvwAAAN0AAADZAAAA2QAAAFgAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAA2QAAANkAAADZAgIC0fz8
/Pvl5eX/5eXl////////////5eXl/+Xl5f///////////+Xl5f/l5eX////////////l5eX/5eXl////
///8/Pz7AgIC1gAAAN0AAADZAAAA2QAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAxQAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAAxQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjgAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAAjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAABQAAAI0AAADUAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAA
ANkAAADZAAAA2QAAANkAAADZAAAA2QAAANkAAADZAAAA2QAAANQAAACNAAAABQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD/////+AAAA//////gAAAA//////gAAAP/////4AAAAP/////4AAAD/////+AA
AAD/////+AAAA//////gAAAA//////AAAAH/////4AAAAP/////wAAAB/////+AAAAD/////8AAAAf//
///gAAAA//////AAAAH/////4AAAAP/////gAAAA/////+AAAAD/////4AAAAP/////gAAAA/////+AA
AAD/////4AAAAP/////gAAAA/////+AAAAD/////wAAAAH/////gAAAA/////8AAAAB/////4AAAAP//
//8AAAAAH////+AAAAD/5//8AAAAAAf//P/gAAAA/8B/8AAAAAAB/8B/4AAAAP+AD+AAAAAAAP4AP+AA
AAD/gACAAAAAAAAgAD/gAAAA/wAAAAAAAAAAAAAf4AAAAP8AAAAAAAAAAAAAH+AAAAD+AAAAAAAAAAAA
AA/gAAAA/AAAAAAAAAAAAAAH4AAAAPwAAAAAAAAAAAAAB+AAAAD4AAAAAAAAAAAAAAPgAAAA+AAAAAAA
AAAAAAAD4AAAAPAAAAAAAAAAAAAAAeAAAADwAAAAAAAAAAAAAAHgAAAA4AAAAAAAAAAAAAAA4AAAAMAA
AAAAAAAAAAAAAGAAAADAAAAAAAAAAAAAAABgAAAAgAAAAAAAAAAAAAAAIAAAAIAAAAAAAAAAAAAAACAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAA
AAAAAAAAgAAAAAAf/4AAAAAAIAAAAMAAAAAAf//gAAAAAGAAAADgAAAAAP//8AAAAADgAAAA8AAAAAH/
//gAAAAB4AAAAPgAAAAD///8AAAAA+AAAAD8AAAAB////gAAAAfgAAAA/gAAAAf///4AAAAP4AAAAP8A
AAAP////AAAAH+AAAAD/gAAAD////wAAAD/gAAAA/4AAAB////+AAAA/4AAAAP+AAAAf////gAAAP+AA
AAD/gAAAH////4AAAD/gAAAA/4AAAB////+AAAA/4AAAAP+AAAAf////gAAAP+AAAAD/gAAAH////4AA
AD/gAAAA/4AAAB////+AAAA/4AAAAP+AAAAf////gAAAP+AAAAD/gAAAH////4AAAD/gAAAA/4AAAB//
//+AAAA/4AAAAP+AAAAP////AAAAP+AAAAD/AAAAD////wAAAB/gAAAA/gAAAAf///4AAAAP4AAAAPwA
AAAH///+AAAAB+AAAAD4AAAAA////AAAAAPgAAAA8AAAAAH///gAAAAB4AAAAOAAAAAA///wAAAAAOAA
AADAAAAAAH//4AAAAABgAAAAgAAAAAAf/4AAAAAAIAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAgAAAAgAAAAAAA
AAAAAAAAIAAAAMAAAAAAAAAAAAAAAGAAAADAAAAAAAAAAAAAAABgAAAA4AAAAAAAAAAAAAAA4AAAAPAA
AAAAAAAAAAAAAeAAAADwAAAAAAAAAAAAAAHgAAAA+AAAAAAAAAAAAAAD4AAAAPgAAAAAAAAAAAAAA+AA
AAD8AAAAAAAAAAAAAAfgAAAA/AAAAAAAAAAAAAAH4AAAAP4AAAAAAAAAAAAAD+AAAAD/AAAAAAAAAAAA
AB/gAAAA/wAAAAAAAAAAAAAf4AAAAP+AAIAAAAAAACAAP+AAAAD/gA/gAAAAAAD+AD/gAAAA/8B/8AAA
AAAB/8B/4AAAAP/n//wAAAAAB//8/+AAAAD/////AAAAAB/////gAAAA/////8AAAAB/////4AAAAP//
///AAAAAf////+AAAAD/////4AAAAP/////gAAAA/////+AAAAD/////4AAAAP/////gAAAA/////+AA
AAD/////4AAAAP/////gAAAA//////AAAAH/////4AAAAP/////wAAAB/////+AAAAD/////8AAAAf//
///gAAAA//////AAAAH/////4AAAAP/////4AAAD/////+AAAAD/////+AAAA//////gAAAA//////gA
AAP/////4AAAAP/////4AAAD/////+AAAAA=
</value>
</data>
</root>
\ No newline at end of file
ModbusDemo/ModbusDemo/Lib/LibModbus.dll
deleted
100644 → 0
View file @
051dba9a
File deleted
ModbusDemo/ModbusDemo/Lib/LibSocket.dll
deleted
100644 → 0
View file @
051dba9a
File deleted
ModbusDemo/ModbusDemo/MDemo.Designer.cs
deleted
100644 → 0
View file @
051dba9a
namespace
ModbusDemo
{
partial
class
MDemo
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private
System
.
ComponentModel
.
IContainer
components
=
null
;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected
override
void
Dispose
(
bool
disposing
)
{
if
(
disposing
&&
(
components
!=
null
))
{
components
.
Dispose
();
}
base
.
Dispose
(
disposing
);
}
#
region
Windows
窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private
void
InitializeComponent
()
{
this
.
TestBtn
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
CoilBox
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
pictureBox16
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox15
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox14
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox13
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox12
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox11
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox10
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox9
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox8
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox7
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox6
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox5
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox4
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox3
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox2
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
pictureBox1
=
new
System
.
Windows
.
Forms
.
PictureBox
();
this
.
label16
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label15
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label14
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label13
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label12
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label11
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label10
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label9
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label8
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label7
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label6
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label5
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label4
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label3
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label2
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label1
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
stopbtn
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
label17
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
IPsetBox
=
new
System
.
Windows
.
Forms
.
TextBox
();
this
.
CoilBox
.
SuspendLayout
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox16
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox15
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox14
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox13
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox12
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox11
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox10
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox9
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox8
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox7
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox6
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox5
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox4
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox3
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox2
)).
BeginInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox1
)).
BeginInit
();
this
.
SuspendLayout
();
//
// TestBtn
//
this
.
TestBtn
.
Location
=
new
System
.
Drawing
.
Point
(
226
,
23
);
this
.
TestBtn
.
Name
=
"TestBtn"
;
this
.
TestBtn
.
Size
=
new
System
.
Drawing
.
Size
(
105
,
23
);
this
.
TestBtn
.
TabIndex
=
0
;
this
.
TestBtn
.
Text
=
"读线圈测试"
;
this
.
TestBtn
.
UseVisualStyleBackColor
=
true
;
this
.
TestBtn
.
Click
+=
new
System
.
EventHandler
(
this
.
TestBtn_Click
);
//
// CoilBox
//
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox16
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox15
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox14
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox13
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox12
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox11
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox10
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox9
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox8
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox7
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox6
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox5
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox4
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox3
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox2
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
pictureBox1
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label16
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label15
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label14
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label13
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label12
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label11
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label10
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label9
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label8
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label7
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label6
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label5
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label4
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label3
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label2
);
this
.
CoilBox
.
Controls
.
Add
(
this
.
label1
);
this
.
CoilBox
.
Location
=
new
System
.
Drawing
.
Point
(
13
,
63
);
this
.
CoilBox
.
Name
=
"CoilBox"
;
this
.
CoilBox
.
Size
=
new
System
.
Drawing
.
Size
(
424
,
164
);
this
.
CoilBox
.
TabIndex
=
1
;
this
.
CoilBox
.
TabStop
=
false
;
this
.
CoilBox
.
Text
=
"DI Port"
;
//
// pictureBox16
//
this
.
pictureBox16
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox16
.
Location
=
new
System
.
Drawing
.
Point
(
361
,
122
);
this
.
pictureBox16
.
Name
=
"pictureBox16"
;
this
.
pictureBox16
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox16
.
TabIndex
=
31
;
this
.
pictureBox16
.
TabStop
=
false
;
this
.
pictureBox16
.
Tag
=
"15"
;
//
// pictureBox15
//
this
.
pictureBox15
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox15
.
Location
=
new
System
.
Drawing
.
Point
(
361
,
90
);
this
.
pictureBox15
.
Name
=
"pictureBox15"
;
this
.
pictureBox15
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox15
.
TabIndex
=
30
;
this
.
pictureBox15
.
TabStop
=
false
;
this
.
pictureBox15
.
Tag
=
"14"
;
//
// pictureBox14
//
this
.
pictureBox14
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox14
.
Location
=
new
System
.
Drawing
.
Point
(
361
,
59
);
this
.
pictureBox14
.
Name
=
"pictureBox14"
;
this
.
pictureBox14
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox14
.
TabIndex
=
29
;
this
.
pictureBox14
.
TabStop
=
false
;
this
.
pictureBox14
.
Tag
=
"13"
;
//
// pictureBox13
//
this
.
pictureBox13
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox13
.
Location
=
new
System
.
Drawing
.
Point
(
361
,
26
);
this
.
pictureBox13
.
Name
=
"pictureBox13"
;
this
.
pictureBox13
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox13
.
TabIndex
=
28
;
this
.
pictureBox13
.
TabStop
=
false
;
this
.
pictureBox13
.
Tag
=
"12"
;
//
// pictureBox12
//
this
.
pictureBox12
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox12
.
Location
=
new
System
.
Drawing
.
Point
(
264
,
122
);
this
.
pictureBox12
.
Name
=
"pictureBox12"
;
this
.
pictureBox12
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox12
.
TabIndex
=
27
;
this
.
pictureBox12
.
TabStop
=
false
;
this
.
pictureBox12
.
Tag
=
"11"
;
//
// pictureBox11
//
this
.
pictureBox11
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox11
.
Location
=
new
System
.
Drawing
.
Point
(
264
,
90
);
this
.
pictureBox11
.
Name
=
"pictureBox11"
;
this
.
pictureBox11
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox11
.
TabIndex
=
26
;
this
.
pictureBox11
.
TabStop
=
false
;
this
.
pictureBox11
.
Tag
=
"10"
;
//
// pictureBox10
//
this
.
pictureBox10
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox10
.
Location
=
new
System
.
Drawing
.
Point
(
264
,
59
);
this
.
pictureBox10
.
Name
=
"pictureBox10"
;
this
.
pictureBox10
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox10
.
TabIndex
=
25
;
this
.
pictureBox10
.
TabStop
=
false
;
this
.
pictureBox10
.
Tag
=
"9"
;
//
// pictureBox9
//
this
.
pictureBox9
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox9
.
Location
=
new
System
.
Drawing
.
Point
(
264
,
26
);
this
.
pictureBox9
.
Name
=
"pictureBox9"
;
this
.
pictureBox9
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox9
.
TabIndex
=
24
;
this
.
pictureBox9
.
TabStop
=
false
;
this
.
pictureBox9
.
Tag
=
"8"
;
//
// pictureBox8
//
this
.
pictureBox8
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox8
.
Location
=
new
System
.
Drawing
.
Point
(
161
,
122
);
this
.
pictureBox8
.
Name
=
"pictureBox8"
;
this
.
pictureBox8
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox8
.
TabIndex
=
23
;
this
.
pictureBox8
.
TabStop
=
false
;
this
.
pictureBox8
.
Tag
=
"7"
;
//
// pictureBox7
//
this
.
pictureBox7
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox7
.
Location
=
new
System
.
Drawing
.
Point
(
161
,
90
);
this
.
pictureBox7
.
Name
=
"pictureBox7"
;
this
.
pictureBox7
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox7
.
TabIndex
=
22
;
this
.
pictureBox7
.
TabStop
=
false
;
this
.
pictureBox7
.
Tag
=
"6"
;
//
// pictureBox6
//
this
.
pictureBox6
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox6
.
Location
=
new
System
.
Drawing
.
Point
(
161
,
59
);
this
.
pictureBox6
.
Name
=
"pictureBox6"
;
this
.
pictureBox6
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox6
.
TabIndex
=
21
;
this
.
pictureBox6
.
TabStop
=
false
;
this
.
pictureBox6
.
Tag
=
"5"
;
//
// pictureBox5
//
this
.
pictureBox5
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox5
.
Location
=
new
System
.
Drawing
.
Point
(
161
,
26
);
this
.
pictureBox5
.
Name
=
"pictureBox5"
;
this
.
pictureBox5
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox5
.
TabIndex
=
20
;
this
.
pictureBox5
.
TabStop
=
false
;
this
.
pictureBox5
.
Tag
=
"4"
;
//
// pictureBox4
//
this
.
pictureBox4
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox4
.
Location
=
new
System
.
Drawing
.
Point
(
64
,
122
);
this
.
pictureBox4
.
Name
=
"pictureBox4"
;
this
.
pictureBox4
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox4
.
TabIndex
=
19
;
this
.
pictureBox4
.
TabStop
=
false
;
this
.
pictureBox4
.
Tag
=
"3"
;
//
// pictureBox3
//
this
.
pictureBox3
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox3
.
Location
=
new
System
.
Drawing
.
Point
(
64
,
90
);
this
.
pictureBox3
.
Name
=
"pictureBox3"
;
this
.
pictureBox3
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox3
.
TabIndex
=
18
;
this
.
pictureBox3
.
TabStop
=
false
;
this
.
pictureBox3
.
Tag
=
"2"
;
//
// pictureBox2
//
this
.
pictureBox2
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox2
.
Location
=
new
System
.
Drawing
.
Point
(
64
,
59
);
this
.
pictureBox2
.
Name
=
"pictureBox2"
;
this
.
pictureBox2
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox2
.
TabIndex
=
17
;
this
.
pictureBox2
.
TabStop
=
false
;
this
.
pictureBox2
.
Tag
=
"1"
;
//
// pictureBox1
//
this
.
pictureBox1
.
BackColor
=
System
.
Drawing
.
Color
.
Black
;
this
.
pictureBox1
.
Location
=
new
System
.
Drawing
.
Point
(
64
,
26
);
this
.
pictureBox1
.
Name
=
"pictureBox1"
;
this
.
pictureBox1
.
Size
=
new
System
.
Drawing
.
Size
(
36
,
19
);
this
.
pictureBox1
.
TabIndex
=
16
;
this
.
pictureBox1
.
TabStop
=
false
;
this
.
pictureBox1
.
Tag
=
"0"
;
//
// label16
//
this
.
label16
.
AutoSize
=
true
;
this
.
label16
.
Location
=
new
System
.
Drawing
.
Point
(
326
,
126
);
this
.
label16
.
Name
=
"label16"
;
this
.
label16
.
Size
=
new
System
.
Drawing
.
Size
(
29
,
12
);
this
.
label16
.
TabIndex
=
15
;
this
.
label16
.
Text
=
"DI16"
;
//
// label15
//
this
.
label15
.
AutoSize
=
true
;
this
.
label15
.
Location
=
new
System
.
Drawing
.
Point
(
326
,
94
);
this
.
label15
.
Name
=
"label15"
;
this
.
label15
.
Size
=
new
System
.
Drawing
.
Size
(
29
,
12
);
this
.
label15
.
TabIndex
=
14
;
this
.
label15
.
Text
=
"DI15"
;
//
// label14
//
this
.
label14
.
AutoSize
=
true
;
this
.
label14
.
Location
=
new
System
.
Drawing
.
Point
(
326
,
62
);
this
.
label14
.
Name
=
"label14"
;
this
.
label14
.
Size
=
new
System
.
Drawing
.
Size
(
29
,
12
);
this
.
label14
.
TabIndex
=
13
;
this
.
label14
.
Text
=
"DI14"
;
//
// label13
//
this
.
label13
.
AutoSize
=
true
;
this
.
label13
.
Location
=
new
System
.
Drawing
.
Point
(
326
,
30
);
this
.
label13
.
Name
=
"label13"
;
this
.
label13
.
Size
=
new
System
.
Drawing
.
Size
(
29
,
12
);
this
.
label13
.
TabIndex
=
12
;
this
.
label13
.
Text
=
"DI13"
;
//
// label12
//
this
.
label12
.
AutoSize
=
true
;
this
.
label12
.
Location
=
new
System
.
Drawing
.
Point
(
229
,
126
);
this
.
label12
.
Name
=
"label12"
;
this
.
label12
.
Size
=
new
System
.
Drawing
.
Size
(
29
,
12
);
this
.
label12
.
TabIndex
=
11
;
this
.
label12
.
Text
=
"DI12"
;
//
// label11
//
this
.
label11
.
AutoSize
=
true
;
this
.
label11
.
Location
=
new
System
.
Drawing
.
Point
(
229
,
94
);
this
.
label11
.
Name
=
"label11"
;
this
.
label11
.
Size
=
new
System
.
Drawing
.
Size
(
29
,
12
);
this
.
label11
.
TabIndex
=
10
;
this
.
label11
.
Text
=
"DI11"
;
//
// label10
//
this
.
label10
.
AutoSize
=
true
;
this
.
label10
.
Location
=
new
System
.
Drawing
.
Point
(
229
,
62
);
this
.
label10
.
Name
=
"label10"
;
this
.
label10
.
Size
=
new
System
.
Drawing
.
Size
(
29
,
12
);
this
.
label10
.
TabIndex
=
9
;
this
.
label10
.
Text
=
"DI10"
;
//
// label9
//
this
.
label9
.
AutoSize
=
true
;
this
.
label9
.
Location
=
new
System
.
Drawing
.
Point
(
229
,
30
);
this
.
label9
.
Name
=
"label9"
;
this
.
label9
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label9
.
TabIndex
=
8
;
this
.
label9
.
Text
=
"DI9"
;
//
// label8
//
this
.
label8
.
AutoSize
=
true
;
this
.
label8
.
Location
=
new
System
.
Drawing
.
Point
(
132
,
126
);
this
.
label8
.
Name
=
"label8"
;
this
.
label8
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label8
.
TabIndex
=
7
;
this
.
label8
.
Text
=
"DI8"
;
//
// label7
//
this
.
label7
.
AutoSize
=
true
;
this
.
label7
.
Location
=
new
System
.
Drawing
.
Point
(
132
,
94
);
this
.
label7
.
Name
=
"label7"
;
this
.
label7
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label7
.
TabIndex
=
6
;
this
.
label7
.
Text
=
"DI7"
;
//
// label6
//
this
.
label6
.
AutoSize
=
true
;
this
.
label6
.
Location
=
new
System
.
Drawing
.
Point
(
132
,
62
);
this
.
label6
.
Name
=
"label6"
;
this
.
label6
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label6
.
TabIndex
=
5
;
this
.
label6
.
Text
=
"DI6"
;
//
// label5
//
this
.
label5
.
AutoSize
=
true
;
this
.
label5
.
Location
=
new
System
.
Drawing
.
Point
(
132
,
30
);
this
.
label5
.
Name
=
"label5"
;
this
.
label5
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label5
.
TabIndex
=
4
;
this
.
label5
.
Text
=
"DI5"
;
//
// label4
//
this
.
label4
.
AutoSize
=
true
;
this
.
label4
.
Location
=
new
System
.
Drawing
.
Point
(
35
,
126
);
this
.
label4
.
Name
=
"label4"
;
this
.
label4
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label4
.
TabIndex
=
3
;
this
.
label4
.
Text
=
"DI4"
;
//
// label3
//
this
.
label3
.
AutoSize
=
true
;
this
.
label3
.
Location
=
new
System
.
Drawing
.
Point
(
35
,
94
);
this
.
label3
.
Name
=
"label3"
;
this
.
label3
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label3
.
TabIndex
=
2
;
this
.
label3
.
Text
=
"DI3"
;
//
// label2
//
this
.
label2
.
AutoSize
=
true
;
this
.
label2
.
Location
=
new
System
.
Drawing
.
Point
(
35
,
62
);
this
.
label2
.
Name
=
"label2"
;
this
.
label2
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label2
.
TabIndex
=
1
;
this
.
label2
.
Text
=
"DI2"
;
//
// label1
//
this
.
label1
.
AutoSize
=
true
;
this
.
label1
.
Location
=
new
System
.
Drawing
.
Point
(
35
,
30
);
this
.
label1
.
Name
=
"label1"
;
this
.
label1
.
Size
=
new
System
.
Drawing
.
Size
(
23
,
12
);
this
.
label1
.
TabIndex
=
0
;
this
.
label1
.
Text
=
"DI1"
;
//
// stopbtn
//
this
.
stopbtn
.
Location
=
new
System
.
Drawing
.
Point
(
350
,
23
);
this
.
stopbtn
.
Name
=
"stopbtn"
;
this
.
stopbtn
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
stopbtn
.
TabIndex
=
2
;
this
.
stopbtn
.
Text
=
"停止测试"
;
this
.
stopbtn
.
UseVisualStyleBackColor
=
true
;
this
.
stopbtn
.
Click
+=
new
System
.
EventHandler
(
this
.
stopbtn_Click
);
//
// label17
//
this
.
label17
.
AutoSize
=
true
;
this
.
label17
.
Location
=
new
System
.
Drawing
.
Point
(
23
,
28
);
this
.
label17
.
Name
=
"label17"
;
this
.
label17
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label17
.
TabIndex
=
3
;
this
.
label17
.
Text
=
"IP设置:"
;
//
// IPsetBox
//
this
.
IPsetBox
.
Location
=
new
System
.
Drawing
.
Point
(
76
,
25
);
this
.
IPsetBox
.
Name
=
"IPsetBox"
;
this
.
IPsetBox
.
Size
=
new
System
.
Drawing
.
Size
(
122
,
21
);
this
.
IPsetBox
.
TabIndex
=
4
;
//
// MDemo
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
6F
,
12F
);
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
Font
;
this
.
ClientSize
=
new
System
.
Drawing
.
Size
(
449
,
234
);
this
.
Controls
.
Add
(
this
.
IPsetBox
);
this
.
Controls
.
Add
(
this
.
label17
);
this
.
Controls
.
Add
(
this
.
stopbtn
);
this
.
Controls
.
Add
(
this
.
CoilBox
);
this
.
Controls
.
Add
(
this
.
TestBtn
);
this
.
Name
=
"MDemo"
;
this
.
Text
=
"Demo"
;
this
.
CoilBox
.
ResumeLayout
(
false
);
this
.
CoilBox
.
PerformLayout
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox16
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox15
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox14
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox13
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox12
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox11
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox10
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox9
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox8
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox7
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox6
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox5
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox4
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox3
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox2
)).
EndInit
();
((
System
.
ComponentModel
.
ISupportInitialize
)(
this
.
pictureBox1
)).
EndInit
();
this
.
ResumeLayout
(
false
);
this
.
PerformLayout
();
}
#
endregion
private
System
.
Windows
.
Forms
.
Button
TestBtn
;
private
System
.
Windows
.
Forms
.
GroupBox
CoilBox
;
private
System
.
Windows
.
Forms
.
Label
label16
;
private
System
.
Windows
.
Forms
.
Label
label15
;
private
System
.
Windows
.
Forms
.
Label
label14
;
private
System
.
Windows
.
Forms
.
Label
label13
;
private
System
.
Windows
.
Forms
.
Label
label12
;
private
System
.
Windows
.
Forms
.
Label
label11
;
private
System
.
Windows
.
Forms
.
Label
label10
;
private
System
.
Windows
.
Forms
.
Label
label9
;
private
System
.
Windows
.
Forms
.
Label
label8
;
private
System
.
Windows
.
Forms
.
Label
label7
;
private
System
.
Windows
.
Forms
.
Label
label6
;
private
System
.
Windows
.
Forms
.
Label
label5
;
private
System
.
Windows
.
Forms
.
Label
label4
;
private
System
.
Windows
.
Forms
.
Label
label3
;
private
System
.
Windows
.
Forms
.
Label
label2
;
private
System
.
Windows
.
Forms
.
Label
label1
;
private
System
.
Windows
.
Forms
.
Button
stopbtn
;
private
System
.
Windows
.
Forms
.
Label
label17
;
private
System
.
Windows
.
Forms
.
TextBox
IPsetBox
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox1
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox2
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox3
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox16
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox15
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox14
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox13
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox12
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox11
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox10
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox9
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox8
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox7
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox6
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox5
;
private
System
.
Windows
.
Forms
.
PictureBox
pictureBox4
;
}
}
ModbusDemo/ModbusDemo/MDemo.cs
deleted
100644 → 0
View file @
051dba9a
using
System
;
using
System.Collections.Generic
;
using
System.ComponentModel
;
using
System.Data
;
using
System.Drawing
;
using
System.Linq
;
using
System.Text
;
using
System.Windows.Forms
;
using
ModbusDemo.Common
;
using
System.Threading
;
using
System.Text.RegularExpressions
;
namespace
ModbusDemo
{
public
partial
class
MDemo
:
Form
{
WTModbus
ReadTest
;
const
ushort
address
=
17
;
const
ushort
num
=
6
;
const
ushort
DevicePort
=
502
;
string
DeviceIP
;
ManualResetEvent
showmre
=
new
ManualResetEvent
(
false
);
public
delegate
void
invokeDelegate
();
public
MDemo
()
{
InitializeComponent
();
ReadTest
=
new
WTModbus
();
}
Thread
t_ReadCoil
;
private
void
TestBtn_Click
(
object
sender
,
EventArgs
e
)
{
this
.
TestBtn
.
Enabled
=
false
;
if
(
this
.
IPsetBox
.
Text
!=
""
)
{
DeviceIP
=
this
.
IPsetBox
.
Text
;
}
else
{
MessageBox
.
Show
(
"请检查IP输入是否正确"
);
this
.
TestBtn
.
Enabled
=
true
;
return
;
}
if
(
showmre
!=
null
)
{
showmre
.
Reset
();
}
t_ReadCoil
=
new
Thread
(
ReadCoilProc
);
t_ReadCoil
.
IsBackground
=
true
;
t_ReadCoil
.
Start
();
}
private
void
ReadCoilProc
(
object
obj
)
{
short
allval
;
byte
[]
temp
=
new
byte
[
6
];
int
ret
;
while
(!
showmre
.
WaitOne
(
500
))
{
//读线圈
ret
=
ReadTest
.
ReadCoilStatus
(
address
,
num
,
DeviceIP
,
DevicePort
,
ref
temp
);
allval
=
BitConverter
.
ToInt16
(
temp
,
0
);
invokeDelegate
update
=
()
=>
{
foreach
(
Control
control
in
this
.
CoilBox
.
Controls
)
{
if
(
control
is
PictureBox
)
{
if
((
allval
>>
Convert
.
ToUInt16
((
control
as
PictureBox
).
Tag
)
&
0x1
)
==
1
)
{
(
control
as
PictureBox
).
BackColor
=
Color
.
Green
;
}
else
{
(
control
as
PictureBox
).
BackColor
=
Color
.
Black
;
}
}
}
};
Invoke
(
update
);
}
}
private
void
stopbtn_Click
(
object
sender
,
EventArgs
e
)
{
this
.
TestBtn
.
Enabled
=
true
;
if
(
showmre
!=
null
)
showmre
.
Set
();
foreach
(
Control
control
in
this
.
CoilBox
.
Controls
)
{
if
(
control
is
PictureBox
)
{
(
control
as
PictureBox
).
BackColor
=
Color
.
Black
;
}
}
}
}
}
ModbusDemo/ModbusDemo/MDemo.resx
deleted
100644 → 0
View file @
051dba9a
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema
id=
"root"
xmlns=
""
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
xmlns:msdata=
"urn:schemas-microsoft-com:xml-msdata"
>
<xsd:import
namespace=
"http://www.w3.org/XML/1998/namespace"
/>
<xsd:element
name=
"root"
msdata:IsDataSet=
"true"
>
<xsd:complexType>
<xsd:choice
maxOccurs=
"unbounded"
>
<xsd:element
name=
"metadata"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
use=
"required"
type=
"xsd:string"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"assembly"
>
<xsd:complexType>
<xsd:attribute
name=
"alias"
type=
"xsd:string"
/>
<xsd:attribute
name=
"name"
type=
"xsd:string"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"data"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
<xsd:element
name=
"comment"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"2"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
msdata:Ordinal=
"1"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
msdata:Ordinal=
"3"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
msdata:Ordinal=
"4"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"resheader"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader
name=
"resmimetype"
>
<value>
text/microsoft-resx
</value>
</resheader>
<resheader
name=
"version"
>
<value>
2.0
</value>
</resheader>
<resheader
name=
"reader"
>
<value>
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader
name=
"writer"
>
<value>
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>
\ No newline at end of file
ModbusDemo/ModbusDemo/ModbusDemo.csproj
deleted
100644 → 0
View file @
051dba9a
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"12.0"
DefaultTargets=
"Build"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<Import
Project=
"$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props"
Condition=
"Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')"
/>
<PropertyGroup>
<Configuration
Condition=
" '$(Configuration)' == '' "
>
Debug
</Configuration>
<Platform
Condition=
" '$(Platform)' == '' "
>
AnyCPU
</Platform>
<ProjectGuid>
{7D83EE1F-F3D9-4592-A0ED-A0D92DCF91AB}
</ProjectGuid>
<OutputType>
WinExe
</OutputType>
<AppDesignerFolder>
Properties
</AppDesignerFolder>
<RootNamespace>
ModbusDemo
</RootNamespace>
<AssemblyName>
ModbusDemo
</AssemblyName>
<TargetFrameworkVersion>
v4.0
</TargetFrameworkVersion>
<FileAlignment>
512
</FileAlignment>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
>
<PlatformTarget>
x86
</PlatformTarget>
<DebugSymbols>
true
</DebugSymbols>
<DebugType>
full
</DebugType>
<Optimize>
false
</Optimize>
<OutputPath>
bin\Debug\
</OutputPath>
<DefineConstants>
DEBUG;TRACE
</DefineConstants>
<ErrorReport>
prompt
</ErrorReport>
<WarningLevel>
4
</WarningLevel>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
>
<PlatformTarget>
AnyCPU
</PlatformTarget>
<DebugType>
pdbonly
</DebugType>
<Optimize>
true
</Optimize>
<OutputPath>
bin\Release\
</OutputPath>
<DefineConstants>
TRACE
</DefineConstants>
<ErrorReport>
prompt
</ErrorReport>
<WarningLevel>
4
</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference
Include=
"System"
/>
<Reference
Include=
"System.Core"
/>
<Reference
Include=
"System.Xml.Linq"
/>
<Reference
Include=
"System.Data.DataSetExtensions"
/>
<Reference
Include=
"Microsoft.CSharp"
/>
<Reference
Include=
"System.Data"
/>
<Reference
Include=
"System.Deployment"
/>
<Reference
Include=
"System.Drawing"
/>
<Reference
Include=
"System.Windows.Forms"
/>
<Reference
Include=
"System.Xml"
/>
</ItemGroup>
<ItemGroup>
<Compile
Include=
"Common\ModSearch.cs"
/>
<Compile
Include=
"Common\WTModbus.cs"
/>
<Compile
Include=
"Demo_818X.cs"
>
<SubType>
Form
</SubType>
</Compile>
<Compile
Include=
"Demo_818X.Designer.cs"
>
<DependentUpon>
Demo_818X.cs
</DependentUpon>
</Compile>
<Compile
Include=
"MDemo.cs"
>
<SubType>
Form
</SubType>
</Compile>
<Compile
Include=
"MDemo.Designer.cs"
>
<DependentUpon>
MDemo.cs
</DependentUpon>
</Compile>
<Compile
Include=
"Program.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
<Compile
Include=
"ProTest.cs"
>
<SubType>
Form
</SubType>
</Compile>
<Compile
Include=
"ProTest.Designer.cs"
>
<DependentUpon>
ProTest.cs
</DependentUpon>
</Compile>
<EmbeddedResource
Include=
"Demo_818X.resx"
>
<DependentUpon>
Demo_818X.cs
</DependentUpon>
</EmbeddedResource>
<EmbeddedResource
Include=
"MDemo.resx"
>
<DependentUpon>
MDemo.cs
</DependentUpon>
</EmbeddedResource>
<EmbeddedResource
Include=
"Properties\Resources.resx"
>
<Generator>
ResXFileCodeGenerator
</Generator>
<LastGenOutput>
Resources.Designer.cs
</LastGenOutput>
<SubType>
Designer
</SubType>
</EmbeddedResource>
<Compile
Include=
"Properties\Resources.Designer.cs"
>
<AutoGen>
True
</AutoGen>
<DependentUpon>
Resources.resx
</DependentUpon>
<DesignTime>
True
</DesignTime>
</Compile>
<EmbeddedResource
Include=
"ProTest.resx"
>
<DependentUpon>
ProTest.cs
</DependentUpon>
</EmbeddedResource>
<None
Include=
"Properties\Settings.settings"
>
<Generator>
SettingsSingleFileGenerator
</Generator>
<LastGenOutput>
Settings.Designer.cs
</LastGenOutput>
</None>
<Compile
Include=
"Properties\Settings.Designer.cs"
>
<AutoGen>
True
</AutoGen>
<DependentUpon>
Settings.settings
</DependentUpon>
<DesignTimeSharedInput>
True
</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder
Include=
"Lib\"
/>
</ItemGroup>
<ItemGroup>
<None
Include=
"Resources\057.png"
/>
</ItemGroup>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
\ No newline at end of file
ModbusDemo/ModbusDemo/ProTest.Designer.cs
deleted
100644 → 0
View file @
051dba9a
namespace
ModbusDemo
{
partial
class
ProTest
{
/// <summary>
/// Required designer variable.
/// </summary>
private
System
.
ComponentModel
.
IContainer
components
=
null
;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected
override
void
Dispose
(
bool
disposing
)
{
if
(
disposing
&&
(
components
!=
null
))
{
components
.
Dispose
();
}
base
.
Dispose
(
disposing
);
}
#
region
Windows
Form
Designer
generated
code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private
void
InitializeComponent
()
{
this
.
groupBox1
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
label9
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label4
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label3
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label2
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label1
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
hwstart
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
groupBox2
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
label8
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label7
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label6
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label5
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
sfstart
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
groupBox3
=
new
System
.
Windows
.
Forms
.
GroupBox
();
this
.
label10
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label11
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label12
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label13
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label14
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label15
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label16
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label17
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label18
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label19
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label20
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label21
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label22
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label23
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label24
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label25
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label26
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label27
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label28
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
label29
=
new
System
.
Windows
.
Forms
.
Label
();
this
.
onethrun
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
tenthrun
=
new
System
.
Windows
.
Forms
.
Button
();
this
.
groupBox1
.
SuspendLayout
();
this
.
groupBox2
.
SuspendLayout
();
this
.
groupBox3
.
SuspendLayout
();
this
.
SuspendLayout
();
//
// groupBox1
//
this
.
groupBox1
.
Controls
.
Add
(
this
.
label9
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label4
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label3
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label2
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
label1
);
this
.
groupBox1
.
Controls
.
Add
(
this
.
hwstart
);
this
.
groupBox1
.
Location
=
new
System
.
Drawing
.
Point
(
15
,
9
);
this
.
groupBox1
.
Name
=
"groupBox1"
;
this
.
groupBox1
.
Size
=
new
System
.
Drawing
.
Size
(
434
,
65
);
this
.
groupBox1
.
TabIndex
=
0
;
this
.
groupBox1
.
TabStop
=
false
;
this
.
groupBox1
.
Text
=
"设备读取性能"
;
//
// label9
//
this
.
label9
.
AutoSize
=
true
;
this
.
label9
.
Location
=
new
System
.
Drawing
.
Point
(
247
,
32
);
this
.
label9
.
Name
=
"label9"
;
this
.
label9
.
Size
=
new
System
.
Drawing
.
Size
(
41
,
12
);
this
.
label9
.
TabIndex
=
5
;
this
.
label9
.
Text
=
"label9"
;
//
// label4
//
this
.
label4
.
AutoSize
=
true
;
this
.
label4
.
Location
=
new
System
.
Drawing
.
Point
(
381
,
32
);
this
.
label4
.
Name
=
"label4"
;
this
.
label4
.
Size
=
new
System
.
Drawing
.
Size
(
41
,
12
);
this
.
label4
.
TabIndex
=
4
;
this
.
label4
.
Text
=
"label4"
;
//
// label3
//
this
.
label3
.
AutoSize
=
true
;
this
.
label3
.
Location
=
new
System
.
Drawing
.
Point
(
324
,
32
);
this
.
label3
.
Name
=
"label3"
;
this
.
label3
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
label3
.
TabIndex
=
3
;
this
.
label3
.
Text
=
"花费时间:"
;
//
// label2
//
this
.
label2
.
AutoSize
=
true
;
this
.
label2
.
Location
=
new
System
.
Drawing
.
Point
(
180
,
32
);
this
.
label2
.
Name
=
"label2"
;
this
.
label2
.
Size
=
new
System
.
Drawing
.
Size
(
41
,
12
);
this
.
label2
.
TabIndex
=
2
;
this
.
label2
.
Text
=
"label2"
;
//
// label1
//
this
.
label1
.
AutoSize
=
true
;
this
.
label1
.
Location
=
new
System
.
Drawing
.
Point
(
109
,
32
);
this
.
label1
.
Name
=
"label1"
;
this
.
label1
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
label1
.
TabIndex
=
1
;
this
.
label1
.
Text
=
"读取次数:"
;
//
// hwstart
//
this
.
hwstart
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
27
);
this
.
hwstart
.
Name
=
"hwstart"
;
this
.
hwstart
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
hwstart
.
TabIndex
=
0
;
this
.
hwstart
.
Text
=
"开始"
;
this
.
hwstart
.
UseVisualStyleBackColor
=
true
;
this
.
hwstart
.
Click
+=
new
System
.
EventHandler
(
this
.
hwstart_Click
);
//
// groupBox2
//
this
.
groupBox2
.
Controls
.
Add
(
this
.
label8
);
this
.
groupBox2
.
Controls
.
Add
(
this
.
label7
);
this
.
groupBox2
.
Controls
.
Add
(
this
.
label6
);
this
.
groupBox2
.
Controls
.
Add
(
this
.
label5
);
this
.
groupBox2
.
Controls
.
Add
(
this
.
sfstart
);
this
.
groupBox2
.
Location
=
new
System
.
Drawing
.
Point
(
15
,
89
);
this
.
groupBox2
.
Name
=
"groupBox2"
;
this
.
groupBox2
.
Size
=
new
System
.
Drawing
.
Size
(
327
,
65
);
this
.
groupBox2
.
TabIndex
=
1
;
this
.
groupBox2
.
TabStop
=
false
;
this
.
groupBox2
.
Text
=
"ModSim读取性能"
;
//
// label8
//
this
.
label8
.
AutoSize
=
true
;
this
.
label8
.
Location
=
new
System
.
Drawing
.
Point
(
280
,
31
);
this
.
label8
.
Name
=
"label8"
;
this
.
label8
.
Size
=
new
System
.
Drawing
.
Size
(
41
,
12
);
this
.
label8
.
TabIndex
=
4
;
this
.
label8
.
Text
=
"label8"
;
//
// label7
//
this
.
label7
.
AutoSize
=
true
;
this
.
label7
.
Location
=
new
System
.
Drawing
.
Point
(
223
,
31
);
this
.
label7
.
Name
=
"label7"
;
this
.
label7
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
label7
.
TabIndex
=
3
;
this
.
label7
.
Text
=
"花费时间:"
;
//
// label6
//
this
.
label6
.
AutoSize
=
true
;
this
.
label6
.
Location
=
new
System
.
Drawing
.
Point
(
166
,
31
);
this
.
label6
.
Name
=
"label6"
;
this
.
label6
.
Size
=
new
System
.
Drawing
.
Size
(
41
,
12
);
this
.
label6
.
TabIndex
=
2
;
this
.
label6
.
Text
=
"label6"
;
//
// label5
//
this
.
label5
.
AutoSize
=
true
;
this
.
label5
.
Location
=
new
System
.
Drawing
.
Point
(
109
,
31
);
this
.
label5
.
Name
=
"label5"
;
this
.
label5
.
Size
=
new
System
.
Drawing
.
Size
(
65
,
12
);
this
.
label5
.
TabIndex
=
1
;
this
.
label5
.
Text
=
"读取次数:"
;
//
// sfstart
//
this
.
sfstart
.
Location
=
new
System
.
Drawing
.
Point
(
26
,
26
);
this
.
sfstart
.
Name
=
"sfstart"
;
this
.
sfstart
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
sfstart
.
TabIndex
=
0
;
this
.
sfstart
.
Text
=
"开始"
;
this
.
sfstart
.
UseVisualStyleBackColor
=
true
;
this
.
sfstart
.
Click
+=
new
System
.
EventHandler
(
this
.
sfstart_Click
);
//
// groupBox3
//
this
.
groupBox3
.
Controls
.
Add
(
this
.
tenthrun
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
onethrun
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label29
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label28
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label27
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label26
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label25
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label24
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label23
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label22
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label21
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label20
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label19
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label18
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label17
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label16
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label15
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label14
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label13
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label12
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label11
);
this
.
groupBox3
.
Controls
.
Add
(
this
.
label10
);
this
.
groupBox3
.
Location
=
new
System
.
Drawing
.
Point
(
15
,
179
);
this
.
groupBox3
.
Name
=
"groupBox3"
;
this
.
groupBox3
.
Size
=
new
System
.
Drawing
.
Size
(
422
,
317
);
this
.
groupBox3
.
TabIndex
=
2
;
this
.
groupBox3
.
TabStop
=
false
;
this
.
groupBox3
.
Text
=
"groupBox3"
;
//
// label10
//
this
.
label10
.
AutoSize
=
true
;
this
.
label10
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
29
);
this
.
label10
.
Name
=
"label10"
;
this
.
label10
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label10
.
TabIndex
=
0
;
this
.
label10
.
Text
=
"label10"
;
//
// label11
//
this
.
label11
.
AutoSize
=
true
;
this
.
label11
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
57
);
this
.
label11
.
Name
=
"label11"
;
this
.
label11
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label11
.
TabIndex
=
0
;
this
.
label11
.
Text
=
"label10"
;
//
// label12
//
this
.
label12
.
AutoSize
=
true
;
this
.
label12
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
85
);
this
.
label12
.
Name
=
"label12"
;
this
.
label12
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label12
.
TabIndex
=
0
;
this
.
label12
.
Text
=
"label10"
;
//
// label13
//
this
.
label13
.
AutoSize
=
true
;
this
.
label13
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
113
);
this
.
label13
.
Name
=
"label13"
;
this
.
label13
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label13
.
TabIndex
=
0
;
this
.
label13
.
Text
=
"label10"
;
//
// label14
//
this
.
label14
.
AutoSize
=
true
;
this
.
label14
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
141
);
this
.
label14
.
Name
=
"label14"
;
this
.
label14
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label14
.
TabIndex
=
0
;
this
.
label14
.
Text
=
"label10"
;
//
// label15
//
this
.
label15
.
AutoSize
=
true
;
this
.
label15
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
169
);
this
.
label15
.
Name
=
"label15"
;
this
.
label15
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label15
.
TabIndex
=
0
;
this
.
label15
.
Text
=
"label10"
;
//
// label16
//
this
.
label16
.
AutoSize
=
true
;
this
.
label16
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
197
);
this
.
label16
.
Name
=
"label16"
;
this
.
label16
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label16
.
TabIndex
=
0
;
this
.
label16
.
Text
=
"label10"
;
//
// label17
//
this
.
label17
.
AutoSize
=
true
;
this
.
label17
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
225
);
this
.
label17
.
Name
=
"label17"
;
this
.
label17
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label17
.
TabIndex
=
0
;
this
.
label17
.
Text
=
"label10"
;
//
// label18
//
this
.
label18
.
AutoSize
=
true
;
this
.
label18
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
253
);
this
.
label18
.
Name
=
"label18"
;
this
.
label18
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label18
.
TabIndex
=
0
;
this
.
label18
.
Text
=
"label10"
;
//
// label19
//
this
.
label19
.
AutoSize
=
true
;
this
.
label19
.
Location
=
new
System
.
Drawing
.
Point
(
175
,
281
);
this
.
label19
.
Name
=
"label19"
;
this
.
label19
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label19
.
TabIndex
=
0
;
this
.
label19
.
Text
=
"label10"
;
//
// label20
//
this
.
label20
.
AutoSize
=
true
;
this
.
label20
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
29
);
this
.
label20
.
Name
=
"label20"
;
this
.
label20
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label20
.
TabIndex
=
1
;
this
.
label20
.
Text
=
"label20"
;
//
// label21
//
this
.
label21
.
AutoSize
=
true
;
this
.
label21
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
57
);
this
.
label21
.
Name
=
"label21"
;
this
.
label21
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label21
.
TabIndex
=
1
;
this
.
label21
.
Text
=
"label20"
;
//
// label22
//
this
.
label22
.
AutoSize
=
true
;
this
.
label22
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
85
);
this
.
label22
.
Name
=
"label22"
;
this
.
label22
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label22
.
TabIndex
=
1
;
this
.
label22
.
Text
=
"label20"
;
//
// label23
//
this
.
label23
.
AutoSize
=
true
;
this
.
label23
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
113
);
this
.
label23
.
Name
=
"label23"
;
this
.
label23
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label23
.
TabIndex
=
1
;
this
.
label23
.
Text
=
"label20"
;
//
// label24
//
this
.
label24
.
AutoSize
=
true
;
this
.
label24
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
141
);
this
.
label24
.
Name
=
"label24"
;
this
.
label24
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label24
.
TabIndex
=
1
;
this
.
label24
.
Text
=
"label20"
;
//
// label25
//
this
.
label25
.
AutoSize
=
true
;
this
.
label25
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
169
);
this
.
label25
.
Name
=
"label25"
;
this
.
label25
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label25
.
TabIndex
=
1
;
this
.
label25
.
Text
=
"label20"
;
//
// label26
//
this
.
label26
.
AutoSize
=
true
;
this
.
label26
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
197
);
this
.
label26
.
Name
=
"label26"
;
this
.
label26
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label26
.
TabIndex
=
1
;
this
.
label26
.
Text
=
"label20"
;
//
// label27
//
this
.
label27
.
AutoSize
=
true
;
this
.
label27
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
225
);
this
.
label27
.
Name
=
"label27"
;
this
.
label27
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label27
.
TabIndex
=
1
;
this
.
label27
.
Text
=
"label20"
;
//
// label28
//
this
.
label28
.
AutoSize
=
true
;
this
.
label28
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
253
);
this
.
label28
.
Name
=
"label28"
;
this
.
label28
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label28
.
TabIndex
=
1
;
this
.
label28
.
Text
=
"label20"
;
//
// label29
//
this
.
label29
.
AutoSize
=
true
;
this
.
label29
.
Location
=
new
System
.
Drawing
.
Point
(
263
,
281
);
this
.
label29
.
Name
=
"label29"
;
this
.
label29
.
Size
=
new
System
.
Drawing
.
Size
(
47
,
12
);
this
.
label29
.
TabIndex
=
1
;
this
.
label29
.
Text
=
"label20"
;
//
// onethrun
//
this
.
onethrun
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
29
);
this
.
onethrun
.
Name
=
"onethrun"
;
this
.
onethrun
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
onethrun
.
TabIndex
=
2
;
this
.
onethrun
.
Text
=
"单一线程测试"
;
this
.
onethrun
.
UseVisualStyleBackColor
=
true
;
this
.
onethrun
.
Click
+=
new
System
.
EventHandler
(
this
.
onethrun_Click
);
//
// tenthrun
//
this
.
tenthrun
.
Location
=
new
System
.
Drawing
.
Point
(
19
,
85
);
this
.
tenthrun
.
Name
=
"tenthrun"
;
this
.
tenthrun
.
Size
=
new
System
.
Drawing
.
Size
(
75
,
23
);
this
.
tenthrun
.
TabIndex
=
3
;
this
.
tenthrun
.
Text
=
"10线程测试"
;
this
.
tenthrun
.
UseVisualStyleBackColor
=
true
;
this
.
tenthrun
.
Click
+=
new
System
.
EventHandler
(
this
.
tenthrun_Click
);
//
// ProTest
//
this
.
AutoScaleDimensions
=
new
System
.
Drawing
.
SizeF
(
6F
,
12F
);
this
.
AutoScaleMode
=
System
.
Windows
.
Forms
.
AutoScaleMode
.
Font
;
this
.
ClientSize
=
new
System
.
Drawing
.
Size
(
461
,
548
);
this
.
Controls
.
Add
(
this
.
groupBox3
);
this
.
Controls
.
Add
(
this
.
groupBox2
);
this
.
Controls
.
Add
(
this
.
groupBox1
);
this
.
Name
=
"ProTest"
;
this
.
Text
=
"性能测试"
;
this
.
groupBox1
.
ResumeLayout
(
false
);
this
.
groupBox1
.
PerformLayout
();
this
.
groupBox2
.
ResumeLayout
(
false
);
this
.
groupBox2
.
PerformLayout
();
this
.
groupBox3
.
ResumeLayout
(
false
);
this
.
groupBox3
.
PerformLayout
();
this
.
ResumeLayout
(
false
);
}
#
endregion
private
System
.
Windows
.
Forms
.
GroupBox
groupBox1
;
private
System
.
Windows
.
Forms
.
GroupBox
groupBox2
;
private
System
.
Windows
.
Forms
.
Button
hwstart
;
private
System
.
Windows
.
Forms
.
Button
sfstart
;
private
System
.
Windows
.
Forms
.
Label
label4
;
private
System
.
Windows
.
Forms
.
Label
label3
;
private
System
.
Windows
.
Forms
.
Label
label2
;
private
System
.
Windows
.
Forms
.
Label
label1
;
private
System
.
Windows
.
Forms
.
Label
label8
;
private
System
.
Windows
.
Forms
.
Label
label7
;
private
System
.
Windows
.
Forms
.
Label
label6
;
private
System
.
Windows
.
Forms
.
Label
label5
;
private
System
.
Windows
.
Forms
.
Label
label9
;
private
System
.
Windows
.
Forms
.
GroupBox
groupBox3
;
private
System
.
Windows
.
Forms
.
Label
label29
;
private
System
.
Windows
.
Forms
.
Label
label28
;
private
System
.
Windows
.
Forms
.
Label
label27
;
private
System
.
Windows
.
Forms
.
Label
label26
;
private
System
.
Windows
.
Forms
.
Label
label25
;
private
System
.
Windows
.
Forms
.
Label
label24
;
private
System
.
Windows
.
Forms
.
Label
label23
;
private
System
.
Windows
.
Forms
.
Label
label22
;
private
System
.
Windows
.
Forms
.
Label
label21
;
private
System
.
Windows
.
Forms
.
Label
label20
;
private
System
.
Windows
.
Forms
.
Label
label19
;
private
System
.
Windows
.
Forms
.
Label
label18
;
private
System
.
Windows
.
Forms
.
Label
label17
;
private
System
.
Windows
.
Forms
.
Label
label16
;
private
System
.
Windows
.
Forms
.
Label
label15
;
private
System
.
Windows
.
Forms
.
Label
label14
;
private
System
.
Windows
.
Forms
.
Label
label13
;
private
System
.
Windows
.
Forms
.
Label
label12
;
private
System
.
Windows
.
Forms
.
Label
label11
;
private
System
.
Windows
.
Forms
.
Label
label10
;
private
System
.
Windows
.
Forms
.
Button
tenthrun
;
private
System
.
Windows
.
Forms
.
Button
onethrun
;
}
}
\ No newline at end of file
ModbusDemo/ModbusDemo/ProTest.cs
deleted
100644 → 0
View file @
051dba9a
using
System
;
using
System.Collections.Generic
;
using
System.ComponentModel
;
using
System.Data
;
using
System.Drawing
;
using
System.Linq
;
using
System.Text
;
using
System.Windows.Forms
;
using
ModbusDemo.Common
;
using
System.Threading
;
using
System.Text.RegularExpressions
;
namespace
ModbusDemo
{
public
partial
class
ProTest
:
Form
{
WTModbus
ReadTest
;
// WTModbus TenReadTest; // = new WTModbus[10];
const
ushort
address
=
1
;
const
ushort
num
=
16
;
const
ushort
DevicePort
=
502
;
string
DeviceIP
=
"192.168.1.57"
;
ManualResetEvent
showmre
=
new
ManualResetEvent
(
false
);
public
delegate
void
invokeDelegate
();
//Ten module
string
[]
TenDeviceIP
=
new
string
[
10
];
public
ProTest
()
{
InitializeComponent
();
setTenIP
();
}
private
void
setTenIP
()
{
TenDeviceIP
[
0
]
=
"192.168.102"
;
TenDeviceIP
[
1
]
=
"192.168.113"
;
TenDeviceIP
[
2
]
=
"192.168.112"
;
TenDeviceIP
[
3
]
=
"192.168.109"
;
TenDeviceIP
[
4
]
=
"192.168.110"
;
TenDeviceIP
[
5
]
=
"192.168.103"
;
TenDeviceIP
[
6
]
=
"192.168.111"
;
TenDeviceIP
[
7
]
=
"192.168.107"
;
TenDeviceIP
[
8
]
=
"192.168.104"
;
TenDeviceIP
[
9
]
=
"192.168.106"
;
}
Boolean
hwstartuse
=
false
;
Thread
t_ReadCoil
;
bool
closethread
=
false
;
private
void
hwstart_Click
(
object
sender
,
EventArgs
e
)
{
if
(!
hwstartuse
)
{
hwstartuse
=
!
hwstartuse
;
this
.
hwstart
.
Text
=
"停止"
;
t_ReadCoil
=
new
Thread
(
ReadCoilProc
);
t_ReadCoil
.
IsBackground
=
true
;
t_ReadCoil
.
Start
();
closethread
=
false
;
}
else
{
hwstartuse
=
!
hwstartuse
;
this
.
hwstart
.
Text
=
"开始"
;
closethread
=
true
;
}
}
private
void
ReadCoilProc
(
object
obj
)
{
short
allval
;
int
readcount
=
0
;
int
failcount
=
0
;
byte
[]
temp
=
new
byte
[
2
];
int
ret
;
ReadTest
=
new
WTModbus
();
int
starttime
=
System
.
Environment
.
TickCount
;
while
(
true
)
{
//读线圈
ret
=
ReadTest
.
ReadCoilStatus
(
address
,
num
,
DeviceIP
,
DevicePort
,
ref
temp
);
// allval = BitConverter.ToInt16(temp, 0);
if
(
ret
==
0
)
{
readcount
++;
}
else
{
failcount
++;
}
invokeDelegate
update
=
()
=>
{
this
.
label2
.
Text
=
readcount
.
ToString
()
+
"次"
;
this
.
label9
.
Text
=
failcount
.
ToString
()
+
"次"
;
this
.
label4
.
Text
=
(
System
.
Environment
.
TickCount
-
starttime
).
ToString
()
+
"ms"
;
};
Invoke
(
update
);
if
(
closethread
)
{
break
;
}
}
}
bool
[]
tenclosethread
=
new
bool
[
10
];
WTModbus
[]
TReadTest
=
new
WTModbus
[
10
];
private
void
eReadCoilProc
(
object
obj
)
{
//WTModbus TReadTest;
int
readcount
=
0
;
int
failcount
=
0
;
byte
[]
temp
=
new
byte
[
2
];
int
ret
;
int
thnum
=
0
;
thnum
=
int
.
Parse
(
obj
.
ToString
());
this
.
TReadTest
[
thnum
]
=
new
WTModbus
();
int
starttime
=
System
.
Environment
.
TickCount
;
while
(
true
)
{
//读线圈
ret
=
TReadTest
[
thnum
].
ReadCoilStatus
(
address
,
num
,
TenDeviceIP
[
thnum
],
DevicePort
,
ref
temp
);
if
(
ret
==
0
)
{
readcount
++;
}
else
{
failcount
++;
}
invokeDelegate
update
=
()
=>
{
foreach
(
Control
c
in
groupBox3
.
Controls
)
{
if
(
c
is
Label
)
{
if
(
c
.
Name
==
(
"label1"
+
thnum
.
ToString
())
)
c
.
Text
=
readcount
.
ToString
()
+
"次"
;
if
(
c
.
Name
==
(
"label2"
+
thnum
.
ToString
()))
c
.
Text
=
(
System
.
Environment
.
TickCount
-
starttime
).
ToString
()
+
"ms"
;
}
}
};
Invoke
(
update
);
if
(
tenclosethread
[
thnum
])
{
break
;
}
}
}
private
void
sfstart_Click
(
object
sender
,
EventArgs
e
)
{
}
Thread
[]
ten_ReadCoil
=
new
Thread
[
10
];
private
void
tenthrun_Click
(
object
sender
,
EventArgs
e
)
{
int
i
=
0
;
if
(!
hwstartuse
)
{
hwstartuse
=
!
hwstartuse
;
this
.
tenthrun
.
Text
=
"停止"
;
for
(
i
=
0
;
i
<
10
;
i
++
)
{
tenclosethread
[
i
]
=
false
;
ten_ReadCoil
[
i
]
=
new
Thread
(
new
ParameterizedThreadStart
(
eReadCoilProc
));
ten_ReadCoil
[
i
].
IsBackground
=
true
;
ten_ReadCoil
[
i
].
Start
(
i
.
ToString
());
}
}
else
{
hwstartuse
=
!
hwstartuse
;
for
(
i
=
0
;
i
<
10
;
i
++)
{
tenclosethread
[
i
]
=
true
;
}
this
.
tenthrun
.
Text
=
"10线程测试"
;
}
}
private
void
onethrun_Click
(
object
sender
,
EventArgs
e
)
{
if
(!
hwstartuse
)
{
hwstartuse
=
!
hwstartuse
;
this
.
onethrun
.
Text
=
"停止"
;
t_ReadCoil
=
new
Thread
(
oneReadCoilProc
);
t_ReadCoil
.
IsBackground
=
true
;
t_ReadCoil
.
Start
();
closethread
=
false
;
}
else
{
hwstartuse
=
!
hwstartuse
;
this
.
onethrun
.
Text
=
"单一线程测试"
;
closethread
=
true
;
}
}
WTModbus
[]
TenReadTest
=
new
WTModbus
[
10
];
private
void
oneReadCoilProc
(
object
obj
)
{
int
[]
readcount
=
new
int
[
10
];
int
[]
failcount
=
new
int
[
10
];
byte
[]
temp
=
new
byte
[
2
];
int
[]
ret
=
new
int
[
10
];
int
i
=
0
;
int
[]
tenstatrttime
=
new
int
[
10
];
for
(
i
=
0
;
i
<
10
;
i
++)
{
TenReadTest
[
i
]
=
new
WTModbus
();
}
for
(
i
=
0
;
i
<
10
;
i
++)
{
tenstatrttime
[
i
]
=
System
.
Environment
.
TickCount
;
}
while
(
true
)
{
//读线圈
for
(
i
=
0
;
i
<
10
;
i
++
)
{
ret
[
i
]
=
TenReadTest
[
i
].
ReadCoilStatus
(
address
,
num
,
TenDeviceIP
[
i
],
DevicePort
,
ref
temp
);
if
(
ret
[
i
]
==
0
)
{
readcount
[
i
]++;
}
else
{
failcount
[
i
]++;
}
invokeDelegate
update
=
()
=>
{
foreach
(
Control
c
in
groupBox3
.
Controls
)
{
if
(
c
is
Label
)
{
if
(
c
.
Name
==
(
"label1"
+
i
.
ToString
()))
c
.
Text
=
readcount
[
i
].
ToString
()
+
"次"
;
if
(
c
.
Name
==
(
"label2"
+
i
.
ToString
()))
c
.
Text
=
(
System
.
Environment
.
TickCount
-
tenstatrttime
[
i
]).
ToString
()
+
"ms"
;
}
}
};
Invoke
(
update
);
}
if
(
closethread
)
{
break
;
}
}
}
}
}
ModbusDemo/ModbusDemo/ProTest.resx
deleted
100644 → 0
View file @
051dba9a
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema
id=
"root"
xmlns=
""
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
xmlns:msdata=
"urn:schemas-microsoft-com:xml-msdata"
>
<xsd:import
namespace=
"http://www.w3.org/XML/1998/namespace"
/>
<xsd:element
name=
"root"
msdata:IsDataSet=
"true"
>
<xsd:complexType>
<xsd:choice
maxOccurs=
"unbounded"
>
<xsd:element
name=
"metadata"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
use=
"required"
type=
"xsd:string"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"assembly"
>
<xsd:complexType>
<xsd:attribute
name=
"alias"
type=
"xsd:string"
/>
<xsd:attribute
name=
"name"
type=
"xsd:string"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"data"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
<xsd:element
name=
"comment"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"2"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
msdata:Ordinal=
"1"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
msdata:Ordinal=
"3"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
msdata:Ordinal=
"4"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"resheader"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader
name=
"resmimetype"
>
<value>
text/microsoft-resx
</value>
</resheader>
<resheader
name=
"version"
>
<value>
2.0
</value>
</resheader>
<resheader
name=
"reader"
>
<value>
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader
name=
"writer"
>
<value>
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
</root>
\ No newline at end of file
ModbusDemo/ModbusDemo/Program.cs
deleted
100644 → 0
View file @
051dba9a
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Windows.Forms
;
namespace
ModbusDemo
{
static
class
Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[
STAThread
]
static
void
Main
()
{
Application
.
EnableVisualStyles
();
Application
.
SetCompatibleTextRenderingDefault
(
false
);
Application
.
Run
(
new
Demo_818X
());
//Application.Run(new ProTest());
//Application.Run(new MDemo());
}
}
}
ModbusDemo/ModbusDemo/Properties/AssemblyInfo.cs
deleted
100644 → 0
View file @
051dba9a
using
System.Reflection
;
using
System.Runtime.CompilerServices
;
using
System.Runtime.InteropServices
;
// 有关程序集的常规信息通过以下
// 特性集控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("ModbusDemo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ModbusDemo")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("61938d34-0efc-49d0-ac79-236cb9be43d2")]
// 程序集的版本信息由下面四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
ModbusDemo/ModbusDemo/Properties/Resources.Designer.cs
deleted
100644 → 0
View file @
051dba9a
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace
ModbusDemo.Properties
{
using
System
;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[
global
::
System
.
CodeDom
.
Compiler
.
GeneratedCodeAttribute
(
"System.Resources.Tools.StronglyTypedResourceBuilder"
,
"15.0.0.0"
)]
[
global
::
System
.
Diagnostics
.
DebuggerNonUserCodeAttribute
()]
[
global
::
System
.
Runtime
.
CompilerServices
.
CompilerGeneratedAttribute
()]
internal
class
Resources
{
private
static
global
::
System
.
Resources
.
ResourceManager
resourceMan
;
private
static
global
::
System
.
Globalization
.
CultureInfo
resourceCulture
;
[
global
::
System
.
Diagnostics
.
CodeAnalysis
.
SuppressMessageAttribute
(
"Microsoft.Performance"
,
"CA1811:AvoidUncalledPrivateCode"
)]
internal
Resources
()
{
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[
global
::
System
.
ComponentModel
.
EditorBrowsableAttribute
(
global
::
System
.
ComponentModel
.
EditorBrowsableState
.
Advanced
)]
internal
static
global
::
System
.
Resources
.
ResourceManager
ResourceManager
{
get
{
if
(
object
.
ReferenceEquals
(
resourceMan
,
null
))
{
global
::
System
.
Resources
.
ResourceManager
temp
=
new
global
::
System
.
Resources
.
ResourceManager
(
"ModbusDemo.Properties.Resources"
,
typeof
(
Resources
).
Assembly
);
resourceMan
=
temp
;
}
return
resourceMan
;
}
}
/// <summary>
/// 使用此强类型资源类,为所有资源查找
/// 重写当前线程的 CurrentUICulture 属性。
/// </summary>
[
global
::
System
.
ComponentModel
.
EditorBrowsableAttribute
(
global
::
System
.
ComponentModel
.
EditorBrowsableState
.
Advanced
)]
internal
static
global
::
System
.
Globalization
.
CultureInfo
Culture
{
get
{
return
resourceCulture
;
}
set
{
resourceCulture
=
value
;
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal
static
System
.
Drawing
.
Bitmap
_057
{
get
{
object
obj
=
ResourceManager
.
GetObject
(
"057"
,
resourceCulture
);
return
((
System
.
Drawing
.
Bitmap
)(
obj
));
}
}
}
}
ModbusDemo/ModbusDemo/Properties/Resources.resx
deleted
100644 → 0
View file @
051dba9a
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema
id=
"root"
xmlns=
""
xmlns:xsd=
"http://www.w3.org/2001/XMLSchema"
xmlns:msdata=
"urn:schemas-microsoft-com:xml-msdata"
>
<xsd:import
namespace=
"http://www.w3.org/XML/1998/namespace"
/>
<xsd:element
name=
"root"
msdata:IsDataSet=
"true"
>
<xsd:complexType>
<xsd:choice
maxOccurs=
"unbounded"
>
<xsd:element
name=
"metadata"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
use=
"required"
type=
"xsd:string"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"assembly"
>
<xsd:complexType>
<xsd:attribute
name=
"alias"
type=
"xsd:string"
/>
<xsd:attribute
name=
"name"
type=
"xsd:string"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"data"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
<xsd:element
name=
"comment"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"2"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
msdata:Ordinal=
"1"
/>
<xsd:attribute
name=
"type"
type=
"xsd:string"
msdata:Ordinal=
"3"
/>
<xsd:attribute
name=
"mimetype"
type=
"xsd:string"
msdata:Ordinal=
"4"
/>
<xsd:attribute
ref=
"xml:space"
/>
</xsd:complexType>
</xsd:element>
<xsd:element
name=
"resheader"
>
<xsd:complexType>
<xsd:sequence>
<xsd:element
name=
"value"
type=
"xsd:string"
minOccurs=
"0"
msdata:Ordinal=
"1"
/>
</xsd:sequence>
<xsd:attribute
name=
"name"
type=
"xsd:string"
use=
"required"
/>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader
name=
"resmimetype"
>
<value>
text/microsoft-resx
</value>
</resheader>
<resheader
name=
"version"
>
<value>
2.0
</value>
</resheader>
<resheader
name=
"reader"
>
<value>
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader
name=
"writer"
>
<value>
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<assembly
alias=
"System.Windows.Forms"
name=
"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
<data
name=
"057"
type=
"System.Resources.ResXFileRef, System.Windows.Forms"
>
<value>
..\Resources\057.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
</value>
</data>
</root>
\ No newline at end of file
ModbusDemo/ModbusDemo/Properties/Settings.Designer.cs
deleted
100644 → 0
View file @
051dba9a
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace
ModbusDemo.Properties
{
[
global
::
System
.
Runtime
.
CompilerServices
.
CompilerGeneratedAttribute
()]
[
global
::
System
.
CodeDom
.
Compiler
.
GeneratedCodeAttribute
(
"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator"
,
"11.0.0.0"
)]
internal
sealed
partial
class
Settings
:
global
::
System
.
Configuration
.
ApplicationSettingsBase
{
private
static
Settings
defaultInstance
=
((
Settings
)(
global
::
System
.
Configuration
.
ApplicationSettingsBase
.
Synchronized
(
new
Settings
())));
public
static
Settings
Default
{
get
{
return
defaultInstance
;
}
}
}
}
ModbusDemo/ModbusDemo/Properties/Settings.settings
deleted
100644 → 0
View file @
051dba9a
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile
xmlns=
"http://schemas.microsoft.com/VisualStudio/2004/01/settings"
CurrentProfile=
"(Default)"
>
<Profiles>
<Profile
Name=
"(Default)"
/>
</Profiles>
<Settings
/>
</SettingsFile>
ModbusDemo/ModbusDemo/Resources/057.png
deleted
100644 → 0
View file @
051dba9a
18.9 KB
ModbusDemo/Modular/ModualPoll.cs
View file @
0bbb9e7b
...
...
@@ -36,7 +36,7 @@ namespace ModbusDemo.Modular
#if DEBUG_TEST
public
const
byte
byX18xNumber
=
1
;
public
static
byte
[]
byX18xIdlist
=
{
13
};
private
static
modual
.
eX18xSensorChannelType
[,]
sX18xChannelType
=
new
modual
.
eX18xSensorChannelType
[
byX18xNumber
,
byX18xReadDataNumber
]
{
{
modual
.
eX18xSensorChannelType
.
Mike_
5
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
}};
private
static
modual
.
eX18xSensorChannelType
[,]
sX18xChannelType
=
new
modual
.
eX18xSensorChannelType
[
byX18xNumber
,
byX18xReadDataNumber
]
{
{
modual
.
eX18xSensorChannelType
.
Mike_
6
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
,
modual
.
eX18xSensorChannelType
.
Null
}};
#else
public
const
byte
byX18xNumber
=
6
;
public
static
byte
[]
byX18xIdlist
=
{
3
,
53
,
6
,
12
,
21
,
25
};
...
...
@@ -81,7 +81,7 @@ namespace ModbusDemo.Modular
public
const
byte
byX66cRelayRegNumber
=
6
;
public
static
modual
.
pcx66C
cx66c
=
new
modual
.
pcx66C
(
byX66cIdlist
);
public
const
byte
COMMFAILALARM
=
3
;
public
static
void
vAllNodePoll
()
{
for
(
byte
i
=
0
;
i
<
byX14pNumber
;
i
++)
...
...
@@ -95,7 +95,8 @@ namespace ModbusDemo.Modular
{
for
(
byte
j
=
0
;
j
<
byX14pReadTypeNumber
;
j
++)
{
cx14P
.
sX14PAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx14P
.
sX14PAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx14P
.
sX14PAlarmStruct
[
i
].
usCommFailTimes
[
j
]++;
}
}
else
...
...
@@ -103,6 +104,7 @@ namespace ModbusDemo.Modular
for
(
byte
j
=
0
;
j
<
byX14pReadTypeNumber
;
j
++)
{
cx14P
.
sX14PAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx14P
.
sX14PAlarmStruct
[
i
].
usCommFailTimes
[
j
]
=
0
;
}
}
for
(
byte
j
=
0
;
j
<
byX14pReadTypeNumber
;
j
++)
...
...
@@ -160,6 +162,7 @@ namespace ModbusDemo.Modular
for
(
sbyte
j
=
0
;
j
<
byX18xReadTypeNumber
;
j
++)
{
cx18x
.
sX18xAlarmstruct
[
i
].
usNowAlarmCode
[
j
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx18x
.
sX18xAlarmstruct
[
i
].
usCommFailTimes
[
j
]++;
}
}
else
...
...
@@ -167,6 +170,7 @@ namespace ModbusDemo.Modular
for
(
sbyte
j
=
0
;
j
<
byX18xReadTypeNumber
;
j
++)
{
cx18x
.
sX18xAlarmstruct
[
i
].
usNowAlarmCode
[
j
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx18x
.
sX18xAlarmstruct
[
i
].
usCommFailTimes
[
j
]
=
0
;
}
}
for
(
byte
j
=
0
;
j
<
byX18xReadTypeNumber
;
j
++)
...
...
@@ -234,6 +238,7 @@ namespace ModbusDemo.Modular
for
(
sbyte
j
=
0
;
j
<
byX78cInputRegNumber
+
byX78cOutputRegNumber
;
j
++)
{
cx78c
.
sX78cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx78c
.
sX78cAlarmStruct
[
i
].
usCommFailTimes
[
j
]
++;
}
}
else
...
...
@@ -241,6 +246,7 @@ namespace ModbusDemo.Modular
for
(
sbyte
j
=
0
;
j
<
byX78cInputRegNumber
+
byX78cOutputRegNumber
;
j
++)
{
cx78c
.
sX78cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx78c
.
sX78cAlarmStruct
[
i
].
usCommFailTimes
[
j
]
=
0
;
}
}
}
...
...
@@ -254,6 +260,7 @@ namespace ModbusDemo.Modular
for
(
sbyte
j
=
0
;
j
<
byX66cRelayRegNumber
;
j
++)
{
cx66c
.
sX66cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
|=
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx66c
.
sX66cAlarmStruct
[
i
].
usCommFailTimes
[
j
]
++;
}
}
else
...
...
@@ -261,6 +268,7 @@ namespace ModbusDemo.Modular
for
(
sbyte
j
=
0
;
j
<
byX66cRelayRegNumber
;
j
++)
{
cx66c
.
sX66cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
cx66c
.
sX66cAlarmStruct
[
i
].
usCommFailTimes
[
j
]
=
0
;
}
}
}
...
...
@@ -320,6 +328,10 @@ namespace ModbusDemo.Modular
List
<
ushort
>
usChannelErrorCodeList
=
new
List
<
ushort
>();
for
(
byte
j
=
0
;
j
<
byX14pReadDataNumber
;
j
++)
{
if
((
cx14P
.
sX14PAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
)
==
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
&&
cx14P
.
sX14PAlarmStruct
[
i
].
usCommFailTimes
[
j
]
<
COMMFAILALARM
)
{
cx14P
.
sX14PAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
}
if
(
cx14P
.
sX14PAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
!=
cx14P
.
sX14PAlarmStruct
[
i
].
usBeforeAlarmCode
[
j
])
{
bOccurErrorChange
=
true
;
...
...
@@ -343,6 +355,10 @@ namespace ModbusDemo.Modular
List
<
ushort
>
usChannelErrorCodeList
=
new
List
<
ushort
>();
for
(
byte
j
=
0
;
j
<
byX18xReadTypeNumber
;
j
++)
{
if
((
cx18x
.
sX18xAlarmstruct
[
i
].
usNowAlarmCode
[
j
]
&
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
)
==
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
&&
cx18x
.
sX18xAlarmstruct
[
i
].
usCommFailTimes
[
j
]
<
COMMFAILALARM
)
{
cx18x
.
sX18xAlarmstruct
[
i
].
usNowAlarmCode
[
j
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
}
if
(
cx18x
.
sX18xAlarmstruct
[
i
].
usNowAlarmCode
[
j
]
!=
cx18x
.
sX18xAlarmstruct
[
i
].
usBeforeAlarmCode
[
j
])
{
bX18xError
=
true
;
...
...
@@ -367,6 +383,10 @@ namespace ModbusDemo.Modular
List
<
ushort
>
usChannelErrorCodeList
=
new
List
<
ushort
>();
for
(
byte
j
=
0
;
j
<
byX78cOutputRegNumber
+
byX78cInputRegNumber
;
j
++)
{
if
((
cx78c
.
sX78cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
)
==
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
&&
cx78c
.
sX78cAlarmStruct
[
i
].
usCommFailTimes
[
j
]
<
COMMFAILALARM
)
{
cx78c
.
sX78cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
}
if
(
cx78c
.
sX78cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
!=
cx78c
.
sX78cAlarmStruct
[
i
].
usBeforeAlarmCode
[
j
])
{
bOccurErrorChange
=
true
;
...
...
@@ -391,6 +411,10 @@ namespace ModbusDemo.Modular
List
<
ushort
>
usChannelErrorCodeList
=
new
List
<
ushort
>();
for
(
byte
j
=
0
;
j
<
byX66cRelayRegNumber
;
j
++)
{
if
((
cx66c
.
sX66cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
)
==
(
ushort
)
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
&&
cx66c
.
sX66cAlarmStruct
[
i
].
usCommFailTimes
[
j
]
<
COMMFAILALARM
)
{
cx66c
.
sX66cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
&=
(
ushort
)~
ModualAlarm
.
eAlarmCode
.
ChannelCommunError
;
}
if
(
cx66c
.
sX66cAlarmStruct
[
i
].
usNowAlarmCode
[
j
]
!=
cx66c
.
sX66cAlarmStruct
[
i
].
usBeforeAlarmCode
[
j
])
{
bOccurErrorChange
=
true
;
...
...
ModbusDemo/Modular/modual.cs
View file @
0bbb9e7b
...
...
@@ -26,6 +26,7 @@ namespace ModbusDemo.Modular
public
bool
bDataNotFirstIncreaseOrDecrease
;
public
ushort
[]
usNowAlarmCode
;
public
ushort
[]
usBeforeAlarmCode
;
public
ushort
[]
usCommFailTimes
;
}
public
class
pcx14P
{
...
...
@@ -43,8 +44,9 @@ namespace ModbusDemo.Modular
this
.
sX14pDataStruct
[
i
].
dNowConvertData
=
new
double
[
ModualPoll
.
byX14pReadDataNumber
];
//this.sX14pDataStruct[i].usX14pRegType = new ushort[ModualPoll.byX14pReadDataNumber];
//this.sX14pDataStruct[i].usX14pRegData = new ushort[ModualPoll.byX14pReadDataNumber];
this
.
sX14PAlarmStruct
[
i
].
usBeforeAlarmCode
=
new
ushort
[
ModualPoll
.
byX14pReadDataNumber
];
this
.
sX14PAlarmStruct
[
i
].
usNowAlarmCode
=
new
ushort
[
ModualPoll
.
byX14pReadDataNumber
];
this
.
sX14PAlarmStruct
[
i
].
usBeforeAlarmCode
=
new
ushort
[
ModualPoll
.
byX14pReadDataNumber
];
this
.
sX14PAlarmStruct
[
i
].
usNowAlarmCode
=
new
ushort
[
ModualPoll
.
byX14pReadDataNumber
];
this
.
sX14PAlarmStruct
[
i
].
usCommFailTimes
=
new
ushort
[
ModualPoll
.
byX14pReadDataNumber
];
}
}
}
...
...
@@ -83,6 +85,7 @@ namespace ModbusDemo.Modular
//this.sX18xDataStruct[i].usTypeData = new ushort[ModualPoll.byX18xReadDataNumber];
this
.
sX18xAlarmstruct
[
i
].
usBeforeAlarmCode
=
new
ushort
[
ModualPoll
.
byX18xReadDataNumber
];
this
.
sX18xAlarmstruct
[
i
].
usNowAlarmCode
=
new
ushort
[
ModualPoll
.
byX18xReadDataNumber
];
this
.
sX18xAlarmstruct
[
i
].
usCommFailTimes
=
new
ushort
[
ModualPoll
.
byX18xReadDataNumber
];
}
}
}
...
...
@@ -105,6 +108,7 @@ namespace ModbusDemo.Modular
this
.
sX78cRegStatusStruct
[
i
].
bOutPutRegStatus
=
new
bool
[
ModualPoll
.
byX78cOutputRegNumber
];
this
.
sX78cAlarmStruct
[
i
].
usBeforeAlarmCode
=
new
ushort
[
ModualPoll
.
byX78cInputRegNumber
+
ModualPoll
.
byX78cOutputRegNumber
];
this
.
sX78cAlarmStruct
[
i
].
usNowAlarmCode
=
new
ushort
[
ModualPoll
.
byX78cInputRegNumber
+
ModualPoll
.
byX78cOutputRegNumber
];
this
.
sX78cAlarmStruct
[
i
].
usCommFailTimes
=
new
ushort
[
ModualPoll
.
byX78cInputRegNumber
+
ModualPoll
.
byX78cOutputRegNumber
];
}
}
}
...
...
@@ -125,6 +129,7 @@ namespace ModbusDemo.Modular
this
.
sX66cRegStatusStruct
[
i
].
bRegRelayStatus
=
new
bool
[
ModualPoll
.
byX66cRelayRegNumber
];
this
.
sX66cAlarmStruct
[
i
].
usBeforeAlarmCode
=
new
ushort
[
ModualPoll
.
byX66cRelayRegNumber
];
this
.
sX66cAlarmStruct
[
i
].
usNowAlarmCode
=
new
ushort
[
ModualPoll
.
byX66cRelayRegNumber
];
this
.
sX66cAlarmStruct
[
i
].
usCommFailTimes
=
new
ushort
[
ModualPoll
.
byX66cRelayRegNumber
];
}
}
}
...
...
ModbusDemo/windows/Form1.cs
View file @
0bbb9e7b
...
...
@@ -26,18 +26,15 @@ namespace ModbusDemo
{
public
partial
class
Form1
:
Form
{
//Pond FunctionalService = new Pond();
const
bool
LOCALDEBUG
=
true
;
const
bool
LOCALDEBUG
=
false
;
private
bool
bStart
=
false
;
AutoResetEvent
exitEvent
;
private
int
waitTime
;
private
Thread
t_UpgradeConn
;
public
delegate
void
invokeDelegate
();
System
.
Timers
.
Timer
timer
=
new
System
.
Timers
.
Timer
();
System
.
Timers
.
Timer
MQTTTimer
=
new
System
.
Timers
.
Timer
();
BackgroundWorker
m_bgw0
=
new
BackgroundWorker
();
bool
m_Isbgw0_CanContinueRun
=
true
;
bool
State_enable
=
true
;
bool
bCretaThead
=
false
;
public
static
ModbusDemo
.
windows
.
Totxt
totxt
=
new
windows
.
Totxt
(
AppDomain
.
CurrentDomain
.
BaseDirectory
+
@"/log/Log.txt"
);
...
...
@@ -77,7 +74,7 @@ namespace ModbusDemo
int
mqttPort
;
string
mqttUsername
;
string
mqttPwd
;
public
const
string
mqttSn
=
"66666666"
;
public
const
string
mqttSn
=
"66666666"
;
public
const
string
mqttSubscribeControlTopic
=
"Witium/WTDS78X/"
+
mqttSn
+
"/Ctrl"
;
public
const
string
mqttBackTopic
=
"Witium/WTDS78X/"
+
mqttSn
+
"/Back"
;
public
const
string
mqttTopic
=
"Witium/WTDS78X/"
+
mqttSn
+
"/Data"
;
...
...
@@ -86,8 +83,6 @@ namespace ModbusDemo
string
mqttData_Back
;
//数据
private
IMqttClient
mqttClient
=
null
;
private
bool
isReconnect
=
true
;
private
void
SetMqtt
()
{
if
(
LOCALDEBUG
==
true
)
...
...
@@ -100,7 +95,7 @@ namespace ModbusDemo
}
else
{
mqttIp
=
"1
20.27.235.39"
;
mqttIp
=
"1
72.16.1.24"
;
//"120.27.235.39"
mqttClientId
=
GetTimeStamp
()
+
"sxz"
;
mqttPort
=
1883
;
mqttUsername
=
"pasture"
;
...
...
@@ -114,13 +109,11 @@ namespace ModbusDemo
int
_n
=
2
;
this
.
Invoke
(
new
Action
(()
=>
{
}));
Thread
.
Sleep
(
1000
);
}
}
#region 时间戳
#
region
时间戳
/// <summary>
/// 获取时间戳
/// </summary>
...
...
@@ -131,8 +124,9 @@ namespace ModbusDemo
return
Convert
.
ToUInt64
(
ts
.
TotalSeconds
);
}
#endregion
#region mqtt服务
#
endregion
#
region
mqtt
服务
//创建一个委托,是为访问TextBox控件服务的。
public
delegate
void
UpdateTxt
(
string
msg
);
//定义一个委托变量
...
...
@@ -190,7 +184,6 @@ namespace ModbusDemo
private
async
Task
ConnectMqttServerAsync
()
{
// Create a new MQTT client.
if
(
mqttClient
==
null
)
{
var
factory
=
new
MqttFactory
();
...
...
@@ -209,7 +202,7 @@ namespace ModbusDemo
.
WithClientId
(
mqttClientId
)
.
WithTcpServer
(
mqttIp
,
mqttPort
)
.
WithCredentials
(
mqttUsername
,
mqttPwd
)
//.WithTls()//服务器端没有启用加密协议,这里用tls的会提示协议异常
.
WithCleanSession
()
.
Build
();
...
...
@@ -240,7 +233,7 @@ namespace ModbusDemo
{
Invoke
((
new
Action
(()
=>
{
txtReceiveMessage
.
Clear
();
//
txtReceiveMessage.Clear();
txtReceiveMessage
.
AppendText
(
"已连接到MQTT服务器!"
+
Environment
.
NewLine
);
//totxt.Log("已连接到MQTT服务器!" + Environment.NewLine);
//Console.WriteLine("已连接到MQTT服务器!" + Environment.NewLine);
...
...
@@ -343,25 +336,23 @@ namespace ModbusDemo
txtReceiveMessage
.
AppendText
(
$">> Retain =
{
e
.
ApplicationMessage
.
Retain
}{
Environment
.
NewLine
}
"
);
//totxt.Log($">> Retain = {e.ApplicationMessage.Retain}{Environment.NewLine}");
})));
mqttData
=
null
;
mqttData
=
null
;
}
#endregion
#
endregion
#region modbus线程
#
region
modbus
线程
private
static
bool
bSetDataIsRunning
=
false
;
private
Thread
ModbusPollThread
;
private
bool
bModbusPollThreadStart
=
false
;
private
void
vModbusPoll
()
{
while
(
bModbusPollThreadStart
)
while
(
true
)
{
bSetDataIsRunning
=
true
;
totxt
.
Log
(
"开始执行"
);
ModualPoll
.
vAllNodePoll
();
mqttData
=
ModualPoll
.
stAll_Poll_Package
();
ModualPoll
.
vCheckAlarm_And_Send
(
mqttClient
);
totxt
.
Log
(
"执行结束"
);
label5
.
Text
=
ModbusComm
.
usCommunFailTimes
.
ToString
();
Thread
.
Sleep
(
100
);
}
}
private
void
Sendout
()
...
...
@@ -409,18 +400,7 @@ namespace ModbusDemo
bSetDataIsRunning
=
false
;
}
}
<<<<<<<
HEAD
=======
<<<<<<<
HEAD
}
#
region
PoolTest
=======
}
#region PoolTest
>>>>>>>
ae9d62a8c8c10f8339da24024e6330c7ac4ff704
#endregion
//声明委托
private
delegate
void
ShowMessageDelegate
(
string
message
);
private
void
ShowMessage
(
string
message
)
...
...
@@ -436,9 +416,9 @@ namespace ModbusDemo
//totxt.Log(message);
}
}
#endregion
#
endregion
#region json字符串转对象
#
region
json
字符串转对象
/// <summary>
/// json字符串转对象
/// </summary>
...
...
@@ -502,11 +482,10 @@ namespace ModbusDemo
Console
.
WriteLine
(
ex
.
Message
);
return
""
;
}
>>>>>>>
origin
/
master
}
#endregion
#
endregion
#region 网络检测
#
region
网络检测
ManualResetEvent
network
=
new
ManualResetEvent
(
false
);
Thread
MonitorThread
;
...
...
@@ -631,9 +610,9 @@ namespace ModbusDemo
// isconn = true;
return
isconn
;
}
#endregion
#
endregion
#region 更新线程
#
region
更新线程
string
ImagefilePath
=
null
;
private
void
bgWorker_DoWork
(
object
sender
,
DoWorkEventArgs
e
)
{
...
...
@@ -941,21 +920,21 @@ namespace ModbusDemo
switch
(
ExceptionCode
.
Trim
())
{
case
"1"
:
Console
.
WriteLine
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal function!"
);
MessageBox
.
Show
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal function!"
);
break
;
Console
.
WriteLine
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal function!"
);
MessageBox
.
Show
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal function!"
);
break
;
case
"2"
:
Console
.
WriteLine
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal data address!"
);
MessageBox
.
Show
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal data address!"
);
break
;
Console
.
WriteLine
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal data address!"
);
MessageBox
.
Show
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal data address!"
);
break
;
case
"3"
:
Console
.
WriteLine
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal data value!"
);
MessageBox
.
Show
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal data value!"
);
break
;
Console
.
WriteLine
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal data value!"
);
MessageBox
.
Show
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Illegal data value!"
);
break
;
case
"4"
:
Console
.
WriteLine
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Slave device failure!"
);
MessageBox
.
Show
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Slave device failure!"
);
break
;
Console
.
WriteLine
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Slave device failure!"
);
MessageBox
.
Show
(
"Exception Code: "
+
ExceptionCode
.
Trim
()
+
"----> Slave device failure!"
);
break
;
}
this
.
UpdateBar
.
Value
=
this
.
UpdateBar
.
Minimum
;
...
...
@@ -966,7 +945,7 @@ namespace ModbusDemo
}
}
}
#endregion
#
endregion
private
void
txtReceiveMessage_TextChanged
(
object
sender
,
EventArgs
e
)
{
...
...
@@ -979,7 +958,7 @@ namespace ModbusDemo
private
void
button2_Click
(
object
sender
,
EventArgs
e
)
{
ModualPoll
.
vAllNodePoll
();
mqttData
=
ModualPoll
.
stAll_Poll_Package
();
mqttData
=
ModualPoll
.
stAll_Poll_Package
();
}
private
async
void
SubscribeBut_Click
(
object
sender
,
EventArgs
e
)
...
...
@@ -990,67 +969,54 @@ namespace ModbusDemo
[
Obsolete
]
private
void
btOpenCOM_Click
(
object
sender
,
EventArgs
e
)
{
if
(
LOCALDEBUG
==
true
)
{
comPort
.
PortName
=
"COM6"
;
comPort
.
BaudRate
=
9600
;
comPort
.
Parity
=
Parity
.
None
;
comPort
.
StopBits
=
StopBits
.
One
;
comPort
.
DataBits
=
8
;
}
else
{
if
(
cmbPort
.
Text
==
""
)
{
MessageBox
.
Show
(
"串口打开错误"
);
return
;
}
comPort
.
PortName
=
cmbPort
.
Text
;
comPort
.
BaudRate
=
int
.
Parse
(
cmbBaud
.
Text
);
comPort
.
DataBits
=
int
.
Parse
(
cmbDataBit
.
Text
);
if
(
cmbParity
.
Text
.
Substring
(
0
,
1
)
==
"0"
)
if
(
LOCALDEBUG
==
true
)
{
comPort
.
PortName
=
"COM6"
;
comPort
.
BaudRate
=
9600
;
comPort
.
Parity
=
Parity
.
None
;
comPort
.
StopBits
=
StopBits
.
One
;
comPort
.
DataBits
=
8
;
}
else
if
(
cmbParity
.
Text
.
Substring
(
0
,
1
)
==
"1"
)
{
comPort
.
Parity
=
Parity
.
Odd
;
}
else
if
(
cmbParity
.
Text
.
Substring
(
0
,
1
)
==
"2"
)
{
comPort
.
Parity
=
Parity
.
Even
;
}
if
(
cmbStopBit
.
Text
==
"0"
)
{
comPort
.
StopBits
=
StopBits
.
None
;
}
else
if
(
cmbStopBit
.
Text
==
"1"
)
else
{
comPort
.
StopBits
=
StopBits
.
One
;
if
(
cmbPort
.
Text
==
""
)
{
MessageBox
.
Show
(
"串口打开错误"
);
return
;
}
comPort
.
PortName
=
cmbPort
.
Text
;
comPort
.
BaudRate
=
int
.
Parse
(
cmbBaud
.
Text
);
comPort
.
DataBits
=
int
.
Parse
(
cmbDataBit
.
Text
);
if
(
cmbParity
.
Text
.
Substring
(
0
,
1
)
==
"0"
)
{
comPort
.
Parity
=
Parity
.
None
;
}
else
if
(
cmbParity
.
Text
.
Substring
(
0
,
1
)
==
"1"
)
{
comPort
.
Parity
=
Parity
.
Odd
;
}
else
if
(
cmbParity
.
Text
.
Substring
(
0
,
1
)
==
"2"
)
{
comPort
.
Parity
=
Parity
.
Even
;
}
if
(
cmbStopBit
.
Text
==
"0"
)
{
comPort
.
StopBits
=
StopBits
.
None
;
}
else
if
(
cmbStopBit
.
Text
==
"1"
)
{
comPort
.
StopBits
=
StopBits
.
One
;
}
}
}
try
{
comPort
.
Open
();
isReconnect
=
true
;
SetMqtt
();
if
(
bCretaThead
==
false
)
{
bCretaThead
=
true
;
ModbusPollThread
=
new
Thread
(
vModbusPoll
);
ModbusPollThread
.
Start
();
ModbusControlThread
=
new
Thread
(
ModualControl
.
vControl_Poll
);
ModbusControlThread
.
Start
();
}
else
{
ModbusPollThread
.
Resume
();
}
bModbusPollThreadStart
=
true
;
MQTT_thread
=
new
MethodInvoker
(
Sendout
);
MQTT_thread
.
BeginInvoke
(
null
,
null
);
Task
.
Run
(
async
()
=>
{
await
ConnectMqttServerAsync
();
});
ModbusComm
.
Modbus
=
ModbusSerialMaster
.
CreateRtu
(
comPort
);
ModbusComm
.
Modbus
.
Transport
.
Retries
=
0
;
ModbusComm
.
Modbus
.
Transport
.
ReadTimeout
=
1000
;
...
...
@@ -1061,23 +1027,35 @@ namespace ModbusDemo
modbus_Timer
.
Enabled
=
true
;
btOpenCOM
.
Enabled
=
false
;
btCloseCOM
.
Enabled
=
true
;
if
(
bCretaThead
==
false
)
{
bCretaThead
=
true
;
ModbusPollThread
=
new
Thread
(
vModbusPoll
);
ModbusPollThread
.
Start
();
ModbusControlThread
=
new
Thread
(
ModualControl
.
vControl_Poll
);
ModbusControlThread
.
Start
();
}
else
{
ModbusPollThread
.
Resume
();
}
totxt
.
Log
(
DateTime
.
Now
.
ToString
()
+
" =>Open "
+
comPort
.
PortName
+
" sucessfully!"
);
}
catch
(
Exception
ex
)
{
totxt
.
Log
(
"Error: "
+
ex
.
Message
);
MessageBox
.
Show
(
"Error: "
+
ex
.
Message
);
return
;
}
}
catch
(
Exception
ex
)
{
totxt
.
Log
(
"Error: "
+
ex
.
Message
);
MessageBox
.
Show
(
"Error: "
+
ex
.
Message
);
return
;
}
}
[
Obsolete
]
private
void
btCloseCOM_Click
(
object
sender
,
EventArgs
e
)
{
//Close comport first,then stop and dispose slave.
bModbusPollThreadStart
=
false
;
if
(
ModbusPollThread
.
IsAlive
)
ModbusPollThread
.
Suspend
();
if
(
ModbusPollThread
.
IsAlive
==
true
)
ModbusPollThread
.
Suspend
();
isReconnect
=
false
;
modbus_Timer
.
Enabled
=
false
;
btOpenCOM
.
Enabled
=
true
;
...
...
@@ -1087,4 +1065,5 @@ namespace ModbusDemo
totxt
.
Log
(
DateTime
.
Now
.
ToString
()
+
" =>Disconnect "
+
comPort
.
PortName
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment