8 Commits

Author SHA1 Message Date
xin
030381aa5c 任立新 修改该温控系统的逻辑 2025-05-08 13:52:21 +08:00
xin
455013fa07 Merge remote-tracking branch 'origin/master' 2025-05-08 13:26:39 +08:00
xin
3275a1abd6 任立新 修改该温控系统的逻辑 2025-05-08 13:25:48 +08:00
45e9592718 deb pack script accept version number 2025-04-28 10:15:59 +08:00
776769c206 tc: add deb pack script. 2025-04-28 09:24:06 +08:00
xin
dcba7db121 任立新 恢复cmake 2025-04-14 14:25:33 +08:00
xin
e68eed4f56 任立新 温控系统1 2025-04-03 13:30:36 +08:00
xin
d5a8175aba 任立新 温控系统 2025-04-03 13:29:08 +08:00
15 changed files with 575 additions and 38 deletions

1
.gitignore vendored
View File

@ -23,3 +23,4 @@
/othersoft/calibration_console/cmake-build-debug/ /othersoft/calibration_console/cmake-build-debug/
/othersoft/TemperatureControler/project/cmake-build-debug-towersif/ /othersoft/TemperatureControler/project/cmake-build-debug-towersif/
/othersoft/TemperatureControler/project/cmake-build-debug-towersif/ /othersoft/TemperatureControler/project/cmake-build-debug-towersif/
/DEB/

42
CMakeLists.txt Normal file
View File

@ -0,0 +1,42 @@
cmake_minimum_required(VERSION 3.3)
project(TowerOptoSifAndSpectral)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(QT Core Network WebSockets SerialPort Widgets)
set(CMAKE_CXX_STANDARD 14)
find_package(Qt5 REQUIRED ${QT})
file(GLOB_RECURSE HDR_LIST "source/*.h")
file(GLOB_RECURSE SRC_LIST "source/*.cpp")
include_directories("source")
include_directories("source/FS")
include_directories("source/Logger")
include_directories("source/ZZ_SDK")
include_directories("source/Settings")
include_directories("source/CaptureThread")
include_directories("source/LinearShutter")
include_directories("source/OSIF/include")
include_directories("source/Misc_Detector")
include_directories("source/Uploader")
link_directories("source/OSIF/DLib")
link_directories("/home/pi/SeaBrease/lib")
add_executable( TowerOptoSifAndSpectral
main.cpp
${HDR_LIST}
${SRC_LIST}
)
IF (WIN32)
target_link_libraries(TowerOptoSifAndSpectral SeaBreeze)
ELSE ()
target_link_libraries(TowerOptoSifAndSpectral seabreeze usb stdc++ m)
ENDIF ()
qt5_use_modules(TowerOptoSifAndSpectral ${QT})
set_target_properties(TowerOptoSifAndSpectral PROPERTIES AUTOMOC ON)

42
deb_pack.sh Executable file
View File

