Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiancetai
Project
Project
Details
Activity
Releases
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
陈家乐
jiancetai
Commits
107ebd09
Commit
107ebd09
authored
Dec 20, 2024
by
李冠华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🐞
fix:完善数据对比功能,增加请求重发功能,解决由于485接收到的数据异常问题导致的误判NVS错误的情况
parent
eca1bf18
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
146 additions
and
218 deletions
+146
-218
NVS_Test.c
YueJin_test_bench/source/Appliciation/NVS_Test.c
+60
-23
NVS_Test.h
YueJin_test_bench/source/Appliciation/NVS_Test.h
+5
-1
Power_Controls.c
YueJin_test_bench/source/Appliciation/Power_Controls.c
+28
-18
RS485_Protocol_User.c
YueJin_test_bench/source/Appliciation/RS485_Protocol_User.c
+3
-0
Task.c
YueJin_test_bench/source/Appliciation/Task.c
+27
-7
api_RS485.c
YueJin_test_bench/source/Appliciation/api_RS485.c
+23
-169
No files found.
YueJin_test_bench/source/Appliciation/NVS_Test.c
View file @
107ebd09
...
...
@@ -8,10 +8,17 @@ uint32_t BeforeLastNum = 0U;
uint32_t
ReceivedValue
=
0U
;
uint8_t
RenWuDelay
=
0U
;
uint8_t
errNum
=
0U
;
uint32_t
TurnOffPowerCount
=
0U
;
uint32_t
TurnOffPowerCountHistory
=
0U
;
uint32_t
JieShouDaoValue
=
0U
;
uint32_t
JieShouDaoHistoryVal
=
0U
;
uint16_t
BenCiShangDianZhiXingCount
=
0U
;
uint16_t
huifudelayCount
=
0U
;
uint8_t
StopFlag
=
0U
;
uint32_t
RS485TXBenCiXieRuNum
=
0u
;
uint32_t
RS485TXTotalExecutionNum
=
0u
;
uint8_t
RerequestCount
=
0U
;
static
void
NVS_Test_BenCiXieRuNum
(
void
);
static
void
NVS_Test_Rerequest
(
void
);
void
NVS_Test_Init
(
void
)
{
...
...
@@ -21,11 +28,15 @@ void NVS_Test_Init(void)
BeforeLastNum
=
0xFFFFFFFFU
;
ReceivedValue
=
0U
;
RenWuDelay
=
0U
;
TurnOffPowerCount
=
0U
;
TurnOffPowerCountHistory
=
0U
;
errNum
=
0U
;
JieShouDaoValue
=
0U
;
RS485_TX_finish
=
2U
;
/*发出的RS485信号标志位,初始化为2,不发不收*/
BenCiShangDianZhiXingCount
=
0U
;
huifudelayCount
=
0U
;
StopFlag
=
0U
;
RS485TXBenCiXieRuNum
=
0u
;
RS485TXTotalExecutionNum
=
0u
;
RerequestCount
=
0U
;
}
void
NVS_Test_Service
(
void
)
...
...
@@ -40,57 +51,77 @@ void NVS_Test_Service(void)
LastNum
=
BenCiXieRuNum
;
NVS_Test_BenCiXieRuNum
();
RS485_TX_finish
=
0U
;
/*上电后满足等待时间后,开始发第一帧信号*/
RS485TXBenCiXieRuNum
=
BenCiXieRuNum
;
RS485TXTotalExecutionNum
=
TotalExecutionNum
;
huifudelayCount
=
0u
;
}
}
else
if
(
RS485_TX_finish
==
0U
)
{
;
/*执行发的功能*/
huifudelayCount
=
0u
;
/*执行发的功能*/
}
else
{
if
(
RS485_TX_finish
==
3U
)
{
if
(
TotalExecutionNum
!=
0U
)
huifudelayCount
=
0u
;
if
((
TotalExecutionNum
!=
0U
)
&&
(
JieShouDaoHistoryVal
!=
JieShouDaoValue
))
{
JieShouDaoHistoryVal
=
JieShouDaoValue
;
if
(
JieShouDaoValue
!=
LastNum
)
{
if
((
JieShouDaoValue
!=
BeforeLastNum
)
&&
(
TurnOffPowerCount
!=
TurnOffPowerCountHistory
))
{
errNum
++
;
}
else
if
(
TurnOffPowerCount
==
TurnOffPowerCountHistory
)
if
((
JieShouDaoValue
==
BeforeLastNum
)
&&
(
BenCiShangDianZhiXingCount
==
0U
))
{
errNum
++
;
;
}
if
(
JieShouDaoValue
!=
BeforeLastNum
)
else
{
errNum
++
;
}
}
}
if
(
TurnOffPowerCount
!=
TurnOffPowerCountHistory
)
{
TurnOffPowerCountHistory
=
TurnOffPowerCount
;
/*断电后重启第一次对比标记,只有此时才执行对比上上次的值,之后不能对比*/
}
if
(
errNum
==
0U
)
{
StopFlag
=
0u
;
RerequestCount
=
0U
;
BenCiShangDianZhiXingCount
++
;
BeforeLastNum
=
LastNum
;
LastNum
=
BenCiXieRuNum
;
NVS_Test_BenCiXieRuNum
();
TotalExecutionNum
++
;
RS485TXBenCiXieRuNum
=
BenCiXieRuNum
;
RS485TXTotalExecutionNum
=
TotalExecutionNum
;
RS485_TX_finish
=
0U
;
/*执行读的功能,对比完没问题再重新外发*/
}
else
{
RS485_TX_finish
=
0xFFU
;
/*不再执行任何收发操作*/
if
(
RerequestCount
<
3U
)
{
NVS_Test_Rerequest
();
errNum
=
0U
;
RerequestCount
++
;
}
else
{
RS485_TX_finish
=
0xFFU
;
/*不再执行任何收发操作*/
}
}
}
else
{
;
/*等待仪表回复*/
if
(
huifudelayCount
>
400u
)
{
/*超过了8s没有回复,请求重发*/
NVS_Test_Rerequest
();
huifudelayCount
=
0
;
}
else
{
huifudelayCount
++
;
/*等待仪表回复*/
}
}
}
}
...
...
@@ -115,4 +146,10 @@ static void NVS_Test_BenCiXieRuNum(void)
}
static
void
NVS_Test_Rerequest
(
void
)
{
StopFlag
=
1u
;
RS485TXBenCiXieRuNum
=
0xFFFFEEEEU
;
RS485TXTotalExecutionNum
=
0xFFFFEEEEU
;
RS485_TX_finish
=
0U
;
}
YueJin_test_bench/source/Appliciation/NVS_Test.h
View file @
107ebd09
...
...
@@ -21,7 +21,11 @@ extern uint32_t TurnOffPowerCount;
extern
uint32_t
TurnOffPowerCountHistory
;
extern
uint8_t
errNum
;
extern
uint32_t
JieShouDaoValue
;
extern
uint16_t
BenCiShangDianZhiXingCount
;
extern
uint16_t
huifudelayCount
;
extern
uint8_t
StopFlag
;
extern
uint32_t
RS485TXBenCiXieRuNum
;
extern
uint32_t
RS485TXTotalExecutionNum
;
extern
void
NVS_Test_Init
(
void
);
...
...
YueJin_test_bench/source/Appliciation/Power_Controls.c
View file @
107ebd09
#include "Power_Controls.h"
#include "NVS_Test.h"
uint16_t
PowerCountNum
=
0U
;
uint8_t
KL1530ON
=
0U
;
...
...
@@ -14,30 +15,39 @@ void Power_Controls_Init(void)
void
Power_Control_Count
(
void
)
{
if
(
PowerCountNum
<=
(
SHANG_DIAN_TIMES
+
ShangDianOffset
)
)
if
(
StopFlag
==
0U
)
{
KL1530ON
=
1U
;
PowerCountNum
++
;
}
else
if
((
PowerCountNum
>
(
SHANG_DIAN_TIMES
+
ShangDianOffset
))
&&
(
PowerCountNum
<
(
SHANG_DIAN_TIMES
+
ShangDianOffset
+
DUAN_DIAN_TIMES
)))
{
KL1530ON
=
0U
;
PowerCountNum
++
;
}
else
{
KL1530ON
=
0U
;
PowerCountNum
=
0U
;
if
(
ShangDianOffset
<
300U
)
if
(
PowerCountNum
<=
(
SHANG_DIAN_TIMES
+
ShangDianOffset
))
{
/*上电总时长小于90s+25s*/
ShangDianOffset
=
((
ShangDianOffset
+
5
)
*
10
/
7
)
;
KL1530ON
=
1U
;
PowerCountNum
++
;
}
else
else
if
((
PowerCountNum
>
(
SHANG_DIAN_TIMES
+
ShangDianOffset
))
&&
(
PowerCountNum
<
(
SHANG_DIAN_TIMES
+
ShangDianOffset
+
DUAN_DIAN_TIMES
)))
{
ShangDianOffset
/=
20u
;
KL1530ON
=
0U
;
PowerCountNum
++
;
}
else
{
KL1530ON
=
0U
;
PowerCountNum
=
0U
;
if
(
ShangDianOffset
<
300U
)
{
/*上电总时长小于90s+25s*/
ShangDianOffset
=
((
ShangDianOffset
+
5
)
*
10
/
7
);
}
else
{
ShangDianOffset
/=
20u
;
}
}
}
else
{
KL1530ON
=
1U
;
PowerCountNum
=
0U
;
}
}
...
...
YueJin_test_bench/source/Appliciation/RS485_Protocol_User.c
View file @
107ebd09
...
...
@@ -172,6 +172,7 @@ static Protocol_uint32_t RS485_Protocol_UartSend(const Protocol_uint8_t *pData,
}
uint8_t
RS485_data
[
4
]
=
{
0
,
0
,
0
,
0
};
uint32_t
zuihoujiedaode
=
0
;
static
void
RS485_Protocol_UartHandle
(
const
Protocol_Data_t
*
pData
)
{
...
...
@@ -184,6 +185,8 @@ static void RS485_Protocol_UartHandle(const Protocol_Data_t *pData)
RS485_data
[
2
]
=
pData
->
Data
[
2
];
RS485_data
[
3
]
=
pData
->
Data
[
3
];
zuihoujiedaode
=
(
RS485_data
[
0
]
+
(
RS485_data
[
1
]
<<
8u
)
+
(
RS485_data
[
2
]
<<
16u
)
+
(
RS485_data
[
3
]
<<
24u
))
;
memcpy
(
R485_ID60h
.
Msg
,
RS485_data
,
4u
);
R485_Receive_0x60
();
RS485_TX_finish
=
3U
;
...
...
YueJin_test_bench/source/Appliciation/Task.c
View file @
107ebd09
...
...
@@ -99,6 +99,21 @@ void Sys_Run_Mode_10ms_Tasks_Group(void)
// UART_Ch0_Send_Multiple_Byte(testdata,3);
// RS485_User_Tx_Data();
// if(RS485_TX_finish == 0)
// {
// LINE_OUT_NEG_09 = 1;
// if(LINE_OUT_NEG_09 == 1)
// {
// RS485_User_Tx_Data();
// }
// }
// else
// {
// LINE_OUT_NEG_09 = 0;
// // Recv_Byte();
// RS485_Protocol_Service();
// }
if
(
RS485_TX_finish
==
0
)
{
LINE_OUT_NEG_09
=
1
;
...
...
@@ -107,12 +122,8 @@ void Sys_Run_Mode_10ms_Tasks_Group(void)
RS485_User_Tx_Data
();
}
}
else
{
LINE_OUT_NEG_09
=
0
;
// Recv_Byte();
RS485_Protocol_Service
();
}
}
/*==============================================================================
...
...
@@ -145,6 +156,13 @@ void Sys_Run_Mode_20ms_Tasks_Group0(void)
time100mssend
=
0
;
}
if
(
RS485_TX_finish
!=
0
)
{
LINE_OUT_NEG_09
=
0
;
// Recv_Byte();
RS485_Protocol_Service
();
}
if
(
errNum
==
0
)
{
if
((
KL1530ON
==
1
)
&&
(
RenWuDelay
>=
30U
))
...
...
@@ -153,12 +171,14 @@ void Sys_Run_Mode_20ms_Tasks_Group0(void)
}
else
if
((
KL1530ON
==
1
)
&&
(
RenWuDelay
<
30U
))
{
TurnOffPowerCount
++
;
;
}
else
{
RenWuDelay
=
0U
;
RS485_TX_finish
=
2U
;
/*断电置为0x2,不发不收*/
BenCiShangDianZhiXingCount
=
0U
;
huifudelayCount
=
0U
;
}
}
}
...
...
YueJin_test_bench/source/Appliciation/api_RS485.c
View file @
107ebd09
...
...
@@ -336,176 +336,30 @@ uint32_t sendnum = 1;
void
RS485_User_Tx_Data
(
void
)
{
#if (1)
uint8_t
flag
=
0
;
uint32_t
sendfinishflag
=
0
;
// if(firstflag = 0)
// {
memcpy
(
lastdata
,
nowdata
,
4
);
// }
// m
sendmsgAll
[
0
]
=
(
uint8_t
)(
BenCiXieRuNum
&
0xFF
);
sendmsgAll
[
1
]
=
(
uint8_t
)((
BenCiXieRuNum
>>
8U
)
&
0xFF
);
sendmsgAll
[
2
]
=
(
uint8_t
)((
BenCiXieRuNum
>>
16U
)
&
0xFF
);
sendmsgAll
[
3
]
=
(
uint8_t
)((
BenCiXieRuNum
>>
24U
)
&
0xFF
);
sendmsgAll
[
4
]
=
(
uint8_t
)(
TotalExecutionNum
&
0xFF
);
sendmsgAll
[
5
]
=
(
uint8_t
)((
TotalExecutionNum
>>
8U
)
&
0xFF
);
sendmsgAll
[
6
]
=
(
uint8_t
)((
TotalExecutionNum
>>
16U
)
&
0xFF
);
sendmsgAll
[
7
]
=
(
uint8_t
)((
TotalExecutionNum
>>
24U
)
&
0xFF
);
if
(
RS485_TX_finish
==
0
)
{
// LINE_OUT_NEG_09 = 1;
switch
(
RS485_send_num
)
{
case
RS485_Tx_ID70_Idx
:
sendfinishflag
=
R485_Send
(
0x70
,
sendmsgAll
,
8
);
// RS485_TX_finish = 0U;
if
(
sendfinishflag
==
0
)
{
RS485_TX_finish
=
1U
;
if
(
RS485_TX_finish
==
1
)
{
// RS485_send_num++;
// lastdata[0] = (uint8_t)sendnum & 0xFF;
// lastdata[1] = ((uint8_t)(sendnum >>8)) & 0xFF;
// lastdata[2] = ((uint8_t)(sendnum >>16)) & 0xFF;
// lastdata[3] = ((uint8_t)(sendnum >>24)) & 0xFF;
nowdata
[
0
]
=
(
uint8_t
)
sendnum
&
0xFF
;
nowdata
[
1
]
=
((
uint8_t
)(
sendnum
>>
8
))
&
0xFF
;
nowdata
[
2
]
=
((
uint8_t
)(
sendnum
>>
16
))
&
0xFF
;
nowdata
[
3
]
=
((
uint8_t
)(
sendnum
>>
24
))
&
0xFF
;
sendnum
++
;
}
}
break
;
// case RS485_Tx_ID49_Idx:
// sendfinishflag = R485_Send(0x71, sendmsgAll, 8);
// RS485_TX_finish = 1;
// if(sendfinishflag == 0)
// {
// if(RS485_TX_finish == 1)
// {
// // sendnum++;
// RS485_send_num ++;
// }
// }
// // uart_wait_tx_done(R485_UART_PORT, 100);
// break;
// case RS485_Tx_ID4A_Idx:
// sendfinishflag = R485_Send(0x72, sendmsgAll, sizeof(sendmsgAll));
// RS485_TX_finish = 1;
// if(sendfinishflag == 0)
// {
// RS485_TX_finish = 1;
// if(RS485_TX_finish == 1)
// {
// RS485_send_num++;
// }
// }
// break;
// case 3:
// sendfinishflag = R485_Send(0x73, sendmsgAll, sizeof(sendmsgAll));
// RS485_TX_finish = 1;
// if(sendfinishflag == 0)
// {
// RS485_TX_finish = 1;
// if(RS485_TX_finish == 1)
// {
// RS485_send_num++;
// }
// }
// break;
// case 4:
// sendfinishflag = R485_Send(0x74, sendmsgAll, sizeof(sendmsgAll));
// RS485_TX_finish = 1;
// if(sendfinishflag == 0)
// {
// RS485_TX_finish = 1;
// if(RS485_TX_finish == 1)
// {
// RS485_send_num++;
// }
// }
// break;
default:
// sendnum++;
RS485_send_num
=
0
;
break
;
// RS485_TX_finish = 1;
}
}
#endif
#if(0)
uint8_t
flag
=
0
;
uint32_t
sendfinishflag
=
0
;
// if(RS485_send_time > 3000)
// {
switch
(
RS485_send_num
)
{
case
RS485_Tx_ID48_Idx
:
sendfinishflag
=
R485_Send_0x40
();
RS485_TX_finish
=
1
;
if
(
sendfinishflag
==
0
)
{
if
(
RS485_TX_finish
==
1
)
{
// sendnum++;
RS485_send_time
=
0
;
RS485_send_num
++
;
}
}
break
;
case
RS485_Tx_ID49_Idx
:
sendfinishflag
=
R485_Send_0x41
();
if
(
sendfinishflag
==
0
)
{
RS485_send_time
=
0
;
RS485_TX_finish
=
1
;
if
(
RS485_TX_finish
==
1
)
{
RS485_send_num
++
;
}
}
break
;
case
RS485_Tx_ID4A_Idx
:
sendfinishflag
=
R485_Send_0x42
();
if
(
sendfinishflag
==
0
)
{
RS485_send_time
=
0
;
RS485_TX_finish
=
1
;
if
(
RS485_TX_finish
==
1
)
{
RS485_send_num
++
;
}
}
break
;
default:
flag
=
1
;
RS485_send_time
=
0
;
RS485_send_num
=
0
;
break
;
}
#endif
uint8_t
flag
=
0
;
uint32_t
sendfinishflag
=
0
;
sendmsgAll
[
0
]
=
(
uint8_t
)(
RS485TXBenCiXieRuNum
&
0xFF
);
sendmsgAll
[
1
]
=
(
uint8_t
)((
RS485TXBenCiXieRuNum
>>
8U
)
&
0xFF
);
sendmsgAll
[
2
]
=
(
uint8_t
)((
RS485TXBenCiXieRuNum
>>
16U
)
&
0xFF
);
sendmsgAll
[
3
]
=
(
uint8_t
)((
RS485TXBenCiXieRuNum
>>
24U
)
&
0xFF
);
sendmsgAll
[
4
]
=
(
uint8_t
)(
RS485TXTotalExecutionNum
&
0xFF
);
sendmsgAll
[
5
]
=
(
uint8_t
)((
RS485TXTotalExecutionNum
>>
8U
)
&
0xFF
);
sendmsgAll
[
6
]
=
(
uint8_t
)((
RS485TXTotalExecutionNum
>>
16U
)
&
0xFF
);
sendmsgAll
[
7
]
=
(
uint8_t
)((
RS485TXTotalExecutionNum
>>
24U
)
&
0xFF
);
if
(
RS485_TX_finish
==
0
)
{
sendfinishflag
=
R485_Send
(
0x70
,
sendmsgAll
,
8
);
// RS485_TX_finish = 0U;
if
(
sendfinishflag
==
0
)
{
RS485_TX_finish
=
1U
;
}
}
}
void
backsend
(
void
)
{
if
(
RS485_send_time
>=
20
)
...
...
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