This commit is contained in:
Fancy code 2024-05-15 08:57:03 +08:00
parent a1e14a3f27
commit 96ed848470
2 changed files with 57 additions and 69 deletions

View File

@ -66,39 +66,48 @@
  整机物理上电时,根据实际情况刷新设备的工作状态。
补充:
如果掉电无法保存数据,首次物理上电向主控获取;
默认开启喂狗;
```mermaid
sequenceDiagram
participant CPU
participant MCU
MCU ->> MCU:物理上电
MCU ->> MCU:串口初始化
opt 检测到TEST拨档挡位
alt 检测到TEST拨档挡位
MCU ->> CPU:物理上电
MCU ->> +CPU:发送启动模式TEST启动
CPU ->> CPU:TEST启动
CPU -->> -MCU:回复OK
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复TEST启动
CPU ->> CPU:TEST启动
loop 无操作
CPU ->> +MCU:发送关机指令
MCU -->> -CPU:回复OK
CPU ->> MCU:发送关机指令
MCU ->> CPU:物理断电
end
end
opt 检测到ON拨档挡位
else 检测到ON拨档挡位
note over MCU:正常工作模式PIR触发后可给主控上电
MCU ->> CPU:物理上电
CPU ->> +MCU:查询启动模式
MCU -->> -CPU:回复ON启动
CPU ->> CPU:ON启动
CPU ->> MCU:发送关机指令
MCU ->> CPU:物理断电
end
opt PIR触发中断
MCU ->> CPU:物理上电
MCU ->> +CPU:发送PIR触发启动
CPU ->> CPU:PIR启动
CPU -->> -MCU:回复OK
CPU ->> +MCU:发送关机指令
MCU -->> -CPU:回复OK
CPU ->> MCU:发送关机指令
MCU ->> CPU:物理断电
end
loop 默认开启喂狗
opt 喂狗超时
MCU ->> CPU:断电重启
MCU ->> +CPU:发送启动模式:喂狗异常启动
CPU ->> CPU:异常启动
CPU -->> -MCU:回复OK
CPU ->> MCU:发送关机指令
MCU ->> CPU:物理断电
end
end
MCU ->> MCU:休眠
note over MCU:休眠后进入正常工作模式当发生PIR触发时<br>给CPU物理上电并发送PIR启动命令
```
@ -187,29 +196,28 @@ end
&emsp;&emsp;外置MCU充当硬件狗在系统异常时断电重启系统。喂狗逻辑和启动模式无关。
默认开启喂狗;
```mermaid
sequenceDiagram
participant CPU
participant MCU
MCU ->> MCU:物理上电
MCU ->> CPU:某种启动模式触发物理上电
opt 主控开启喂狗
CPU ->> +MCU:开启狗/设置喂狗周期
MCU -->> -CPU:回复OK
loop 主控喂狗
loop 默认开启喂狗
opt 设置喂狗周期
note over CPU:主控选择性设置喂狗周期
CPU ->> +MCU:开启狗/设置喂狗周期
MCU -->> -CPU:回复OK
end
opt 主控喂狗
note over MCU:喂狗不需要回复
CPU ->> MCU:喂狗
end
loop MCU定时查狗
alt 主控喂狗异常
MCU ->> CPU:断电重启
MCU ->> +CPU:发送启动模式:喂狗异常启动
CPU ->> CPU:喂狗异常启动
CPU -->> -MCU:回复OK
CPU ->> MCU:断电关机
end
alt 主控喂狗异常
MCU ->> CPU:断电重启
MCU ->> +CPU:发送启动模式:喂狗异常启动
CPU ->> CPU:喂狗异常启动
CPU -->> -MCU:回复OK
CPU ->> MCU:断电关机
end
end
CPU ->> MCU:断电关机
@ -218,14 +226,9 @@ MCU ->> MCU:休眠
note over MCU:休眠后进入正常工作模式当发生PIR触发时<br>给CPU物理上电并发送PIR启动命令
```
#### 1.3.3.3. 心跳
#### 1.3.3.3. 超时异常启动
&emsp;&emsp;CPU单次上电时间都是有限的在主控未主动开启喂狗时30s主动查询一次心跳未回复则断电重启。此设计保证程序异常时电量不会一直消耗完。
**注意:** 整机上电之后如果从来未开启过喂狗功能,此功能不生效。避免调试版本不停重启。
取消心跳,默认开启喂狗。喂狗线程模拟主线程心跳;
单次上电时间异常重启总时间3min
&emsp;&emsp;CPU单次上电时间都是有限的在主控未正常发送关机指令时3min后断电进行异常启动。
```mermaid
sequenceDiagram
@ -233,37 +236,15 @@ participant CPU
participant MCU
MCU ->> MCU:物理上电
MCU ->> CPU:某种启动模式触发物理上电
opt 主控开启喂狗
CPU ->> +MCU:开启狗/设置喂狗周期
MCU -->> -CPU:回复OK
MCU ->> MCU:激活心跳功能
opt 主控未正常发送关机指令
MCU ->> CPU:物理断电
MCU ->> +CPU:发送启动模式:喂狗异常启动
CPU ->> CPU:喂狗异常启动
CPU -->> -MCU:回复OK
end
CPU ->> MCU:断电关机
MCU ->> CPU:物理断电
MCU ->> MCU:休眠
note over MCU:只要CPU某次启动开启喂狗功能下次启动心跳功能就会生效。
MCU ->> CPU:某种启动模式触发物理上电
opt 心跳功能已经激活
note over MCU:心跳功能在主控未开启喂狗时(异常)发挥作用。
opt 主控未开启喂狗
loop 30s主动查询一次心跳
MCU ->> +CPU:发送心跳包
alt 心跳回复
CPU -->> -MCU:回复OK
else 5s超时 心跳未回复
MCU ->> CPU:断电重启
MCU ->> +CPU:发送启动模式:心跳异常启动
CPU ->> CPU:心跳异常启动
CPU -->> -MCU:回复OK
CPU ->> MCU:断电关机
end
end
end
CPU ->> MCU:断电关机
MCU ->> CPU:物理断电
MCU ->> MCU:休眠
end
```
#### 1.3.3.4. PIR触发任务
@ -331,8 +312,8 @@ MCU ->> MCU:物理上电
MCU ->> CPU:某种启动模式触发物理上电
opt 数据同步
note over MCU:此处根据协议只做一个数据示例,其它协议雷同。
CPU ->> +MCU:设置灵敏度
MCU -->> -CPU:回复OK
MCU ->> +CPU:获取灵敏度
CPU -->> -MCU:回复数据
end
CPU ->> MCU:断电关机
MCU ->> CPU:物理断电