@ -0,0 +1,42 @@
#!/bin/bash
# 检查是否提供了版本号参数
#if [ $# -eq 0 ]; then
# echo "错误:请提供版本号参数"
# echo "用法: $0 <版本号>"
# exit 1
#fi
VERSION=2.1
sh install.sh
thispwd=$(pwd)
#cd /home/pi/
DebDirectory=DebpackTowerSif
mkdir $DebDirectory
cd $DebDirectory/
mkdir -p ./home/pi/bin
cd home/pi/bin/
cp /home/pi/bin/* .
cd ../../..
mkdir DEBIAN
cd DEBIAN
echo "Package: TowerSif
Version: $VERSION
Architecture: armhf
Maintainer: rlx, tc
Description: test" > control
#cd /home/pi/
cd $thispwd
sudo dpkg -b $DebDirectory TowerSif_V${VERSION}.deb
mkdir -p DEB
cp TowerSif_V${VERSION}.deb DEB/
rm -r $DebDirectory
#sudo dpkg -r TowerSif

View File

@ -0,0 +1,6 @@
mkdir -p build
cd build
cmake ../
make -j4
cd ../othersoft
sh install.sh

View File

@ -10,6 +10,7 @@ include_directories("../src/json")
include_directories("../src/TimeWorker") include_directories("../src/TimeWorker")
include_directories("../src/Temperature") include_directories("../src/Temperature")
include_directories("../src/controler") include_directories("../src/controler")
include_directories("../src/sunfunction")
set(CMAKE_MOC_VERBOSE TRUE) set(CMAKE_MOC_VERBOSE TRUE)
add_executable(TemperatureControler add_executable(TemperatureControler
tempmain.cpp tempmain.cpp
@ -18,6 +19,7 @@ add_executable(TemperatureControler
../src/Temperature/TemperaTureWoker.cpp ../src/Temperature/TemperaTureWoker.cpp
../src/Temperature/TG_Manager.cpp ../src/Temperature/TG_Manager.cpp
../src/Temperature/TemperatureRegulator.cpp ../src/Temperature/TemperatureRegulator.cpp
../src/sunfunction/sunupanddown.cpp
) )

View File

@ -9,23 +9,29 @@
"BaudRate": 115200, "BaudRate": 115200,
"Pin": { "Pin": {
"TG": { "TG": {
"Pin_H": 7, "Pin_H": 2,
"Pin_L": 10 "Pin_L": 3
}, },
"Fan": { "Fan": {
"Pin": 11 "Pin": 10
}, },
"HOT": { "HOT": {
"Pin": 12 "Pin": 7
} }
}, },
"Constant_Temperature": { "Constant_Temperature": {
"MaxTemp": 35, "CoolBegin_Temp_Insight": 20,
"MinTemp": 30 "CoolBegin_Diff_Temp": 5,
"HeatingBegin_Temp_Insight": 0,
"IsCoolInDaylight": false
}, },
"Temperature": { "Location": {
"index_x": 0, "latitude": 0,
"index_y": 0 "longitude": 0
},
"IndexInfo": {
"Insight": [{"x":7,"y":1},{"x":8,"y":1}],
"Outside": [{"x":1,"y":1},{"x":2,"y":1}]
} }
} }

View File

@ -10,6 +10,7 @@ void TG_Manager::SetPin(int pin1_H, int pin1_L, int pin2_H, int pin2_L)
this->pin1_L = pin1_L; this->pin1_L = pin1_L;
this->pin2_H = pin2_H; this->pin2_H = pin2_H;
this->pin2_L = pin2_L; this->pin2_L = pin2_L;
InitManger();
} }
bool TG_Manager::SetTuiGan(int IS_High) bool TG_Manager::SetTuiGan(int IS_High)

View File

@ -4,33 +4,40 @@
#include "TemperatureRegulator.h" #include "TemperatureRegulator.h"
#include "logout.h" #include "logout.h"
#include "sunupanddown.h"
TemperatureRegulator *g_tempretureRegulator; TemperatureRegulator *g_tempretureRegulator;
TemperatureRegulator::TemperatureRegulator(){ TemperatureRegulator::TemperatureRegulator(){
g_tempretureRegulator=this; g_tempretureRegulator=this;
} }
/* /*
"PortName": "ttyS2", "PortName": "ttyS2",
"BaudRate": 115200, "BaudRate": 115200,
"Pin": { "Pin": {
"TG": { "TG": {
"Pin_H": 7, "Pin_H": 2,
"Pin_L": 10 "Pin_L": 3
}, },
"Fan": { "Fan": {
"Pin": 11 "Pin": 10
}, },
"HOT": { "HOT": {
"Pin": 12 "Pin": 7
} }
}, },
"Constant_Temperature": { "Constant_Temperature": {
"MaxTemp": 30, "CoolBegin_Temp_Insight": 20,
"MinTemp": 0 "CoolBegin_Diff_Temp": 5,
"HeatingBegin_Temp_Insight": 0,
"IsCoolInDaylight": false
}, },
"Temperature": { "Location": {
"index_x": 0, "latitude": 0,
"index_y": 0, "longitude": 0
},
"IndexInfo": {
"Insight": [{"x":7,"y":1},{"x":8,"y":1}],
"Outside": [{"x":1,"y":1},{"x":2,"y":1}]
} }
**/ **/
@ -73,23 +80,53 @@ void TemperatureRegulator::setconfig(json jconfig) {
m_TG_Manager=new TG_Manager(); m_TG_Manager=new TG_Manager();
m_TG_Manager->SetPin(pin1_H,pin1_L,pin2_H,pin2_L); m_TG_Manager->SetPin(pin1_H,pin1_L,pin2_H,pin2_L);
if (jconfig.contains("Constant_Temperature")) { if (jconfig.contains("Constant_Temperature")) {
if (jconfig["Constant_Temperature"].contains("MaxTemp")) { if (jconfig["Constant_Temperature"].contains("CoolBegin_Temp_Insight")) {
M_Targert_Max_Tempreature=jconfig["Constant_Temperature"]["MaxTemp"]; m_CoolBegin_Temp_Insight=jconfig["Constant_Temperature"]["CoolBegin_Temp_Insight"];
} }
if (jconfig["Constant_Temperature"].contains("MinTemp")) { if (jconfig["Constant_Temperature"].contains("CoolBegin_Diff_Temp")) {
M_Targert_Min_Tempreature=jconfig["Constant_Temperature"]["MinTemp"]; m_CoolBegin_Diff_Temp=jconfig["Constant_Temperature"]["CoolBegin_Diff_Temp"];
}
if (jconfig["Constant_Temperature"].contains("HeatingBegin_Temp_Insight")) {
m_HeatingBegin_Temp_Insight=jconfig["Constant_Temperature"]["HeatingBegin_Temp_Insight"];
}
if (jconfig["Constant_Temperature"].contains("IsCoolInDaylight")) {
m_IsCoolInDaylight=jconfig["Constant_Temperature"]["IsCoolInDaylight"].get<bool>();
} }
} }
if (jconfig.contains("Temperature")) {
if (jconfig["Temperature"].contains("index_x")) {
m_target_index=jconfig["Temperature"]["index_x"];
if (jconfig.contains("Location")) {
if (jconfig["Location"].contains("latitude")) {
m_Latitude=jconfig["Location"]["latitude"];
} }
if (jconfig["Temperature"].contains("index_y")) { if (jconfig["Location"].contains("longitude")) {
m_target_indey=jconfig["Temperature"]["index_y"]; m_Longitude=jconfig["Location"]["longitude"];
} }
} }
if (jconfig.contains("IndexInfo")) {
if (jconfig["IndexInfo"].contains("Insight")) {
for (int i = 0; i < jconfig["IndexInfo"]["Insight"].size(); ++i) {
int x=jconfig["IndexInfo"]["Insight"][i]["x"];
int y=jconfig["IndexInfo"]["Insight"][i]["y"];
addTargetIndex(x,y,INSIGHT_TEMPERATURE);
}
}
if (jconfig["IndexInfo"].contains("Outside")) {
for (int i = 0; i < jconfig["IndexInfo"]["Outside"].size(); ++i) {
int x=jconfig["IndexInfo"]["Outside"][i]["x"];
int y=jconfig["IndexInfo"]["Outside"][i]["y"];
addTargetIndex(x,y,OUTSIGHT_TEMPERATURE);
}
}
}
isinit=true; isinit=true;
@ -102,16 +139,198 @@ void TemperatureRegulator::setconfig(json jconfig) {
void TemperatureRegulator::SetTartGetX_Y(int x,int y){ void TemperatureRegulator::SetTartGetX_Y(int x,int y){
m_target_index=x; m_target_index=x;
m_target_indey=y; m_target_indey=y;
} }
void TemperatureRegulator::addTargetIndex(int x, int y,int Data_type) {
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
if (x<0||y<0) {
logout("TemperatureRegulator","addTargetIndex error little than 0",6);
return;
}
if (x>7||y>7) {
logout("TemperatureRegulator","addTargetIndex error Big",6);
return;
}
switch (Data_type) {
case INSIGHT_TEMPERATURE: {
m_target_index_of_insight.push_back({x-1,y-1});
break;
}
case OUTSIGHT_TEMPERATURE: {
m_target_index_of_outsight.push_back({x-1,y-1});
break;
}
default: {
break;
}
}
}
float TemperatureRegulator::GetMax_of_Vector(int Data_type) {
switch (Data_type) {
case INSIGHT_TEMPERATURE: {
float max=0;
for (int i = 0; i < m_target_index_of_insight.size(); ++i) {
int x=m_target_index_of_insight[i].x;
int y=m_target_index_of_insight[i].y;
if (m_TemperaTureWoker->m_Tempreaturegroups[y].tempera[x]>max) {
max=m_TemperaTureWoker->m_Tempreaturegroups[y].tempera[x];
}
}
return max;
}
case OUTSIGHT_TEMPERATURE: {
float max=0;
for (int i = 0; i < m_target_index_of_outsight.size(); ++i) {
int x=m_target_index_of_outsight[i].x;
int y=m_target_index_of_outsight[i].y;
if (m_TemperaTureWoker->m_Tempreaturegroups[y].tempera[x]>max) {
max=m_TemperaTureWoker->m_Tempreaturegroups[y].tempera[x];
}
}
return max;
}
default: {
return 0;
}
}
}
float TemperatureRegulator::GetMin_of_Vector(int Data_type) {
switch (Data_type) {
case INSIGHT_TEMPERATURE: {
float min=100;
for (int i = 0; i < m_target_index_of_insight.size(); ++i) {
int x=m_target_index_of_insight[i].x;
int y=m_target_index_of_insight[i].y;
if (m_TemperaTureWoker->m_Tempreaturegroups[y].tempera[x]<min) {
min=m_TemperaTureWoker->m_Tempreaturegroups[y].tempera[x];
}
}
return min;
}
case OUTSIGHT_TEMPERATURE: {
float min=100;
for (int i = 0; i < m_target_index_of_outsight.size(); ++i) {
int x=m_target_index_of_outsight[i].x;
int y=m_target_index_of_outsight[i].y;
if (m_TemperaTureWoker->m_Tempreaturegroups[y].tempera[x]<min) {
min=m_TemperaTureWoker->m_Tempreaturegroups[y].tempera[x];
}
}
return min;
}
default: {
return 0;
}
}
}
void TemperatureRegulator::init(){ void TemperatureRegulator::init(){
}
void TemperatureRegulator::PanduanCooling() {
} }
void TemperatureRegulator::loop(){ void TemperatureRegulator::loop(){
if (!isinit) return; if (!isinit) return;
m_TemperaTureWoker->ReadTempreature(); m_TemperaTureWoker->ReadTempreature();
// todo <20><>savedata<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼temperature
QDateTime currentTime=QDateTime::currentDateTime();
int year=currentTime.date().year();
int month=currentTime.date().month();
int day=currentTime.date().day();
int nowhour=currentTime.time().hour();
int nowminute=currentTime.time().minute();
long nowminuteofday=nowhour*60+nowminute;
SunInfo sunInfo=calculateSunriseSunset(year,month,day,m_Latitude,m_Longitude);
float sunrise_minte=sunInfo.sunrise_h*60+sunInfo.sunrise_m;
float sunset_minte=sunInfo.sunset_h*60+sunInfo.sunset_m;
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>죨ǰ<ECA3A8><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (nowminuteofday>sunrise_minte+15&&nowminuteofday<sunset_minte-15) //<2F><><EFBFBD><EFBFBD>
{
if (m_IsCoolInDaylight) {
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>m_CoolBegin_Diff_Temp <20>ҵ<EFBFBD>ǰinsight<68>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD><E8B6A8>ʼֵ <20><><EFBFBD>Կ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
//<2F><>һ<EFBFBD><D2BB> <20><>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float maxinsighttemp=GetMax_of_Vector(INSIGHT_TEMPERATURE);
//<2F>ڶ<EFBFBD><DAB6><EFBFBD> <20><>ȡ<EFBFBD>ⲿ<EFBFBD><E2B2BF>С<EFBFBD><EFBFBD>
float minoutsighttemp=GetMin_of_Vector(OUTSIGHT_TEMPERATURE);
// <20><><EFBFBD><EFBFBD>diff
float diff=maxinsighttemp-minoutsighttemp;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>ֵ
if (diff>m_CoolBegin_Diff_Temp) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰinsight<68>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD><E8B6A8>ʼֵ
if (maxinsighttemp>m_CoolBegin_Temp_Insight) {
m_TG_Manager->Cooling();
logout("Temp","current max insight temp is "+QString::number(maxinsighttemp),6);
} else {
m_TG_Manager->Stop();
logout("Temp","current max insight temp is "+QString::number(maxinsighttemp),6);
}
} else {
m_TG_Manager->Stop();
logout("Temp","current diff is "+QString::number(diff),6);
}
}
//<2F><><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>¶ȸ<C2B6><C8B8>ڿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ƴ<EFBFBD>
if (m_CoolBegin_Temp_Insight<m_HeatingBegin_Temp_Insight)
{
logout("Temp","CoolBegin_Temp_Insight is less than HeatingBegin_Temp_Insight",6);
return;
}
//<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>¶ȵ<C2B6><C8B5><EFBFBD>m_HeatingBeginTemp_Insight <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
//<2F><>һ<EFBFBD><D2BB> <20><>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>С<EFBFBD><EFBFBD>
float mininsighttemp=GetMin_of_Vector(INSIGHT_TEMPERATURE);
//<2F>ڶ<EFBFBD><DAB6><EFBFBD> <20><>m_HeatingBeginTemp_Insight<68>Ƚ<EFBFBD>
if (mininsighttemp<m_HeatingBegin_Temp_Insight)
{
m_TG_Manager->Heating();
logout("Temp","current min insight temp is "+QString::number(mininsighttemp),6);
}
else
{
m_TG_Manager->Stop();
logout("Temp","current min insight temp is "+QString::number(mininsighttemp),6);
}
}
else //ҹ<><D2B9>
{
//ҹ<><D2B9>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD> <20><>ֻҪ<D6BB>ⲿ<EFBFBD>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>¶ȼ<C2B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
//<2F><>һ<EFBFBD><D2BB> <20><>ȡ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float maxinsighttemp=GetMax_of_Vector(INSIGHT_TEMPERATURE);
//<2F>ڶ<EFBFBD><DAB6><EFBFBD> <20><>ȡ<EFBFBD>ⲿ<EFBFBD><E2B2BF>С<EFBFBD><EFBFBD>
float minoutsighttemp=GetMin_of_Vector(OUTSIGHT_TEMPERATURE);
// <20><><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>
if (maxinsighttemp>minoutsighttemp)
{
m_TG_Manager->Cooling();
logout("Temp","current max insight temp is "+QString::number(maxinsighttemp),6);
}
else
{
m_TG_Manager->Stop();
logout("Temp","current max insight temp is "+QString::number(maxinsighttemp),6);
}
}
return;
float tempreture=m_TemperaTureWoker->m_Tempreaturegroups[m_target_index].tempera[m_target_indey]; float tempreture=m_TemperaTureWoker->m_Tempreaturegroups[m_target_index].tempera[m_target_indey];
//printf("current tempreture is %f\n",tempreture); //printf("current tempreture is %f\n",tempreture);
logout("Temp","current tempreture is "+QString::number(tempreture),6); logout("Temp","current tempreture is "+QString::number(tempreture),6);
@ -135,3 +354,5 @@ void TemperatureRegulator::loop(){
bool TemperatureRegulator::looptask() { bool TemperatureRegulator::looptask() {
g_tempretureRegulator->loop(); g_tempretureRegulator->loop();
} }

View File

@ -7,16 +7,57 @@
#include "TG_Manager.h" #include "TG_Manager.h"
#include "TemperaTureWoker.h" #include "TemperaTureWoker.h"
#include "QObject" #include "QObject"
#include "vector"
#define INSIGHT_TEMPERATURE 0
#define OUTSIGHT_TEMPERATURE 1
/*
* "PortName": "ttyS2",
"BaudRate": 115200,
"Pin": {
"TG": {
"Pin_H": 2,
"Pin_L": 3
},
"Fan": {
"Pin": 10
},
"HOT": {
"Pin": 7
}
},
"Constant_Temperature": {
"CoolBegin_Temp_Insight": 20,
"CoolBegin_Diff_Temp": 5,
"HeatingBegin_Temp_Insight": 0,
"IsCoolInDaylight": false
},
"Location": {
"latitude": 0,
"longitude": 0
},
"IndexInfo": {
"Insight": [{"x":7,"y":1},{"x":8,"y":1}],
"Outside": [{"x":1,"y":1},{"x":2,"y":1}]
}
**/
struct indexofdata
{
int x;
int y;
};
class TemperatureRegulator :public QObject { class TemperatureRegulator :public QObject {
Q_OBJECT Q_OBJECT
public: public:
TemperatureRegulator(); TemperatureRegulator();
void setconfig(json j); void setconfig(json j);
void SetTartGetX_Y(int x,int y); void SetTartGetX_Y(int x,int y);
void addTargetIndex(int x,int y,int Data_type=INSIGHT_TEMPERATURE);
float GetMax_of_Vector(int Data_type=INSIGHT_TEMPERATURE);
float GetMin_of_Vector(int Data_type=INSIGHT_TEMPERATURE);
void init(); void init();
void loop(); void loop();
static bool looptask(); static bool looptask();
void PanduanCooling();
@ -25,9 +66,17 @@ private:
TG_Manager *m_TG_Manager; TG_Manager *m_TG_Manager;
float M_Targert_Max_Tempreature=35; float M_Targert_Max_Tempreature=35;
float M_Targert_Min_Tempreature=25; float M_Targert_Min_Tempreature=25;
float m_CoolBegin_Temp_Insight=20;
float m_CoolBegin_Diff_Temp=5;
float m_HeatingBegin_Temp_Insight=0;
bool m_IsCoolInDaylight=false;
int m_target_index=0; int m_target_index=0;
std::vector<indexofdata> m_target_index_of_insight;
std::vector<indexofdata> m_target_index_of_outsight;
int m_target_indey=0; int m_target_indey=0;
bool isinit=false; bool isinit=false;
float m_Latitude=39.9;
float m_Longitude=116.4;
}; };

View File

@ -115,3 +115,29 @@ void writelogtofile(QString sender,QString qstr)
fprintf(file,"%s %s: %s\n",currentTime.toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString().c_str(),sender.toStdString().c_str(),qstr.toStdString().c_str()); fprintf(file,"%s %s: %s\n",currentTime.toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString().c_str(),sender.toStdString().c_str(),qstr.toStdString().c_str());
fflush(file); fflush(file);
} }
void saveData(QString sender,QString qstr)
{
QDateTime currentTime = QDateTime::currentDateTime();
QString datestr=currentTime.toString("yyyy_MM_dd");
if (lastdatestr!=datestr)
{
if (file!=NULL)
{
fclose(file);
file=NULL;
}
lastdatestr=datestr;
}
if (file==NULL)
{
QString path="/home/iris/TempData/"+currentTime.toString("yyyy_MM_dd")+".csv";
system("mkdir -p /home/iris/TempData");
file=fopen(path.toStdString().c_str(),"a+");
fprintf(file,QString::fromLocal8Bit("日期, 数据类型, 日期~n").toStdString().c_str());
}
fprintf(file,"%s,%s,%s\n",currentTime.toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString().c_str(),sender.toStdString().c_str(),qstr.toStdString().c_str());
fflush(file);
}

View File

@ -20,12 +20,30 @@ void logout(T str)
#endif #endif
} }
template <typename T>
void saveDataToFile(QString typeofdata,T str) {
const std::string red("\033[0;31m");
const std::string green("\033[0;32m");
const std::string yellow("\033[0;33m");
const std::string blue("\033[0;34m");
const std::string magenta("\033[0;35m");
const std::string cyan("\033[0;36m");
const std::string reset("\033[0m");
QString qstr11=QString(str);
QDateTime currentTime = QDateTime::currentDateTime();
std::cout<<green<<currentTime.toString("yyyy-MM-dd hh:mm:ss.zzz").toStdString()<<" "<<magenta<<typeofdata.toStdString()<<reset<<": "<<qstr11.toStdString()<<std::endl<<std::flush;
QString qstr=QString(str);
writelogtofile(typeofdata,str);
}
template <typename T> template <typename T>
void logout(QString sender,T str,int level = 5) void logout(QString sender,T str,int level = 5)
{ {
const std::string red("\033[0;31m"); const std::string red("\033[0;31m");
const std::string green("\033[0;32m"); const std::string green("\033[0;32m");
const std::string yellow("\033[0;33m"); const std::string yellow("\033[0;33m");
@ -35,6 +53,8 @@ void logout(QString sender,T str,int level = 5)
const std::string reset("\033[0m"); const std::string reset("\033[0m");
QString qstr11=QString(str); QString qstr11=QString(str);
// Log(qstr,3); // Log(qstr,3);
QDateTime currentTime = QDateTime::currentDateTime(); QDateTime currentTime = QDateTime::currentDateTime();

View File

@ -0,0 +1,99 @@
//
// Created by xin on 25-5-8.
//
#include "sunupanddown.h"
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int dayOfYear(int year, int month, int day) {
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeapYear(year)) {
days[2] = 29;
}
int sum = day;
for (int i = 1; i < month; ++i) {
sum += days[i];
}
return sum;
}
void calculateSunriseSunset(int year, int month, int day, double latitude, double longitude,
double &sunrise, double &sunset, bool &hasSunlight) {
int n = dayOfYear(year, month, day);
// <20><><EFBFBD><EFBFBD>̫<EFBFBD><CCAB><EFBFBD><EFBFBD>γ<EFBFBD><CEB3><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ȣ<EFBFBD>
double delta_deg = 23.44 * sin(2 * M_PI * (284.0 + n) / 365.0);
double delta_rad = delta_deg * M_PI / 180.0;
// <20>ճ<EFBFBD><D5B3><EFBFBD><EFBFBD><EFBFBD>ʱ̫<CAB1><CCAB><EFBFBD>߶Ƚǣ<C8BD><C7A3><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double h0_deg = -0.833;
double h0_rad = h0_deg * M_PI / 180.0;
// γ<><CEB3>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
double phi_rad = latitude * M_PI / 180.0;
double sin_phi = sin(phi_rad);
double cos_phi = cos(phi_rad);
double sin_delta = sin(delta_rad);
double cos_delta = cos(delta_rad);
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>ֵ
double numerator = sin(h0_rad) - sin_phi * sin_delta;
double denominator = cos_phi * cos_delta;
if (denominator == 0) {
hasSunlight = false;
return;
}
double cos_omega = numerator / denominator;
if (cos_omega < -1.0 || cos_omega > 1.0) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҹ
hasSunlight = false;
return;
}
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>Dz<EFBFBD>ת<EFBFBD><D7AA>ΪСʱ
double omega_rad = acos(cos_omega);
double omega_deg = omega_rad * 180.0 / M_PI;
double omega_hours = omega_deg / 15.0;
// <20>ط<EFBFBD>ʱ<EFBFBD>ճ<EFBFBD><D5B3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
double sunrise_local = 12.0 - omega_hours;
double sunset_local = 12.0 + omega_hours;
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double timezone_h = round(longitude / 15.0);
double timezone_lon = timezone_h * 15.0;
double time_diff = (longitude - timezone_lon) / 15.0; // Сʱ
// ת<><D7AA>Ϊ<EFBFBD><CEAA>׼ʱ<D7BC><CAB1>
sunrise = sunrise_local - time_diff;
sunset = sunset_local - time_diff;
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sunrise = fmod(sunrise + 24.0, 24.0);
sunset = fmod(sunset + 24.0, 24.0);
hasSunlight = true;
}
SunInfo calculateSunriseSunset(int year, int month, int day, double latitude, double longitude){
SunInfo sunInfo;
double sunrise, sunset;
bool hasSunlight;
calculateSunriseSunset(year, month, day, latitude, longitude, sunrise, sunset, hasSunlight);
sunInfo.sunrise_h = floor(sunrise);
sunInfo.sunrise_m = (sunrise - sunInfo.sunrise_h) * 60;
sunInfo.sunset_h = floor(sunset);
sunInfo.sunset_m = (sunset - sunInfo.sunset_h) * 60;
sunInfo.hasSunlight = hasSunlight;
return sunInfo;
}

