Skip to content

Commit

Permalink
optimization & add lua variable
Browse files Browse the repository at this point in the history
  • Loading branch information
LKosoj committed Apr 21, 2024
1 parent fb420fb commit eda8b83
Show file tree
Hide file tree
Showing 13 changed files with 918 additions and 37 deletions.
6 changes: 3 additions & 3 deletions BK.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ void bk_finish();
void set_power_mode(String Mode);
void set_power(bool On);
void create_data();
void open_valve(bool Val);
void open_valve(bool Val, bool msg);
void set_pump_pwm(float duty);
void set_pump_speed_pid(float temp);
void SendMsg(String m, MESSAGE_TYPE msg_type);
Expand Down Expand Up @@ -61,7 +61,7 @@ void check_alarm_bk() {
if (alarm_t_min > 0 && alarm_t_min <= millis()) alarm_t_min = 0;

if (PowerOn && !valve_status && TankSensor.avgTemp >= OPEN_VALVE_TANK_TEMP) {
open_valve(true);
open_valve(true, true);
#ifdef USE_WATER_PUMP
set_pump_pwm(bk_pwm);
#endif
Expand All @@ -82,7 +82,7 @@ void check_alarm_bk() {
}

if (!PowerOn && !is_self_test && valve_status && WaterSensor.avgTemp <= TARGET_WATER_TEMP - 20) {
open_valve(false);
open_valve(false, true);
#ifdef USE_WATER_PUMP
if (pump_started) set_pump_pwm(0);
#endif
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
--|Start/Stop^
--setNumVariable("show_lua_script",0) -- включаем отладку в сом порт
if (getNumVariable("loop_lua_fl", "NUMERIC") + 0) == 0 then
setObject("ManPw",0) --ручной задатчик ТЭНа
setObject("R",0) --включить режим поиска давления захлёба
setObject("Pz",55) --давление захлёба, предварительно
setObject("Pold",0) --предыдущий замер давления для фильтра
setObject("t",0) --таймер
setNumVariable("loop_lua_fl", 1)
--setObject("otl",60) -- отладочная
else
setNumVariable("loop_lua_fl",0) -- выключаем циклическое исполнение луа-скриптов
print ("Ручной останов скрипта")
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--|ТЭН ++^
setObject("ManPw",100)
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--|ТЭН --^
setObject("ManPw",-100)
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
ManPw = getObject("ManPw","NUMERIC")+0 --читаем команды от кнопок
PwRd =getNumVariable("target_power_volt")+0 --читаем мощность/напряжение
-- Rten=16 Pw=Pw*Pw/Rten --перевод напряжения в мощность для не Stab AVR
Pw=PwRd
if getStrVariable("program_type")=="B" then --если работает строка отбора тела
S="" PS="" k=1 --масштаб воздействия
R = getObject("R","NUMERIC")+0 --режим
CP=getNumVariable("pressure_value")+0 --текущее давление
DZ=digitalRead(27) --датчик захлёба
Pz=getObject("Pz","NUMERIC")+0 --запомненное давление захлёба
t=getObject("t","NUMERIC")+0 if t>0 then setObject("t",t-1) end --таймер
--Pold=getObject("Pold","NUMERIC")+0 CP=(CP+Pold)/2 setObject("Pold",CP) --фильтр скачков датчика давления

Pmin=Pz*0.4 --минимальное давление предзахлёба
if getState()==40 then Pmax=Pz*0.8 else --если пауза загрубляем верхний предел
Pmax=Pz*0.5 end -- максимальное давление, при паузе 80% от захлебного, при отборе 50%
dP=5 if CP>Pmax then dP=(CP-Pmax)*k elseif CP<Pmin then dP=(Pmin-CP)*k end --рассчет воздействия 1-5 МВт
if dP>5 then dP=5 end
if R==0 then S=S.."Поиск P захлёба,"
if DZ==0 then Pw=Pw+1 else setObject("R",1) setObject("Pz",CP) S=S.."Захлёб," end
elseif R==1 then
if DZ==1 then S=S.."Захлёб," setObject("Pz",CP) else S=S.."Предзахлёб," end
if CP<Pmin then --при давлении ниже минимальной уставки
S=S.."Низкое давление,"
if t<1 then --если таймер не взведен
Pw=Pw+dP setObject("t",30) end PS="+" end --добавляем мощность пропорционально отклонению давлениия и взводим таймер на 30 сек
if CP>Pmax then --при давлении выше максимальной уставки
S=S.."Высокое давление,"
if t<1 then --если таймер не взведен
Pw=Pw-dP setObject("t",20) end PS="-" end --убавляем мощность пропорционально отклонению давлениия и взводим таймер на 20 сек
end
S1=string.format("P=%.2f(%.1f-%.1f),", CP, Pmin, Pmax)
S2=string.format("ТЭН %d%sВт,", math.floor(PwRd), PS )
--print("@clear@")
--print(S1..S2..S)
setLuaStatus(S1..S2.." "..S)
end
if ManPw ~= 0 then Pw=Pw+ManPw setObject("ManPw",0) end --реализуем команды от кнопок
if Pw~=PwRd and Pw>40 and Pw<2000 then --при условии, что на ТЭНе 40-2000Вт и исходную мощность надо менять
-- Pw=(Pw*Rten)^0.5 --перевод мощности в напряжение для не Stab AVR
setCurrentPower(Pw) end --регулируем ТЭН
2 changes: 1 addition & 1 deletion Samovar.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#error This code is designed to run on ESP32 platform, not Arduino nor ESP8266! Please check your Tools->Board setting.
#endif

#define SAMOVAR_VERSION F("6.18")
#define SAMOVAR_VERSION F("6.19")

//#define __SAMOVAR_DEBUG

Expand Down
20 changes: 7 additions & 13 deletions beer.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ void run_beer_program(byte num) {

void beer_finish() {
if (valve_status) {
open_valve(false);
open_valve(false, true);
}
#ifdef USE_WATER_PUMP
if (pump_started) set_pump_pwm(0);
Expand Down Expand Up @@ -110,8 +110,7 @@ void check_alarm_beer() {
//Проверяем, что клапан воды охлаждения не открыт, когда не нужно
if (program[ProgramNum].WType != "C" and program[ProgramNum].WType != "F" and valve_status && PowerOn) {
//Закрываем клапан воды
open_valve(false);
SendMsg(("Закрыт клапан воды охлаждения!"), NOTIFY_MSG);
open_valve(false, false);
}

//Если программа - ожидание - ждем, ничего не делаем
Expand Down Expand Up @@ -143,8 +142,7 @@ void check_alarm_beer() {
if (temp <= program[ProgramNum].Temp - TankSensor.SetTemp) {
if (valve_status) {
//Закрываем клапан воды
open_valve(false);
SendMsg(("Закрыт клапан воды охлаждения!"), NOTIFY_MSG);
open_valve(false, false);
}
//Поддерживаем целевую температуру
set_heater_state(program[ProgramNum].Temp, temp);
Expand All @@ -154,8 +152,7 @@ void check_alarm_beer() {
//Отключаем нагреватель
setHeaterPosition(false);
//Открываем клапан воды
open_valve(true);
SendMsg(("Открыт клапан воды охлаждения!"), NOTIFY_MSG);
open_valve(true, false);
}
}
} else {
Expand All @@ -164,8 +161,7 @@ void check_alarm_beer() {
setHeaterPosition(false);
//Закрываем клапан воды, если температура в кубе чуть меньше температурной уставки, чтобы часто не щелкать клапаном
if ((temp < program[ProgramNum].Temp + TankSensor.SetTemp - 0.1) && valve_status && PowerOn) {
open_valve(false);
SendMsg(("Закрыт клапан воды охлаждения!"), NOTIFY_MSG);
open_valve(false, false);
}
}
}
Expand Down Expand Up @@ -198,17 +194,15 @@ void check_alarm_beer() {
begintime = millis();
setHeaterPosition(false);
//Открываем клапан воды
open_valve(true);
SendMsg(("Открыт клапан воды охлаждения!"), NOTIFY_MSG);
open_valve(true, false);
#ifdef USE_WATER_PUMP
if (pump_started) set_pump_pwm(1023);
#endif
}
if (temp <= program[ProgramNum].Temp) {
//Если температура упала
//Закрываем клапан воды
open_valve(false);
SendMsg(("Закрыт клапан воды охлаждения!"), NOTIFY_MSG);
open_valve(false, false);
//запускаем следующую программу
run_beer_program(ProgramNum + 1);
}
Expand Down
8 changes: 4 additions & 4 deletions distiller.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ void distiller_finish();
void set_power_mode(String Mode);
void set_power(bool On);
void create_data();
void open_valve(bool Val);
void open_valve(bool Val, bool msg);
void set_pump_pwm(float duty);
void set_pump_speed_pid(float temp);
void set_dist_program(String WProgram);
Expand Down Expand Up @@ -91,15 +91,15 @@ void check_alarm_distiller() {
if (alarm_t_min > 0 && alarm_t_min <= millis()) alarm_t_min = 0;

if (PowerOn && !valve_status && TankSensor.avgTemp >= OPEN_VALVE_TANK_TEMP) {
open_valve(true);
open_valve(true, true);
}

if (!valve_status) {
if (ACPSensor.avgTemp >= MAX_ACP_TEMP - 5) open_valve(true);
if (ACPSensor.avgTemp >= MAX_ACP_TEMP - 5) open_valve(true, true);
}

if (!PowerOn && !is_self_test && valve_status && WaterSensor.avgTemp <= SamSetup.SetWaterTemp - DELTA_T_CLOSE_VALVE) {
open_valve(false);
open_valve(false, true);
#ifdef USE_WATER_PUMP
if (pump_started) set_pump_pwm(0);
#endif
Expand Down
28 changes: 18 additions & 10 deletions logic.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ float get_temp_by_pressure(float start_pressure, float start_temp, float current
unsigned int hexToDec(String hexString);
void set_current_power(float Volt);
void set_power_mode(String Mode);
void open_valve(bool Val);
void open_valve(bool Val, bool msg);
void stopService(void);
void startService(void);
void reset_sensor_counter(void);
Expand Down Expand Up @@ -105,7 +105,7 @@ void set_alarm() {
}
set_power(false);
alarm_event = true;
open_valve(false);
open_valve(false, true);
#ifdef USE_WATER_PUMP
set_pump_pwm(0);
#endif
Expand Down Expand Up @@ -708,15 +708,15 @@ void check_alarm() {
#endif

if (!valve_status) {
if (ACPSensor.avgTemp >= MAX_ACP_TEMP - 5) open_valve(true);
if (ACPSensor.avgTemp >= MAX_ACP_TEMP - 5) open_valve(true, true);
else if (TankSensor.avgTemp >= OPEN_VALVE_TANK_TEMP && PowerOn) {
set_buzzer(true);
open_valve(true);
open_valve(true, true);
}
}

if (!PowerOn && !is_self_test && valve_status && WaterSensor.avgTemp <= SamSetup.SetWaterTemp - DELTA_T_CLOSE_VALVE && ACPSensor.avgTemp <= MAX_ACP_TEMP - 10) {
open_valve(false);
open_valve(false, true);
set_buzzer(true);
#ifdef USE_WATER_PUMP
if (pump_started) set_pump_pwm(0);
Expand Down Expand Up @@ -836,14 +836,22 @@ void check_alarm() {
#endif
}

void open_valve(bool Val) {
void open_valve(bool Val, bool msg = true) {
if (Val && !alarm_event) {
valve_status = true;
SendMsg(("Откройте подачу воды!"), WARNING_MSG);
if (msg) {
SendMsg(("Откройте подачу воды!"), WARNING_MSG);
} else {
SendMsg(("Открыт клапан воды охлаждения!"), NOTIFY_MSG);
}
digitalWrite(RELE_CHANNEL3, SamSetup.rele3);
} else {
valve_status = false;
SendMsg(("Закройте подачу воды!"), WARNING_MSG);
if (msg) {
SendMsg(("Закройте подачу воды!"), WARNING_MSG);
} else {
SendMsg(("Закрыт клапан воды охлаждения!"), NOTIFY_MSG);
}
digitalWrite(RELE_CHANNEL3, !SamSetup.rele3);
}
}
Expand Down Expand Up @@ -1101,7 +1109,7 @@ bool check_boiling() {
void start_self_test(void) {
is_self_test = true;
SendMsg(("Запуск самотестирования."), NOTIFY_MSG);
open_valve(true);
open_valve(true, true);
#ifdef USE_WATER_PUMP
//включаем насос воды
set_pump_pwm((PWM_START_VALUE + 20) * 10);
Expand Down Expand Up @@ -1130,7 +1138,7 @@ void stop_self_test(void) {
//выключаем насос воды
set_pump_pwm(0);
#endif
open_valve(false);
open_valve(false, true);
set_capacity(0);
stopService();
is_self_test = false;
Expand Down
16 changes: 10 additions & 6 deletions lua.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ void load_lua_script();
void set_power(bool On);
void SendMsg(String m, MESSAGE_TYPE msg_type);
String get_global_variables();
void open_valve(bool Val);
void open_valve(bool Val, bool msg);
void set_current_power(float Volt);
void set_body_temp();
void set_mixer(bool On);
Expand Down Expand Up @@ -213,7 +213,7 @@ static int lua_wrapper_set_mixer(lua_State *lua_state) {
static int lua_wrapper_open_valve(lua_State *lua_state) {
vTaskDelay(5 / portTICK_PERIOD_MS);
bool a = luaL_checkinteger(lua_state, 1);
open_valve(a);
open_valve(a, false);
return 0;
}

Expand Down Expand Up @@ -425,6 +425,10 @@ static int lua_wrapper_get_num_variable(lua_State *lua_state) {
a = water_pump_speed;
} else if (Var == "pressure_value") {
a = pressure_value;
} else if (Var == "PauseOn") {
a = PauseOn;
} else if (Var == "program_Wait") {
a = program_Wait;
} else if (Var == "test_num_val") {
a = test_num_val;
} else if (Var != "") {
Expand Down Expand Up @@ -909,10 +913,10 @@ String run_lua_string(String lstr) {
WriteConsoleLog(F("--END LUA SCRIPT--"));
}
#ifdef USE_MQTT
String MsgPl = lstr;
MsgPl.replace(",", ";");
MqttSendMsg(MsgPl + "," + NOTIFY_MSG, "msg");
#endif
String MsgPl = lstr;
MsgPl.replace(",", ";");
MqttSendMsg(MsgPl + "," + NOTIFY_MSG, "msg");
#endif
sr = lua.Lua_dostring(&lstr);
sr.trim();
if (sr != "") {
Expand Down
Loading

0 comments on commit eda8b83

Please sign in to comment.