Browse Source

v1.0

master
zhaohe 2 years ago
parent
commit
6957760d0c
  1. 82
      README.md
  2. 2
      iflytoplinuxsdk
  3. 0
      packet.sh
  4. 3
      src/configs/gconfig.hpp
  5. 8
      src/main.cpp
  6. 1
      src/main_control_service.cpp
  7. 8
      src/service/chinese_gb2312.cpp
  8. 19
      src/service/chinese_gb2312.hpp
  9. 67
      src/service/device_io_control_service.cpp
  10. 15
      src/service/device_io_control_service.hpp
  11. 21
      src/service/disinfection_ctl_service.cpp
  12. 2
      src/version.hpp

82
README.md

@ -2,84 +2,20 @@
# README
```
1. 输入rootiflytop9973可以进入超级用户
2. ws测试地址: ws://192.168.1.148:19000
ws测试地址: ws://192.168.8.10:19000
```
# 编译说明
```
修改点: (OK)
1. 用户等级分为3级别(后台不限制用户等级,前台限制用户操作)OK
2. iflytop9973属于admin的超级密码
3. 修改用户密码 OK
4. 登陆时给出提示,用户不存在,或者密码错误
消毒前,如果湿度太大,不允许消毒。
添加预设参数 OK
添加预设参数配置 OK
添加审计数据库接口 OK
添加审计 OK
通过getState可以获得到log,小数 OK
数据库操作加锁 OK
--------------------------------
记录用户操作 (TODO)
添加U盘数据导出
添加审计数据导出
排液自动停止
水禁传感器测试
磁盘管理(磁盘容量不足时,弹出提示,且停止记录数据)
./init.sh
./build.sh
```
# 测试指令
# 版本说明
```
sudo apt-get install sqlite3 libsqlite3-dev
sudo apt-get install sqlite3:arm64 libsqlite3-dev:arm64
sqlite可视化
sudo apt-get install sqlitebrowser
https://www.sqlite.org/docs.html
```
```
测试指令
```
```
1. 开始消毒后
```
```
液位测量压力传感器:
设备地址:01
量程:-1~4kPa
4 kPa=407.888 毫米水柱
传感器测量精度:0.407888 毫米水柱
```
```
1. 支持调速
2. 液体容量进行滤波
3. 打印日志去掉小数点
1. 加泵写死,速度不可修改,550g/min
2. 注射泵速率限制在30g/min
v1.0
1. 预热时间数值从配置文件获取
2. 支持打印机
3. 修改加热片等大功率设备,安全继电器打开延迟50ms->500ms
```

2
iflytoplinuxsdk

@ -1 +1 @@
Subproject commit 45bd079bb5f10f36ecfd610a0de0148cafc97bb5
Subproject commit f4e805b65fa639e80318356abf965d92418dcf48

0
packet.sh

3
src/configs/gconfig.hpp