View File

@ -0,0 +1,22 @@
//
// Created by xin on 25-5-8.
//
#ifndef SUNUPANDDOWN_H
#define SUNUPANDDOWN_H
struct SunInfo {
double sunrise_h; // <20>ճ<EFBFBD>ʱ<EFBFBD>Сʱ<D0A1><CAB1>
double sunrise_m; // <20>ճ<EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>ӣ<EFBFBD>
double sunset_h; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>Сʱ<D0A1><CAB1>
double sunset_m; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3A8><EFBFBD>ӣ<EFBFBD>
bool hasSunlight; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
SunInfo calculateSunriseSunset(int year, int month, int day, double latitude, double longitude);
void calculateSunriseSunset(int year, int month, int day, double latitude, double longitude,
double &sunrise, double &sunset, bool &hasSunlight);
#endif //SUNUPANDDOWN_H

View File

@ -1,7 +1,7 @@
mkdir build mkdir build
cd build cd build
mkdir movingliner mkdir -p movingliner
cd movingliner cd movingliner
cmake ../../movingliner cmake ../../movingliner
make -j4 make -j4
@ -11,14 +11,14 @@ echo beging build shuttercali
cd ../ cd ../
mkdir shuttercali mkdir -p shuttercali
cd shuttercali cd shuttercali
cmake ../../shuttercali/project/LocationCali cmake ../../shuttercali/project/LocationCali
make -j4 make -j4
cp ./shutter_calibrate /home/pi/bin cp ./shutter_calibrate /home/pi/bin
cd ../ cd ../
mkdir TemperatureControler mkdir -p TemperatureControler
cd TemperatureControler cd TemperatureControler
cmake ../../TemperatureControler/project cmake ../../TemperatureControler/project
make -j4 make -j4
@ -27,7 +27,7 @@ mkdir -p /home/data/Setting
cp ../../TemperatureControler/Constant_Temperature_Config.json /home/data/Setting cp ../../TemperatureControler/Constant_Temperature_Config.json /home/data/Setting
cd ../ cd ../
mkdir console mkdir -p console
cd console cd console
cmake ../../calibration_console cmake ../../calibration_console
make -j4 make -j4
@ -44,7 +44,7 @@ cd ../
cp ./root/Mywathdog.sh /root cp ./root/Mywathdog.sh /root
cp ./root/start.sh /root cp ./root/start.sh /root
chmod +x /root/start.sh chmod +x /root/start.sh
mkdir /home/data mkdir -p /home/data
cd ../ cd ../
rm -rf ./TowerOptoSifAndSpectral rm -rf ./TowerOptoSifAndSpectral
cd /root/filebrew cd /root/filebrew

View File

@ -6,5 +6,5 @@ chmod +x /root/ffwatch.sh
mount /dev/mmcblk1p1 /home/data/ mount /dev/mmcblk1p1 /home/data/
chmod +x /root/Mywathdog.sh chmod +x /root/Mywathdog.sh
bash /root/Mywathdog.sh & bash /root/Mywathdog.sh &
/home/pi/bin/TemperatureControler & /home/pi/bin/TemperatureControler > /root/templog.log &