Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
Thick-Common
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
潘栩锋
Thick-Common
Commits
a9c917d0
Commit
a9c917d0
authored
Dec 01, 2022
by
潘栩锋
🚴
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 优化 让AD2021.B2继承于Dev7E
2. 优化 把ModbusRTUAsync 时间间隔设置为35ms
parent
ba42501c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
633 additions
and
928 deletions
+633
-928
CommSpeedMeasuring.cs
GeneralGommunication/CommSpeedMeasuring.cs
+124
-0
Dev7E.cs
GeneralGommunication/Dev7E.cs
+3
-119
GeneralGommunication.csproj
GeneralGommunication/GeneralGommunication.csproj
+6
-2
ModbusRTUAsync.cs
GeneralGommunication/ModbusRTUAsync.cs
+9
-10
FlyAd2021Core.cs
Project.FLY.FlyADBase/FlyAd2021.B2/FlyAd2021Core.cs
+489
-708
FlyAdBase3.csproj
Project.FLY.FlyADBase/FlyAd2021.B2/FlyAdBase3.csproj
+0
-1
ProtocolCommon.cs
Project.FLY.FlyADBase/FlyAd2021.B2/ProtocolCommon.cs
+0
-84
TimeGridAdvHelper.cs
Project.FLY.FlyADBase/FlyAd2021.B2/TimeGridAdvHelper.cs
+1
-3
livecharts
livecharts
+1
-1
No files found.
GeneralGommunication/CommSpeedMeasuring.cs
0 → 100644
View file @
a9c917d0
using
System
;
using
System.Collections.Generic
;
using
System.ComponentModel
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
System.Threading.Tasks
;
namespace
GeneralGommunication
{
/// <summary>
/// 测量通讯速度模块
/// </summary>
public
class
CommSpeedMeasuring
:
INotifyPropertyChanged
{
public
event
PropertyChangedEventHandler
PropertyChanged
;
/// <summary>
/// 通讯速度 测量中
/// </summary>
public
bool
IsMeasuring
{
get
;
private
set
;
}
/// <summary>
/// 通讯速度 byte/s
/// </summary>
public
int
CommSpeed
{
get
;
private
set
;
}
/// <summary>
/// 通讯速度 单位 pack/s
/// </summary>
public
int
PackSpeed
{
get
;
private
set
;
}
int
packCnt
=
0
;
int
recCnt
=
0
;
Stopwatch
stopwatch
=
new
Stopwatch
();
protected
CancellationTokenSource
cancellationTokenSource
;
public
void
StartMeasure
()
{
if
(
IsMeasuring
)
return
;
IsMeasuring
=
true
;
Reset
();
cancellationTokenSource
=
new
CancellationTokenSource
();
//启动线程,测量速度
Task
.
Factory
.
StartNew
(
MeasureTask
,
cancellationTokenSource
.
Token
);
}
public
void
StopMeasure
()
{
cancellationTokenSource
.
Cancel
();
//停止线程
IsMeasuring
=
false
;
}
void
MeasureTask
()
{
stopwatch
.
Start
();
while
(!
cancellationTokenSource
.
IsCancellationRequested
)
{
if
(
stopwatch
.
Elapsed
>
TimeSpan
.
FromSeconds
(
1
))
{
int
rcnt
,
pcnt
;
double
totalsec
;
lock
(
this
)
{
totalsec
=
stopwatch
.
Elapsed
.
TotalSeconds
;
stopwatch
.
Restart
();
rcnt
=
recCnt
;
pcnt
=
packCnt
;
recCnt
=
0
;
packCnt
=
0
;
}
//1秒均值
CommSpeed
=
(
int
)(
rcnt
/
totalsec
);
PackSpeed
=
(
int
)(
pcnt
/
totalsec
);
}
Task
.
Delay
(
100
).
Wait
();
}
stopwatch
.
Stop
();
}
/// <summary>
/// 异常时调用
/// </summary>
public
void
Reset
()
{
lock
(
this
)
{
recCnt
=
0
;
packCnt
=
0
;
}
}
/// <summary>
/// 需要在 RecMsg(byte[] recBuf) 中调用
/// </summary>
/// <param name="cnt"></param>
public
void
IncRec
(
int
cnt
)
{
if
(!
IsMeasuring
)
return
;
lock
(
this
)
{
recCnt
+=
cnt
;
}
}
/// <summary>
/// 需要在 ParsePack(pack); 后调用
/// </summary>
/// <param name="cnt"></param>
public
void
IncPack
(
int
cnt
)
{
if
(!
IsMeasuring
)
return
;
lock
(
this
)
{
packCnt
+=
cnt
;
}
}
}
}
GeneralGommunication/Dev7E.cs
View file @
a9c917d0
...
@@ -205,11 +205,6 @@ namespace GeneralGommunication
...
@@ -205,11 +205,6 @@ namespace GeneralGommunication
logger
.
Debug
(
$"REQ
{
commReq
.
PrefixString
}
"
);
logger
.
Debug
(
$"REQ
{
commReq
.
PrefixString
}
"
);
else
else
logger
.
Debug
(
$"REQ
{
commReq
.
PrefixString
}
{
Newtonsoft
.
Json
.
JsonConvert
.
SerializeObject
(
tran
.
datasObj
)}
"
);
logger
.
Debug
(
$"REQ
{
commReq
.
PrefixString
}
{
Newtonsoft
.
Json
.
JsonConvert
.
SerializeObject
(
tran
.
datasObj
)}
"
);
//byte[] prefix = COMMREQ.ToPrefix("RCD", 0);
//if (prefix.SequenceEqual(commReq.Prefix))
//{
//}
//转为 7E格式
//转为 7E格式
var
buf
=
GetSendPack
(
pack
);
var
buf
=
GetSendPack
(
pack
);
...
@@ -305,6 +300,7 @@ namespace GeneralGommunication
...
@@ -305,6 +300,7 @@ namespace GeneralGommunication
return
;
return
;
}
}
//解析后的 datas 没有了 帧包装 7E
byte
crc8
=
Misc
.
CRC
.
CRC8
(
pack
,
0
,
pack
.
Count
()
-
1
);
byte
crc8
=
Misc
.
CRC
.
CRC8
(
pack
,
0
,
pack
.
Count
()
-
1
);
if
(
pack
.
Last
()
!=
crc8
)
if
(
pack
.
Last
()
!=
crc8
)
{
{
...
@@ -312,6 +308,7 @@ namespace GeneralGommunication
...
@@ -312,6 +308,7 @@ namespace GeneralGommunication
ErrCnt
++;
ErrCnt
++;
return
;
return
;
}
}
ParsePackAfterCheckCRC8
(
pack
);
ParsePackAfterCheckCRC8
(
pack
);
}
}
protected
abstract
void
ParsePackAfterCheckCRC8
(
byte
[]
buf
);
protected
abstract
void
ParsePackAfterCheckCRC8
(
byte
[]
buf
);
...
@@ -329,7 +326,7 @@ namespace GeneralGommunication
...
@@ -329,7 +326,7 @@ namespace GeneralGommunication
/// 功能包解析
/// 功能包解析
/// </summary>
/// </summary>
/// <param name="datas"></param>
/// <param name="datas"></param>
protected
void
ParseFuncPack
(
byte
[]
pack
)
protected
v
irtual
v
oid
ParseFuncPack
(
byte
[]
pack
)
{
{
if
(
currTran
==
null
)
if
(
currTran
==
null
)
{
{
...
@@ -576,8 +573,6 @@ namespace GeneralGommunication
...
@@ -576,8 +573,6 @@ namespace GeneralGommunication
/// <param name="datas"></param>
/// <param name="datas"></param>
protected
virtual
List
<
byte
>
GetSendPack
(
List
<
byte
>
datas
)
protected
virtual
List
<
byte
>
GetSendPack
(
List
<
byte
>
datas
)
{
{
//datas.Insert(0, 0x80);//插入B0
//需要在后面添加CRC8
//需要在后面添加CRC8
byte
crc8
=
Misc
.
CRC
.
CRC8
(
datas
,
0
,
datas
.
Count
());
byte
crc8
=
Misc
.
CRC
.
CRC8
(
datas
,
0
,
datas
.
Count
());
datas
.
Add
(
crc8
);
datas
.
Add
(
crc8
);
...
@@ -645,116 +640,5 @@ namespace GeneralGommunication
...
@@ -645,116 +640,5 @@ namespace GeneralGommunication
}
}
}
}
/// <summary>
/// 测量通讯速度模块
/// </summary>
public
class
CommSpeedMeasuring
:
INotifyPropertyChanged
{
public
event
PropertyChangedEventHandler
PropertyChanged
;
/// <summary>
/// 通讯速度 测量中
/// </summary>
public
bool
IsMeasuring
{
get
;
private
set
;
}
/// <summary>
/// 通讯速度 byte/s
/// </summary>
public
double
CommSpeed
{
get
;
private
set
;
}
/// <summary>
/// 通讯速度 单位 pack/s
/// </summary>
public
double
PackSpeed
{
get
;
private
set
;
}
int
packCnt
=
0
;
int
recCnt
=
0
;
Stopwatch
stopwatch
=
new
Stopwatch
();
protected
CancellationTokenSource
cancellationTokenSource
;
public
void
StartMeasure
()
{
if
(
IsMeasuring
)
return
;
IsMeasuring
=
true
;
Reset
();
cancellationTokenSource
=
new
CancellationTokenSource
();
//启动线程,测量速度
Task
.
Factory
.
StartNew
(
MeasureTask
,
cancellationTokenSource
.
Token
);
}
public
void
StopMeasure
()
{
cancellationTokenSource
.
Cancel
();
//停止线程
IsMeasuring
=
false
;
}
void
MeasureTask
()
{
stopwatch
.
Start
();
while
(!
cancellationTokenSource
.
IsCancellationRequested
)
{
if
(
stopwatch
.
Elapsed
>
TimeSpan
.
FromSeconds
(
1
))
{
int
rcnt
,
pcnt
;
double
totalsec
;
lock
(
this
)
{
totalsec
=
stopwatch
.
Elapsed
.
TotalSeconds
;
stopwatch
.
Restart
();
rcnt
=
recCnt
;
pcnt
=
packCnt
;
recCnt
=
0
;
packCnt
=
0
;
}
//1秒均值
CommSpeed
=
rcnt
/
totalsec
;
PackSpeed
=
pcnt
/
totalsec
;
}
Task
.
Delay
(
100
).
Wait
();
}
stopwatch
.
Stop
();
}
/// <summary>
/// 异常时调用
/// </summary>
public
void
Reset
()
{
lock
(
this
)
{
recCnt
=
0
;
packCnt
=
0
;
}
}
/// <summary>
/// 需要在 RecMsg(byte[] recBuf) 中调用
/// </summary>
/// <param name="cnt"></param>
public
void
IncRec
(
int
cnt
)
{
if
(!
IsMeasuring
)
return
;
lock
(
this
)
{
recCnt
+=
cnt
;
}
}
/// <summary>
/// 需要在 ParsePack(pack); 后调用
/// </summary>
/// <param name="cnt"></param>
public
void
IncPack
(
int
cnt
)
{
if
(!
IsMeasuring
)
return
;
lock
(
this
)
{
packCnt
+=
cnt
;
}
}
}
}
}
GeneralGommunication/GeneralGommunication.csproj
View file @
a9c917d0
...
@@ -42,6 +42,7 @@
...
@@ -42,6 +42,7 @@
<Reference
Include=
"WindowsBase"
/>
<Reference
Include=
"WindowsBase"
/>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<Compile
Include=
"CommSpeedMeasuring.cs"
/>
<Compile
Include=
"Dev7E.cs"
/>
<Compile
Include=
"Dev7E.cs"
/>
<Compile
Include=
"GComm_SerialPort.cs"
/>
<Compile
Include=
"GComm_SerialPort.cs"
/>
<Compile
Include=
"GComm_TcpClient.cs"
/>
<Compile
Include=
"GComm_TcpClient.cs"
/>
...
@@ -57,10 +58,10 @@
...
@@ -57,10 +58,10 @@
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<PackageReference
Include=
"NLog"
>
<PackageReference
Include=
"NLog"
>
<Version>
5.0.
0
</Version>
<Version>
5.0.
5
</Version>
</PackageReference>
</PackageReference>
<PackageReference
Include=
"PropertyChanged.Fody"
>
<PackageReference
Include=
"PropertyChanged.Fody"
>
<Version>
3.
4
.1
</Version>
<Version>
3.
3
.1
</Version>
</PackageReference>
</PackageReference>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
...
@@ -69,5 +70,8 @@
...
@@ -69,5 +70,8 @@
<Name>
Misc
</Name>
<Name>
Misc
</Name>
</ProjectReference>
</ProjectReference>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<Content
Include=
"FodyWeavers.xml"
/>
</ItemGroup>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
</Project>
</Project>
\ No newline at end of file
GeneralGommunication/ModbusRTUAsync.cs
View file @
a9c917d0
...
@@ -75,7 +75,7 @@ namespace GeneralGommunication
...
@@ -75,7 +75,7 @@ namespace GeneralGommunication
Transactions
=
new
List
<
Modbus_Transaction
>();
Transactions
=
new
List
<
Modbus_Transaction
>();
timer3d5t
=
new
System
.
Timers
.
Timer
();
timer3d5t
=
new
System
.
Timers
.
Timer
();
timer3d5t
.
Interval
=
1
5
;
//设得再小也没有用。 它只是用系统的15ms定时器触发而已。
timer3d5t
.
Interval
=
3
5
;
//设得再小也没有用。 它只是用系统的15ms定时器触发而已。
timer3d5t
.
AutoReset
=
false
;
//触发一次
timer3d5t
.
AutoReset
=
false
;
//触发一次
timer3d5t
.
Elapsed
+=
Timer3d5t_Elapsed
;
timer3d5t
.
Elapsed
+=
Timer3d5t_Elapsed
;
...
@@ -129,6 +129,7 @@ namespace GeneralGommunication
...
@@ -129,6 +129,7 @@ namespace GeneralGommunication
Transactions
.
RemoveAll
(
t
=>
t
.
deviceNo
==
currTran
.
deviceNo
);
Transactions
.
RemoveAll
(
t
=>
t
.
deviceNo
==
currTran
.
deviceNo
);
currTran
=
null
;
currTran
=
null
;
retryCnt
=
0
;
return
;
return
;
}
}
else
else
...
@@ -151,7 +152,7 @@ namespace GeneralGommunication
...
@@ -151,7 +152,7 @@ namespace GeneralGommunication
currPack
.
AddRange
(
recBuf
);
currPack
.
AddRange
(
recBuf
);
if
(
logger
.
IsDebugEnabled
)
{
if
(
logger
.
IsDebugEnabled
)
{
string
msg
=
bytes2hex
(
recBuf
);
string
msg
=
bytes2hex
(
recBuf
);
logger
.
Debug
(
$"
REC
{
msg
}
"
);
logger
.
Debug
(
$"
ACK
{
msg
}
"
);
}
}
//15ms后再处理。
//15ms后再处理。
...
@@ -176,7 +177,6 @@ namespace GeneralGommunication
...
@@ -176,7 +177,6 @@ namespace GeneralGommunication
currTran
=
Transactions
.
First
();
currTran
=
Transactions
.
First
();
retryCnt
=
0
;
Transactions
.
RemoveAt
(
0
);
Transactions
.
RemoveAt
(
0
);
}
}
else
else
...
@@ -191,13 +191,11 @@ namespace GeneralGommunication
...
@@ -191,13 +191,11 @@ namespace GeneralGommunication
//调试: 打印发送信息
//调试: 打印发送信息
if
(
logger
.
IsDebugEnabled
)
if
(
logger
.
IsDebugEnabled
)
{
{
string
msg
=
$"REQ N:
{
tran
.
deviceNo
}
F:
{
tran
.
func
:
00
}
A:
{
tran
.
addr
}
C:
{
tran
.
cnt
}
"
;
string
msg
=
bytes2hex
(
tran
.
sendBuf
);
if
(
tran
.
desription
!=
null
)
if
(
tran
.
desription
==
null
)
msg
+=
tran
.
desription
;
logger
.
Debug
(
$"REQ
{
msg
}
"
);
logger
.
Debug
(
msg
);
else
logger
.
Debug
(
$"REQ
{
tran
.
desription
}
{
msg
}
"
);
//msg = bytes2hex(tran.sendBuf);
//logger.Debug($"SEND {msg}");
}
}
//开始计时
//开始计时
timerTimeOut
.
Start
();
timerTimeOut
.
Start
();
...
@@ -212,6 +210,7 @@ namespace GeneralGommunication
...
@@ -212,6 +210,7 @@ namespace GeneralGommunication
{
{
Transactions
.
Clear
();
Transactions
.
Clear
();
currTran
=
null
;
currTran
=
null
;
retryCnt
=
0
;
timer3d5t
.
Stop
();
timer3d5t
.
Stop
();
timerTimeOut
.
Stop
();
timerTimeOut
.
Stop
();
csm
.
Reset
();
csm
.
Reset
();
...
...
Project.FLY.FlyADBase/FlyAd2021.B2/FlyAd2021Core.cs
View file @
a9c917d0
This diff is collapsed.
Click to expand it.
Project.FLY.FlyADBase/FlyAd2021.B2/FlyAdBase3.csproj
View file @
a9c917d0
...
@@ -57,7 +57,6 @@
...
@@ -57,7 +57,6 @@
<Compile
Include=
"Inc\IFlyADClientAdv.cs"
/>
<Compile
Include=
"Inc\IFlyADClientAdv.cs"
/>
<Compile
Include=
"Inc\IFlyAd2021Core.cs"
/>
<Compile
Include=
"Inc\IFlyAd2021Core.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
<Compile
Include=
"ProtocolCommon.cs"
/>
<Compile
Include=
"TimeGridAdvHelper.cs"
/>
<Compile
Include=
"TimeGridAdvHelper.cs"
/>
</ItemGroup>
</ItemGroup>
<ItemGroup>
<ItemGroup>
...
...
Project.FLY.FlyADBase/FlyAd2021.B2/ProtocolCommon.cs
deleted
100644 → 0
View file @
ba42501c
using
System.Collections.Generic
;
using
System.Linq
;
namespace
FlyADBase
{
public
static
class
ProtocolCommon
{
/// <summary>
/// 第0个byte是 7E
/// </summary>
/// <param name="pdu"></param>
/// <returns></returns>
public
static
bool
Pdu2Data
(
IEnumerable
<
byte
>
pdu
,
out
List
<
byte
>
datas
)
{
datas
=
new
List
<
byte
>();
for
(
int
i
=
1
;
i
<
pdu
.
Count
();
i
++)
{
byte
p
=
pdu
.
ElementAt
(
i
);
if
(
p
==
0x7D
)
{
if
(
i
+
1
<
pdu
.
Count
())
{
i
++;
p
=
pdu
.
ElementAt
(
i
);
//转义符
if
(
p
==
0x5E
)
{
datas
.
Add
(
0x7E
);
}
else
if
(
p
==
0x5D
)
{
datas
.
Add
(
0x7D
);
}
else
{
//异常,不能转义
return
false
;
}
}
else
{
//异常,没有转义信息
return
false
;
}
}
else
{
datas
.
Add
(
p
);
}
}
return
true
;
}
/// <summary>
/// 第0个byte是 7E
/// </summary>
/// <param name="pdu"></param>
/// <returns></returns>
public
static
bool
Data2Pdu
(
IEnumerable
<
byte
>
datas
,
out
List
<
byte
>
pdu
)
{
pdu
=
new
List
<
byte
>();
pdu
.
Add
(
0x7E
);
for
(
int
i
=
0
;
i
<
datas
.
Count
();
i
++)
{
byte
b
=
datas
.
ElementAt
(
i
);
if
(
b
==
0x7E
)
{
pdu
.
Add
(
0x7D
);
pdu
.
Add
(
0x5E
);
}
else
if
(
b
==
0x7D
)
{
pdu
.
Add
(
0x7D
);
pdu
.
Add
(
0x5D
);
}
else
{
pdu
.
Add
(
b
);
}
}
return
true
;
}
}
}
Project.FLY.FlyADBase/FlyAd2021.B2/TimeGridAdvHelper.cs
View file @
a9c917d0
...
@@ -275,10 +275,8 @@ namespace FlyADBase
...
@@ -275,10 +275,8 @@ namespace FlyADBase
if
(
NewestTime
==
DateTime
.
MinValue
)
if
(
NewestTime
==
DateTime
.
MinValue
)
return
;
return
;
if
(
DataPool
.
Count
()
==
0
)
return
;
if
(
DataPool
.
Count
()
>
(
60
*
1.2
)
*
1000
)
if
(
DataPool
.
Count
()
<
(
60
*
1.2
)
*
1000
)
{
{
//比限定的多了0.2min 才会动作
//比限定的多了0.2min 才会动作
return
;
return
;
...
...
livecharts
@
4ed21f89
Subproject commit
3fd5bff0cbb36bfff39be5a8839295f43894af16
Subproject commit
4ed21f891f894ac67a2048af145b7ccc9261ed05
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