# 水下运载器姿态数据采集系统
**Repository Path**: yoooola/SCADA
## Basic Information
- **Project Name**: 水下运载器姿态数据采集系统
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2024-04-26
- **Last Updated**: 2024-06-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 水下运载器数据采集管理系统
## 1. 设备简介
请补充:
1.用途
## 2. 控制系统
| 设备 | 型号 | 典型精度 | 数据频率 | 淘宝链接 | 备注 |
| :----------: | :-----------: | :-------------------------: | :------: | :----------------------------------------------------------: | :------------------------: |
| 主控单元 | 树莓派4B-8G | - | - | - | - |
| 储存单元 | 长江存储64G卡 | - | - | - | - |
| 深度计 | DT03D5 | 0.01%FS | 100hz | [深度计](https://item.taobao.com/item.htm?id=650341318648) | 量程3Mpa(300m) |
| 高精度倾角仪 | HWT9073-CAN | heading 0.1°
else 0.001° | 100hz | [HWT9073-CAN](https://detail.tmall.com/item.htm?id=672387306606) | 频率最高200hz |
| 调速风扇 | CreateBlock | - | - | [FAN](https://item.jd.com/10082392486566.html) | 需插调速线 |
| 通信模块 | RS485-USB | - | - | [RS485-USB](https://item.taobao.com/item.htm?id=735528802234) | 深度计用 |
| 通信模块 | CAN-USB | - | - | [CAN-USB](https://detail.tmall.com/item.htm?id=598670674373) | 倾角仪用 |
| 电压转换模块 | 12V转5V-3A | - | - | [5V](https://item.taobao.com/item.htm?id=722027908769) | 需要三块 |
| 电源系统 | 11.1V(3S) | - | - | [12V/8400mah](https://detail.tmall.com/item.htm?abbucket=6&id=520111996213) | DC5.5公+母头 |
| 状态指示灯 | 10030105-0002 | - | - | [绿色指示灯](https://item.taobao.com/item.htm?id=793523888501) | 耐压1km
需外接控制电路 |
### 0. 硬件总体安装示意图
树莓派引脚图->[链接](https://pinout.xyz/)
**无集成单元连接方式**

**集成单元安装接线示意图**

### 1. 时钟模块安装

### 2. 调速风扇安装
### 3. 树莓派电源安装
### 4. 状态指示灯安装
### 5. 深度计安装

### 6. 倾角仪安装
## 3. 树莓派的设置与安装
### 3.1 PC端上位机软件安装
+ 命令行交互软件 xshell -> [xshell下载链接](https://www.xshell.com/zh/xshell/)
+ 文件交互软件 WinSCP -> [WinSCP](https://winscp.net/eng/index.php)
### 3.2 树莓派系统安装
[下载树莓派系统安装软件->点我](https://downloads.raspberrypi.org/imager/imager_latest.exe)
**选择如图**

**设置如下**

```
设置主机名:
pi01.local
Set username and passwd :
username: pi
passwd: raspberry
配置WIFI:
WTJ
密码
wangtaijie
WIFI国家:GB
语言:
SHANGHAI
键盘
us
```

### 3.3 查看设备是否连接至路由器
http://192.168.8.1/
密码:wangtaijie
查看设备以`dhcpcd-8.1.2`开头的设备是否连上

### 3.4 连接树莓派
打开xshell,新建会话
```bash
主机:
pi01.local
用户身份验证:
用户名:pi
密码:raspberry
```
连接
### 3.5 更新设备系统和库
```bash
sudo apt-get update
sudo apt-get upgrade # 按y
# 更改系统时区
```
### 3.6 检查pip是否安装
```bash
pip --version # Python2.x 版本命令
pip3 --version # Python3.x 版本命令
# 如果未安装的话
sudo apt-get install python3-pip
# sudo apt-get install python-pip 安装一个即可
# pip换源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
```
### 3.7 安装wiringpi-python
```bash
# 安装nano编辑器和Git
sudo apt-get install nano
sudo apt-get install git
# 创建工作区并进入
cd ~/ && mkdir ~/WorkSpace && cd ~/WorkSpace
# 安装wiringpi
pip install wiringpi
```
### 3.8 安装gsw库
```bash
pip install gsw # 用来计算海水的深度
```
### 3.9 修改树莓派WIFI
1. SD卡创建名为`wpa_supplicant.conf`文件
```bash
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US
network={
scan_ssid=1
ssid="你的Wifi名称"
psk="你的Wifi密码"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
priority=1
}
```
2. ssh方式添加wifi
```bash
# 先使用ssh登录树莓派的后台
sudo raspi-config
# 选择1-> System Options
# 选择S1-> Wireless LAN
# Please enter SSID -> 输入wifi名称
# Please enter password -> 输入wifi密码
# 回车完事儿
```
### 3.10 安装其他相关库
```bash
# 安装serial库
pip3 install pyserial
# 安装openblas
sudo apt-get install libopenblas-dev
# 安装psutil库
pip install psutil
```
## 4. 传感器参数设置
### 4.1 DS3231时钟模块
#### 树莓派设置(xshell)
```bash
sudo raspi-config
# 1. 选择 3 Interface Options Configure connections to peripherals
# 2. 然后,选择 P5 I2C Enable/disable automatic loading of I2C kernel module
# -> 提示 Would you like the ARM I2C interface to be enable?
# 3. 选择
# -> 提示 The ARM I2C interface is enabled
# 4. 回车选择
# 5. 选择5,选择时区, Localisation Options Configure language and regional settings
# 6. 选择L2 Timezone Configure time zone
# 选择 Asia -> Shanghai
# 8. 按ESC退出
sudo nano /boot/config.txt
# 在 dtparam=i2c_arm=on下添加(复制粘贴即可)
dtoverlay=i2c-rtc,ds3231
# ctrl+x, 按y确认,回车退出
# 安装i2c-tools
sudo apt-get install i2c-tools
# 然后重启
sudo reboot now
# 等待重启结束
# 查看I2C设备
sudo i2cdetect -y 1
# 结果如下图所示,某组地址为UU
```

```bash
# 查看当前树莓派的系统时间
timedatectl # 查看时间服务
# Local time: Sun 2024-05-26 16:11:55 CST # 本地时间
# Universal time: Sun 2024-05-26 08:11:55 UTC # UTC时间
# RTC time: Sun 2024-05-26 08:11:56 # RTC时钟模块时间
# Time zone: Asia/Shanghai (CST, +0800) # 时区
# System clock synchronized: yes # 如果和远程NTP服务器成功同步,显示为yes
# NTP service: active # 联网自动时间同步功能,是否开启
# RTC in local TZ: no # no表示硬件时钟设置为协调世界时(UTC),yes表示硬件时钟设置为本地时间
# 尝试设置一个时间
sudo hwclock --set --date="2021/08/21 22:02:00"
# 再次查看时钟模块的时间
timedatectl # 查看时间服务
# Local time: Sun 2024-05-26 16:40:02 CST
# Universal time: Sun 2024-05-26 08:40:02 UTC
# RTC time: Sat 2021-08-21 14:02:04
# Time zone: Asia/Shanghai (CST, +0800)
# System clock synchronized: no
# NTP service: active
# RTC in local TZ: no
# 重启,并联网, 此时时钟模块会自动更新
sudo reboot now
timedatectl # 查看时间服务
# Local time: Sun 2024-05-26 16:44:09 CST
# Universal time: Sun 2024-05-26 08:44:09 UTC
# RTC time: Sun 2024-05-26 08:44:10 # 时钟模块时间更新了
# Time zone: Asia/Shanghai (CST, +0800)
# System clock synchronized: yes
# NTP service: active
# RTC in local TZ: no
```
### 4.2 DT03D5-RS485深度计
#### 4.2.1 深度计参数设置
+ 下载深度计上位机,解压后打开,[深度计上位机压缩包点我](else/Depth Sensor/DepthSensorSoftware.zip)
+ 如果设备管理器查找不到对应串口,安装对应的驱动,[下载驱动点我](https://www.wch.cn/downloads/CH343SER_EXE.html)
+ **提示,深度计必须接上外接电源!**
+ 打开上位机,如下图所示:
+ 若为新设备,设置波特率为19200(已经调试过的设备为115200)
+ 设置协议为串口通信ASCII协议
+ 点击打开串口
+ 尝试读取设备地址,当提示地址读取成功时,说明可以进行后续的设置流程,反之需要检查设备硬件连接。
+ 将设置波特率设置选择为`115200`,然后点击`设置波特率`。当输出栏出现**设置地址成功,重新上电有效**时,重新对深度计进行上电。
+ 设备重新上点后,设置串口通信波特率为`115200`,点击`打开串口`,然后点击->`读取数据`。可以看到此时数据接收栏出现数据,且左上角数据解析区有新的数据。此时深度计设置完毕。
#### 4.2.2 代码中纬度设置(海水作业环境必须设置)
设置采样纬度,是用来计算海水密度,从而换算深度计在某点水压下的深度的。
首先下载好代码,详见第`5`章:
##### 4.2.2.3 在线修改方式(联网状态下推荐)
```bash
# 确保已联网!!!!!
# 打开源代码
cd ~/WorkSpace/SCADA/
# 确保已联网!!!!!
# 删除已修改代码
rm ~/WorkSpace/SCADA/src/DT03D5_RS485/Read_DT03D5.py
# 确保已联网!!!!!
# 拉取最新代码
git pull
# 重启即可
```
##### 4.2.2.4 离线状态修改方式
```bash
nano ~/WorkSpace/SCADA/src/DT03D5_RS485/Read_DT03D5.py
# 找到第10行
# latitude = 0.0 # 海水的纬度,度点度
# 修改为作业纬度,单位是度点度
# 退出 ctrl+x -> 按 y 保存
# 修改完毕,重启即可
```
### 4.3 HWT9073-CAN协议IMU
#### 4.3.1 IMU的参数设置
下载上位机,[下载上位机点我](https://wit-motion.yuque.com/wumwnr/aqvq6y/qngktvx5grz81zkq)
+ 选择设备为HWT9703-CAN
+ 点选设备
+ 点击设置按钮
+ 算法选择六轴
+ 带宽选择256hz(以本要求为准)
+ 通信速率设置为250k(以本要求为准)
+ 回传速率设置为100hz(以本要求为准)
+ ~~勾选内容->时间(以本要求为准)~~(时间数据无用,勾掉即可)
+ 设置完毕,重启设备,并再次打开上位机的传感器配置页面,检查设置是否成功

## 5. 数据管理系统安装与维护
### 5.1 下载代码
```bash
cd ~/WorkSpace && git clone https://gitee.com/yoooola/SCADA.git
```
**日常维护**
```bash
# 查看状态
sudo systemctl status SCADA.service
# 开始采集服务
sudo systemctl start SCADA.service
# 停止采集服务
sudo systemctl stop SCADA.service
# 重启服务
sudo systemctl restart SCADA.service
# 查看日志
cat /home/pi/workspace/SCADA/log/SCADA_service.log
cat /home/pi/workspace/SCADA/log/SCADA_service_error.log
```
**设置开机自启动功能**
```bash
# 开启开机自启服务
sudo systemctl enable /home/pi/WorkSpace/SCADA/SCADA.service
sudo systemctl daemon-reload
# 关闭开机自启动服务
sudo systemctl disable /home/pi/WorkSpace/SCADA/SCADA.service
sudo systemctl daemon-reload
# 查看是否开机自启动
sudo systemctl is-enabled SCADA.service
```
### 5.2 温控风扇
**说明**:该功能来自[GITHUB开源示例库(迁移至gitee)](https://gitee.com/yoooola/RaspberryPi_CPU_PWM)
**日常维护**
```bash
# 查看风扇日志
cat /var/log/cpu-fan/cpu-fan.log
# 设置风扇启动最低温度、全速温度、关闭温度
nano ~/.cpu-fan.conf
# 重启风扇服务
sudo service cpu-fan restart
# 编辑风扇程序
sudo nano /usr/bin/cpu-fan
```
**删除调速风扇功能**
```bash
# 卸载风扇程序
cd /home/pi/workspace/SCADA/src/Fans/
sudo ./uninstall.sh
```
**安装调速风扇功能**
```bash
# 下载最新C版本的wiringpi安装包
cd ~/WorkSpace && wget https://project-downloads.drogon.net/wiringpi-latest.deb
# 安装wiringpi
sudo dpkg -i wiringpi-latest.deb
# 进入调速风扇代码目录
cd ~/WorkSpace/SCADA/src/Fans
# 给于应用程序权限
chmod +x install.sh
chmod +x uninstall.sh
chmod +x cpu-fan.sh
# 安装调速风扇功能
sudo ./install.sh
# 设置开机自启动
sudo systemctl enable /home/pi/WorkSpace/SCADA/src/Fans/fan.service
# 查看风扇状态
sudo systemctl status fan.service
# 设置风扇启动
sudo systemctl start fan.service
# 设置风扇关闭
sudo systemctl stop fan.service
```
### 5.3 状态指示灯闪烁含义
**注意:状态指示灯只能同时指示`一个`设备状态!!!**
状态指示灯只能指示一个设备状态,当同时检测到多个设备异常时,只显示一个设备异常!!!
**系统启动时**
指示灯闪烁三次,然后熄灭,此时设备进入初始化功能
异常情况:
+ 指示灯未闪烁,请检查指示灯连接情况,或检查系统是否设置开机自启动,能否手动启动
**设备初始化及设备运行时**
设备初始化开始,本系统会对IMU和进行自检,自检设备无异常,指示灯常量
指示灯闪烁,以5s为周期,前2s闪烁几次是哪个设备(IMU为1,深度计为2),后1.5s闪烁几次是什么异常
5s内,闪烁频次为(长1次 + 短1次),即设备1(IMU),错误代码为1
错误代码:
+ 01 - 初始化中串口丢失,检查设备是否连接,两个USB设备的设备号是否接错
+ 02 - 设备运行中串口丢失,检查设备是否有松动
+ 10 - 未知错误
**系统正常运行**
指示灯长亮,无闪烁
## 6. 常见问题
### 1. 深度传感器MS5837无数据、提示"Error: conn't open I/O ....."
```txt
1.确保RS485和RS232的设备供电为单独供电,不能直接接在树莓派上。最好做好电源隔离和IO隔离;
2.确保IIC的线长低于30cm,10-20cm较为合适;
3.检查MS5837的供电为3.3-3.6V,可以在vcc和gnd之间并联一个电容10-100uf之间即可。
```
### 2. 调速风扇时而转时而不转
```txt
1.调速风扇是温控的,温度较低的时候可能会不转,如果需要可以设置风扇启动的最低温度为33000(33℃),关闭温度为30000(30℃),或者其他参数。
```
### 3. 内存泄漏
```bash
# 出现以下内存泄漏,没办法,我也不知道咋处理。重启就能重新分配内存了。所以无视他就好了
/usr/lib/python3.9/multiprocessing/resource_tracker.py:216: UserWarning: resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown
warnings.warn('resource_tracker: There appear to be %d '
```
## 7. 备用代码
[姿态传感器计算位移并作示意图代码](https://github.com/xioTechnologies/Gait-Tracking)
## 8. 树莓派的系统迁移及备份问题
最好新作系统,不要迁移!!!
### ~~8.1 系统备份及迁移~~
~~**请保证原始系统和待迁移系统SD卡大小相同!**~~
~~**请使用软件Etcher,[点我->~~](https://etcher.balena.io/)**
### 8.2 系统域名设置
```bash
sudo raspi-config
# 选择1 -> System Options
# 选择S4 -> HostName
# 输入 pi02
# 回车确认
# 重启
```