View File

@ -129,8 +129,8 @@ unsigned short calculate_check_sum(const unsigned char* pData, unsigned short le
| ---- | ---- | ---- | ---- | ---- | ---- |
| 0x8101 | ask | - | - | 获取启动模式 | - |
| 0x0101 | - | reply | Data[0]:启动模式<br>0x01:PIR启动 <br>0x02:TEST启动 <br>0x03:ON启动 <br>0x04:连拍启动 <br>0x05:PIR延时启动 <br>0x06:定时(间隔一定时间)启动 <br>0x07:关机 <br>0x08:低电关机 <br>0x09:异常启动 | 回复启动模式 | 异常启动数据Data[1]<br>0x00:喂狗异常启动<br>0x01:超时异常启动 |
| 0x8102 | ask | - | - | 断电关机 | - |
| 0x8103 | ask | - | - | 喂狗 | - |
| 0x8102 | ask | - | - | 断电关机 | 断电关机不用回复 |
| 0x8103 | ask | - | - | 喂狗 | 喂狗不用回复 |
| 0x8104 | ask | - | Data[2]两字节的数字单位s | 设置喂狗周期 | 0s代表关闭喂狗 修改为两个字节单位s |
| 0x0104 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置喂狗周期回复 | - |
| 0x8105 | ask | - | - | 关闭狗 | 取消 |
@ -141,8 +141,8 @@ unsigned short calculate_check_sum(const unsigned char* pData, unsigned short le
| 0x0107 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置日期和时间回复 | - |
| 0x8108 | ask | - | Data[0]:灵敏度<br>0-9 | 设置PIR灵敏度 | - |
| 0x0108 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置PIR灵敏度回复 | - |
| 0x8109 | ask | - | Data[0]:Hour<br>0-23<br>Data[1]:Min<br>0-59<br>Data[2]:Sec<br>0-59 | 设置连拍间隔 | - |
| 0x0109 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置连拍间隔回复 | - |
| 0x8109 | ask | - | Data[0]连拍间隔单位s | 设置连拍启动 | 设置连拍启动后会立即关机一般连拍间隔较大时使用该功能连拍间隔较小时Linux单次完成连拍。 |
| 0x0109 | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 设置连拍启动回复 | - |
| 0x810A | ask | - | Data[0]:控制模式<br>0-关闭红外灯<br>1-开启红外灯 | 红外灯控制 | 取消 |
| 0x010A | - | reply | Data[0]:结果<br>0x01:成功<br>0x02:失败 | 红外灯控制回复 | 取消 |
| 0x810B | ask | - | - | 获取光敏值 | 取消 |
@ -152,9 +152,16 @@ unsigned short calculate_check_sum(const unsigned char* pData, unsigned short le
| 0x4101 | - | ask | Data[0]:启动模式<br>0x01:PIR启动 <br>0x02:TEST启动 <br>0x03:ON启动 <br>0x04:连拍启动 <br>0x05:PIR延时启动 <br>0x06:定时(间隔一定时间)启动 <br>0x07:关机 <br>0x08:低电关机 <br>0x09:异常启动 | 发送启动模式 | 异常启动数据Data[1]<br>0x00:喂狗异常启动<br>0x01:超时异常启动 |
| 0xC102 | reply | - | - | 回复心跳包 | 取消 |
| 0x4102 | - | ask | - | 发送心跳包 | 取消 |
| 0xC106 | reply | - | Data[0]:Hour<br>0-23<br>Data[1]:Min<br>0-59<br>Data[2]:Sec<br>0-59 | 回复获取间隔启动时间 | - |
| 0x4106 | - | ask | - | 获取间隔启动时间 | - |
| 0xC107 | reply | - | Data[0]:Year<br>Data[1]:Mon<br>1-12<br>Data[2]:Day<br>0-31<br>Data[3]:Hour<br>0-23<br>Data[4]:Min<br>0-59<br>Data[5]:Sec<br>0-59 | 回复获取日期和时间 | - |
| 0x4107 | - | ask | - | 获取日期和时间 | - |
| 0xC108 | reply | - | Data[0]:灵敏度<br>0-9 | 回复获取PIR灵敏度 | - |
| 0x4108 | - | ask | - | 获取PIR灵敏度 | - |
### 1.2.1. 名词解析
| 名词 | 解析 |
| ---- | ---- |
| 超时异常启动 | MCU给主控上电后**非TEST启动**不管主控是否正常喂狗如果单次上电时长超过3min未关机给主控断电重启一次。 |
| 超时异常启动 | MCU给主控上电后**非TEST启动**不管主控是否正常喂狗如果单次上电时长超过3min未关机给主控断电重启一次。 |
| 间隔启动时间 | 例如60min/次。 |