@ -19,7 +19,8 @@
marco(string /* */, iflytopSubDeviceCanIFName, "can0") /*子设备Can设备名称*/ \
marco(int32_t /* */, iflytopSubDeviceCanBitrate, 500000) /*子设备Can设备波特率*/ \
marco(string /* */, pipettingRobotCanIFName, "can1") /*移液臂Can设备名称*/ \
marco(int32_t /* */, pipettingRobotCanBitrate, 500000) /*移液臂Can设备波特率*/
marco(int32_t /* */, pipettingRobotCanBitrate, 500000) /*移液臂Can设备波特率*/ \
marco(int32_t /* */, preHeatLastTimeS, 60) /*预热时间*/
configTemplateDEFILE_CONFIG_SERVICE2( //
GConfig, //

8
src/main.cpp

@ -3,6 +3,8 @@
#include <signal.h>
#include <sqlite3.h>
#include "iflytop/components/uart_printer/uart_printer.hpp"
using namespace iflytop;
using namespace core;
using namespace std;
@ -31,7 +33,7 @@ int Main::main(int argc, char *argv[]) {
* @brief
*/
string test_mode = "false";
auto cli = ((required("--test_mode") & value("test_mode", test_mode)).doc("test_mode"));
auto cli = ((required("--test_mode") & value("test_mode", test_mode)).doc("test_mode"));
if (!parse(argc, argv, cli)) {
test_mode = "false";
// cout << make_man_page(cli, argv[0]);
@ -58,6 +60,10 @@ int Main::main(int argc, char *argv[]) {
BUILD_AND_REG_SERRVICE(GConfig);
GET_SERVICE(GConfig)->initialize();
BUILD_AND_REG_SERRVICE(UartPrinter);
GET_SERVICE(UartPrinter)->initialize("/dev/ttyS5", "9600");
/**
* @brief
*/

1
src/main_control_service.cpp

@ -76,6 +76,7 @@ void MainControlService::initialize() {
GET_TO_SERVICE(m_deviceIoControlService);
m_deviceIoControlService->startScan();
m_deviceIoControlService->printerTest();
BUILD_AND_REG_SERRVICE(DataExportService);
GET_SERVICE(DataExportService)->initialize();

8
src/service/chinese_gb2312.cpp

@ -0,0 +1,8 @@
#include "chinese_gb2312.hpp"
using namespace iflytop;
using namespace std;
string ChineseGb2312::nihaozhongguo() {
return "你好中国";
}

19
src/service/chinese_gb2312.hpp

@ -0,0 +1,19 @@
#pragma once
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
namespace iflytop {
using namespace std;
class ChineseGb2312 {
public:
string nihaozhongguo();
};
} // namespace iflytop

67
src/service/device_io_control_service.cpp

@ -1,16 +1,24 @@
#include "device_io_control_service.hpp"
#include <iconv.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "chinese_gb2312.hpp"
#include "iflytop/components/uart_printer/uart_printer.hpp"
using namespace iflytop;
using namespace std;
#if 0
ID ID
- 3 PC2 0
- 3 PC3 1
- 3 PC4 2
- 3 PC5 3
- 3 PC6 4
- 3 PC7 5
ID ID
- 3 PC2 0
- 3 PC3 1
- 3 PC4 2
- 3 PC5 3
- 3 PC6 4
- 3 PC7 5
#endif
#define GPM_TO_SPEED(gpm) (gpm * 10)
@ -105,11 +113,11 @@ void DeviceIoControlService::airCompressor_setState(bool val) {
logger->info("airCompressor_setState:{}", val);
if (val) {
m_zcanHost->writeio(0, 1);
usleep(500 * 100);
usleep(500 * 1000);
m_zcanHost->writeio(1, 1);
} else {
m_zcanHost->writeio(1, 0);
usleep(500 * 100);
usleep(500 * 1000);
m_zcanHost->writeio(0, 0);
}
}
@ -122,11 +130,11 @@ int DeviceIoControlService::airBlower_setState(bool val) {
logger->info("airBlower_setState:{}", val);
if (val) {
m_zcanHost->writeio(2, 1);
usleep(500 * 100);
usleep(500 * 1000);
m_zcanHost->writeio(3, 1);
} else {
m_zcanHost->writeio(3, 0);
usleep(500 * 100);
usleep(500 * 1000);
m_zcanHost->writeio(2, 0);
}
return 0;
@ -141,11 +149,11 @@ void DeviceIoControlService::heartingPlate_setPower(bool val) {
logger->info("heartingPlate_setPower:{}", val);
if (val) {
m_zcanHost->writeio(4, 1);
usleep(500 * 100);
usleep(500 * 1000);
m_zcanHost->writeio(5, 1);
} else {
m_zcanHost->writeio(5, 0);
usleep(500 * 100);
usleep(500 * 1000);
m_zcanHost->writeio(4, 0);
}
}
@ -241,7 +249,7 @@ static int filter(int data) {
if (q.size() > 50) {
q.pop_front();
}
// 涓�€兼护娉�
// 中值滤波
int datacache[51];
int ndata = 0;
for (auto& var : q) {
@ -267,7 +275,7 @@ int DeviceIoControlService::getDisinfectantVolume_g() {
float kpa = m_pressure_sensor_data[1].value / 1000.0;
int g = 2.11 * kpa * 1000 * 1.3;
if (g < 450) { /*闆剁偣*/
if (g < 450) { /*零点*/
return 0;
} else {
g -= 450;
@ -296,10 +304,10 @@ int DeviceIoControlService::getWaterImmersionSensor2() {
DeviceIoControlService::h2o2sensor_data_t DeviceIoControlService::getH2O2SenSorData1() {
lock_guard<recursive_mutex> lock(lock_);
DeviceIoControlService::h2o2sensor_data_t data;
// int16_t hydrogen_peroxide_volume; // ppm 0x0100 杩囨哀鍖栨阿娴撳害
// int16_t h2o_h2o2_rs; // %RS * 100 0x0101 杩囨哀鍖栨阿鐩稿�楗卞拰搴�
// int16_t temperature1; // 掳C * 100 0x0102 娓╁害
// int16_t relative_humidity; // %RH * 100 0x0103 鐩稿�婀垮害
// int16_t hydrogen_peroxide_volume; // ppm 0x0100 过氧化氢浓度
// int16_t h2o_h2o2_rs; // %RS * 100 0x0101 过氧化氢相对饱和度
// int16_t temperature1; // °C * 100 0x0102 温度
// int16_t relative_humidity; // %RH * 100 0x0103 相对湿度
data.h2o2 = m_hpp272_data_1.hydrogen_peroxide_volume;
data.humid = m_hpp272_data_1.relative_humidity / 100;
data.temp = m_hpp272_data_1.temperature1 / 100;
@ -307,7 +315,7 @@ DeviceIoControlService::h2o2sensor_data_t DeviceIoControlService::getH2O2SenSorD
/**
* @brief
* TODO:
* TODO:
*
*/
if (data.h2o2 < 0) {
@ -334,7 +342,7 @@ bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2se
data.h2o2sensor_status[2] = false;
/**
* @brief
* @brief
*/
data.min_h2o2 = -1;
for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) {
@ -359,7 +367,7 @@ bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2se
}
/**
* @brief х稿
* @brief
*/
data.max_saturation = -1;
for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) {
@ -373,7 +381,7 @@ bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2se
}
/**
* @brief х稿
* @brief 湿
*/
data.max_humid = -1;
@ -388,3 +396,16 @@ bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2se
}
return true;
}
void DeviceIoControlService::printerTest() {
printerPrintf("* * * * * * * * * * * * * * * \n");
printerPrintf("123456789123456789\n");
printerPrintf("abcdefghijk lmnopqr\n");
printerPrintf("ABCDEF GHIJ KLMN OPQR\n");
printerPrintf(fmt::format("{}\n", ChineseGb2312().nihaozhongguo()));
printerPrintf(fmt::format("{}\n", ChineseGb2312().nihaozhongguo()));
printerPrintf(fmt::format("{}\n", ChineseGb2312().nihaozhongguo()));
printerPrintf("\n");
printerPrintf("\n");
}
void DeviceIoControlService::printerPrintf(string str) { GET_SERVICE(UartPrinter)->print(str); }

15
src/service/device_io_control_service.hpp

@ -65,14 +65,17 @@ class DeviceIoControlService : public enable_shared_from_this<DeviceIoControlSer
virtual void startScan();
public:
void printerPrintf(string str);
void printerTest();
/*******************************************************************************
* *
*******************************************************************************/
virtual int heatingStrip_getio1();
virtual int heatingStrip_getio2();
virtual int heatingStrip_getstate();
virtual int heatingStrip_getcurrentValue();
virtual void heartingPlate_setPower(bool val);
virtual int heatingStrip_getio1();
virtual int heatingStrip_getio2();
virtual int heatingStrip_getstate();
virtual int heatingStrip_getcurrentValue();
virtual void heartingPlate_setPower(bool val);
/*******************************************************************************
* *
@ -124,7 +127,7 @@ class DeviceIoControlService : public enable_shared_from_this<DeviceIoControlSer
virtual int getWaterImmersionSensor1();
virtual int getWaterImmersionSensor2();
virtual int getDisinfectantVolume_g(); // g
virtual int getDisinfectantVolume_g(); // g
virtual int getPressureSensorData(int index);
typedef struct {

21
src/service/disinfection_ctl_service.cpp

@ -1,4 +1,8 @@
#include "disinfection_ctl_service.hpp"
#include "configs/gconfig.hpp"
#include "iflytop/components/uart_printer/uart_printer.hpp"
using namespace iflytop;
using namespace std;
/**
@ -162,8 +166,9 @@ void DisinfectionCtrlService::initContext(DisinfectionContext& context,
float stoped_humi, //
float continued_humi //
) {
context.m_disinfectionID = createDisinfectionID();
context.pre_heat_time_s = m_dbService->getSettingVal("pre_heat_time_s");
context.m_disinfectionID = createDisinfectionID();
// context.pre_heat_time_s = m_dbService->getSettingVal("pre_heat_time_s");
context.pre_heat_time_s = GET_SERVICE(GConfig)->get_preHeatLastTimeS();
context.stoped_gs = stoped_gs;
context.continued_gs = continued_gs;
context.stoped_satur = stoped_satur;
@ -446,8 +451,16 @@ void DisinfectionCtrlService::disinfectionLoop(bool& breakflag) {
logger->info("waitting for h2o2 concentration to safe value {}=>{}", m_context.h2o2data.min_h2o2, 1);
if (m_context.h2o2data.min_h2o2 < 1) {
logger->info("h2o2 concentration to safe value");
breakflag = true;
forcelog = true;
breakflag = true;
forcelog = true;
/**
* @brief
*/
auto up = GET_SERVICE(UartPrinter);
up->print("===============================\n");
up->print("Operator: %s\n");
m_context.m_state = kfinished;
}
} else {

2
src/version.hpp

@ -1,2 +1,2 @@
#pragma once
#define VERSION "0.1"
#define VERSION "1.0"
Loading…
Cancel
Save