Grisha Boga / Mbed 2 deprecated Prog_rele_with_tft

Dependencies:   mbed mbed-rtos

Committer:
grisha_b13
Date:
Mon Sep 20 13:06:41 2021 +0000
Revision:
0:aa53c09fba30
Child:
1:b05f79b901ac
Program rele with tft display (based on rasp pico).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
grisha_b13 0:aa53c09fba30 1
grisha_b13 0:aa53c09fba30 2 /************** Program rele *******************************/
grisha_b13 0:aa53c09fba30 3
grisha_b13 0:aa53c09fba30 4 #include <mbed.h>
grisha_b13 0:aa53c09fba30 5 #include "rtos.h"
grisha_b13 0:aa53c09fba30 6
grisha_b13 0:aa53c09fba30 7 #include "task.h"
grisha_b13 0:aa53c09fba30 8 #include "ext_vars.h"
grisha_b13 0:aa53c09fba30 9
grisha_b13 0:aa53c09fba30 10 #define UART_BAUD 9600 // скорость
grisha_b13 0:aa53c09fba30 11 #define MAX_LEN 30 // макс. длинна строки usb
grisha_b13 0:aa53c09fba30 12
grisha_b13 0:aa53c09fba30 13 //--------------- input / output ---------------------------------------
grisha_b13 0:aa53c09fba30 14 // outputs
grisha_b13 0:aa53c09fba30 15 DigitalOut led(PC_13); // выход LED на плате
grisha_b13 0:aa53c09fba30 16
grisha_b13 0:aa53c09fba30 17 DigitalOut y_01(PB_12); // out y01
grisha_b13 0:aa53c09fba30 18 DigitalOut y_02(PB_13); // out y02
grisha_b13 0:aa53c09fba30 19 DigitalOut y_03(PB_14); // out y03
grisha_b13 0:aa53c09fba30 20 DigitalOut y_04(PB_15); // out y04
grisha_b13 0:aa53c09fba30 21 DigitalOut y_05(PA_8); // out y05
grisha_b13 0:aa53c09fba30 22 DigitalOut y_06(PA_9); // out y06
grisha_b13 0:aa53c09fba30 23
grisha_b13 0:aa53c09fba30 24 // inputs
grisha_b13 0:aa53c09fba30 25 DigitalIn x_01(PB_9); // inp x01
grisha_b13 0:aa53c09fba30 26 DigitalIn x_02(PB_8); // inp x02
grisha_b13 0:aa53c09fba30 27 DigitalIn x_03(PB_7); // inp x03
grisha_b13 0:aa53c09fba30 28 DigitalIn x_04(PB_6); // inp x04
grisha_b13 0:aa53c09fba30 29 DigitalIn x_05(PB_5); // inp x05
grisha_b13 0:aa53c09fba30 30 DigitalIn x_06(PB_4); // inp x06
grisha_b13 0:aa53c09fba30 31 DigitalIn x_07(PB_3); // inp x07
grisha_b13 0:aa53c09fba30 32 DigitalIn x_08(PA_15); // inp x08
grisha_b13 0:aa53c09fba30 33
grisha_b13 0:aa53c09fba30 34 //------- discr input ------------
grisha_b13 0:aa53c09fba30 35 DigitalIn swd_01(PA_0); // dip 1
grisha_b13 0:aa53c09fba30 36 DigitalIn swd_02(PA_1); // dip 2
grisha_b13 0:aa53c09fba30 37 DigitalIn swd_03(PA_2); // dip 3
grisha_b13 0:aa53c09fba30 38 DigitalIn swd_04(PA_3); // dip 4
grisha_b13 0:aa53c09fba30 39
grisha_b13 0:aa53c09fba30 40 //-------- Prototype functions ----------------------------------------
grisha_b13 0:aa53c09fba30 41 void read_inputs(); // сохр.состояния входов в памяти
grisha_b13 0:aa53c09fba30 42 void write_outs(); // формирование выходов
grisha_b13 0:aa53c09fba30 43 void save_stat(); // сохранение сост. переменных
grisha_b13 0:aa53c09fba30 44 void logic_tasks(); // логические задачи
grisha_b13 0:aa53c09fba30 45 void timers(); // обработка таймеров
grisha_b13 0:aa53c09fba30 46 int read_val(); // вычитывание значения из строки
grisha_b13 0:aa53c09fba30 47
grisha_b13 0:aa53c09fba30 48 //-------- for SERIAL interface ---------------------------------------
grisha_b13 0:aa53c09fba30 49 Serial pc(PB_10, PB_11); // tx, rx
grisha_b13 0:aa53c09fba30 50 int pc_i = 99;
grisha_b13 0:aa53c09fba30 51 int pc_m = 0;
grisha_b13 0:aa53c09fba30 52 char pc_buffer[100];
grisha_b13 0:aa53c09fba30 53
grisha_b13 0:aa53c09fba30 54 void pc_interrupt(void) {
grisha_b13 0:aa53c09fba30 55 if (pc_i < 100) {
grisha_b13 0:aa53c09fba30 56 pc_buffer[pc_i++] = pc.getc();
grisha_b13 0:aa53c09fba30 57 } else {
grisha_b13 0:aa53c09fba30 58 pc_buffer[MAX_LEN] = pc.getc();
grisha_b13 0:aa53c09fba30 59 }
grisha_b13 0:aa53c09fba30 60 }
grisha_b13 0:aa53c09fba30 61
grisha_b13 0:aa53c09fba30 62 //----------- Local vars -----------------------------------------------
grisha_b13 0:aa53c09fba30 63 int delay_time = 10;
grisha_b13 0:aa53c09fba30 64 int t_sys = 0;
grisha_b13 0:aa53c09fba30 65
grisha_b13 0:aa53c09fba30 66 // Переменные для проверки прихода значений из енергонезависимой памяти с rasp-pico
grisha_b13 0:aa53c09fba30 67 int check_par1 = 0;
grisha_b13 0:aa53c09fba30 68 int check_par2 = 0;
grisha_b13 0:aa53c09fba30 69 int check_par3 = 0;
grisha_b13 0:aa53c09fba30 70 int check_par4 = 0;
grisha_b13 0:aa53c09fba30 71 int check_par5 = 0;
grisha_b13 0:aa53c09fba30 72
grisha_b13 0:aa53c09fba30 73
grisha_b13 0:aa53c09fba30 74 //----------- EXT VARS -------------------------------------------------
grisha_b13 0:aa53c09fba30 75 // DC inputs
grisha_b13 0:aa53c09fba30 76 int x01 = 0; int x01_m = 0;
grisha_b13 0:aa53c09fba30 77 int x02 = 0; int x02_m = 0;
grisha_b13 0:aa53c09fba30 78 int x03 = 0; int x03_m = 0;
grisha_b13 0:aa53c09fba30 79 int x04 = 0; int x04_m = 0;
grisha_b13 0:aa53c09fba30 80 int x05 = 0; int x05_m = 0;
grisha_b13 0:aa53c09fba30 81 int x06 = 0; int x06_m = 0;
grisha_b13 0:aa53c09fba30 82 int x07 = 0; int x07_m = 0;
grisha_b13 0:aa53c09fba30 83 int x08 = 0; int x08_m = 0;
grisha_b13 0:aa53c09fba30 84 // Dip inputs
grisha_b13 0:aa53c09fba30 85 int swd01 = 0; int swd01_m = 0;
grisha_b13 0:aa53c09fba30 86 int swd02 = 0; int swd02_m = 0;
grisha_b13 0:aa53c09fba30 87 int swd03 = 0; int swd03_m = 0;
grisha_b13 0:aa53c09fba30 88 int swd04 = 0; int swd04_m = 0;
grisha_b13 0:aa53c09fba30 89 // Outputs
grisha_b13 0:aa53c09fba30 90 int y01 = 0; int y01_m = 0;
grisha_b13 0:aa53c09fba30 91 int y02 = 0; int y02_m = 0;
grisha_b13 0:aa53c09fba30 92 int y03 = 0; int y03_m = 0;
grisha_b13 0:aa53c09fba30 93 int y04 = 0; int y04_m = 0;
grisha_b13 0:aa53c09fba30 94 int y05 = 0; int y05_m = 0;
grisha_b13 0:aa53c09fba30 95 int y06 = 0; int y06_m = 0;
grisha_b13 0:aa53c09fba30 96 // Timers
grisha_b13 0:aa53c09fba30 97 int t01 = 0; int t101 = 0;
grisha_b13 0:aa53c09fba30 98 int t02 = 0; int t102 = 0;
grisha_b13 0:aa53c09fba30 99 int t03 = 0; int t103 = 0;
grisha_b13 0:aa53c09fba30 100 int t04 = 0; int t104 = 0;
grisha_b13 0:aa53c09fba30 101 int t05 = 0; int t105 = 0;
grisha_b13 0:aa53c09fba30 102 // Parametrs
grisha_b13 0:aa53c09fba30 103 int pr001 = 0;
grisha_b13 0:aa53c09fba30 104 int pr002 = 0;
grisha_b13 0:aa53c09fba30 105 int pr003 = 0;
grisha_b13 0:aa53c09fba30 106 int pr004 = 0;
grisha_b13 0:aa53c09fba30 107 int pr005 = 0;
grisha_b13 0:aa53c09fba30 108 // Alarms
grisha_b13 0:aa53c09fba30 109 int al000 = 0;
grisha_b13 0:aa53c09fba30 110 // VrXXX
grisha_b13 0:aa53c09fba30 111 int vr000 = 0;
grisha_b13 0:aa53c09fba30 112 int vr001 = 1;
grisha_b13 0:aa53c09fba30 113
grisha_b13 0:aa53c09fba30 114 /**************************** main **********************************/
grisha_b13 0:aa53c09fba30 115 int main(void)
grisha_b13 0:aa53c09fba30 116 {
grisha_b13 0:aa53c09fba30 117 //----- настраиваем порт serial ------
grisha_b13 0:aa53c09fba30 118 pc.baud(UART_BAUD);
grisha_b13 0:aa53c09fba30 119 pc.attach(&pc_interrupt);
grisha_b13 0:aa53c09fba30 120
grisha_b13 0:aa53c09fba30 121 //--- запускаем логич.задач по таймеру delay_time msec ------
grisha_b13 0:aa53c09fba30 122 RtosTimer t_msec(&logic_tasks);
grisha_b13 0:aa53c09fba30 123 t_msec.start(delay_time);
grisha_b13 0:aa53c09fba30 124
grisha_b13 0:aa53c09fba30 125 while(true)
grisha_b13 0:aa53c09fba30 126 {
grisha_b13 0:aa53c09fba30 127 led = !led;
grisha_b13 0:aa53c09fba30 128
grisha_b13 0:aa53c09fba30 129 // проверяем usb
grisha_b13 0:aa53c09fba30 130 if (pc_i > 1 && pc_i == pc_m) {
grisha_b13 0:aa53c09fba30 131 pc_buffer[pc_i++] = 0; pc_i = 0;
grisha_b13 0:aa53c09fba30 132 y01 = 1;
grisha_b13 0:aa53c09fba30 133 // --- устанавливаем значение переменных ----
grisha_b13 0:aa53c09fba30 134 if(strstr(pc_buffer, "=")) {
grisha_b13 0:aa53c09fba30 135 if(strstr(pc_buffer, "pr001")) { pr001 = read_val(); pc.printf("ok\n"); check_par1 = 1; }
grisha_b13 0:aa53c09fba30 136 if(strstr(pc_buffer, "pr002")) { pr002 = read_val(); pc.printf("ok\n"); check_par2 = 1; }
grisha_b13 0:aa53c09fba30 137 if(strstr(pc_buffer, "pr003")) { pr003 = read_val(); pc.printf("ok\n"); check_par3 = 1; }
grisha_b13 0:aa53c09fba30 138 if(strstr(pc_buffer, "pr004")) { pr004 = read_val(); pc.printf("ok\n"); check_par4 = 1; }
grisha_b13 0:aa53c09fba30 139 if(strstr(pc_buffer, "pr005")) { pr005 = read_val(); pc.printf("ok\n"); check_par5 = 1; }
grisha_b13 0:aa53c09fba30 140
grisha_b13 0:aa53c09fba30 141 if(strstr(pc_buffer, "vr000")) { vr000 = read_val(); pc.printf("ok\n"); }
grisha_b13 0:aa53c09fba30 142 if(strstr(pc_buffer, "vr001")) { vr001 = read_val(); pc.printf("ok\n"); }
grisha_b13 0:aa53c09fba30 143
grisha_b13 0:aa53c09fba30 144 if(strstr(pc_buffer, "al000")) { al000 = read_val(); pc.printf("ok\n"); }
grisha_b13 0:aa53c09fba30 145 }
grisha_b13 0:aa53c09fba30 146
grisha_b13 0:aa53c09fba30 147 // --- отправляем в serial значение переменных ---
grisha_b13 0:aa53c09fba30 148 if(strstr(pc_buffer, "?")) {
grisha_b13 0:aa53c09fba30 149 if(strstr(pc_buffer, "pr001?")) { pc.printf("pr001:%d\n", pr001); }
grisha_b13 0:aa53c09fba30 150 if(strstr(pc_buffer, "pr002?")) { pc.printf("pr002:%d\n", pr002); }
grisha_b13 0:aa53c09fba30 151 if(strstr(pc_buffer, "pr003?")) { pc.printf("pr003:%d\n", pr003); }
grisha_b13 0:aa53c09fba30 152 if(strstr(pc_buffer, "pr004?")) { pc.printf("pr004:%d\n", pr004); }
grisha_b13 0:aa53c09fba30 153 if(strstr(pc_buffer, "pr005?")) { pc.printf("pr005:%d\n", pr005); }
grisha_b13 0:aa53c09fba30 154
grisha_b13 0:aa53c09fba30 155 if(strstr(pc_buffer, "vr000?")) { pc.printf("vr000:%d\n", vr000); }
grisha_b13 0:aa53c09fba30 156 if(strstr(pc_buffer, "vr001?")) { pc.printf("vr001:%d\n", vr001); }
grisha_b13 0:aa53c09fba30 157
grisha_b13 0:aa53c09fba30 158 if(strstr(pc_buffer, "al000?")) { pc.printf("al000:%d\n", al000); }
grisha_b13 0:aa53c09fba30 159 }
grisha_b13 0:aa53c09fba30 160
grisha_b13 0:aa53c09fba30 161 } else { pc_m = pc_i; y01 = 0;}
grisha_b13 0:aa53c09fba30 162
grisha_b13 0:aa53c09fba30 163 Thread::wait(250);
grisha_b13 0:aa53c09fba30 164 }
grisha_b13 0:aa53c09fba30 165 }
grisha_b13 0:aa53c09fba30 166
grisha_b13 0:aa53c09fba30 167 /**************** логические задачи контроллера *********************/
grisha_b13 0:aa53c09fba30 168
grisha_b13 0:aa53c09fba30 169 // логические задачи. вызываются для выполнения
grisha_b13 0:aa53c09fba30 170 // каждые delay_time мсек
grisha_b13 0:aa53c09fba30 171 void logic_tasks() {
grisha_b13 0:aa53c09fba30 172
grisha_b13 0:aa53c09fba30 173 // подготовка входн.информации
grisha_b13 0:aa53c09fba30 174 timers();
grisha_b13 0:aa53c09fba30 175 read_inputs();
grisha_b13 0:aa53c09fba30 176
grisha_b13 0:aa53c09fba30 177 // логичeские задачи (организационный блок)
grisha_b13 0:aa53c09fba30 178 // запускаем лог задачи только после получения всех параметров из rasp-pico
grisha_b13 0:aa53c09fba30 179 if(check_par1 == 1 && check_par2 == 1 && check_par3 == 1
grisha_b13 0:aa53c09fba30 180 && check_par4 == 1 && check_par5 == 1) {
grisha_b13 0:aa53c09fba30 181 task();
grisha_b13 0:aa53c09fba30 182 }
grisha_b13 0:aa53c09fba30 183
grisha_b13 0:aa53c09fba30 184 // формирование выходн.информации
grisha_b13 0:aa53c09fba30 185 write_outs();
grisha_b13 0:aa53c09fba30 186 save_stat();
grisha_b13 0:aa53c09fba30 187 }
grisha_b13 0:aa53c09fba30 188
grisha_b13 0:aa53c09fba30 189 //----------------------------------------
grisha_b13 0:aa53c09fba30 190 // формирование значения переменных
grisha_b13 0:aa53c09fba30 191 // в соответствии с сигналами на входах контроллер
grisha_b13 0:aa53c09fba30 192 void read_inputs() {
grisha_b13 0:aa53c09fba30 193 // читаем локальные входа контроллера
grisha_b13 0:aa53c09fba30 194 x01 = x_01; x05 = x_05;
grisha_b13 0:aa53c09fba30 195 x02 = x_02; x06 = x_06;
grisha_b13 0:aa53c09fba30 196 x03 = x_03; x07 = x_07;
grisha_b13 0:aa53c09fba30 197 x04 = x_04; x08 = x_08;
grisha_b13 0:aa53c09fba30 198 swd01 = swd_01; swd02 = swd_02;
grisha_b13 0:aa53c09fba30 199 swd03 = swd_03; swd04 = swd_04;
grisha_b13 0:aa53c09fba30 200 }
grisha_b13 0:aa53c09fba30 201
grisha_b13 0:aa53c09fba30 202 //----------------------------------------
grisha_b13 0:aa53c09fba30 203 // установка выходов контроллера
grisha_b13 0:aa53c09fba30 204 // в соответствии значения преременным
grisha_b13 0:aa53c09fba30 205 void write_outs(){
grisha_b13 0:aa53c09fba30 206 // устанавливаем локальные выходы
grisha_b13 0:aa53c09fba30 207 y_01 = y01; y_04 = y04;
grisha_b13 0:aa53c09fba30 208 y_02 = y02; y_05 = y05;
grisha_b13 0:aa53c09fba30 209 y_03 = y03; y_06 = y06;
grisha_b13 0:aa53c09fba30 210 }
grisha_b13 0:aa53c09fba30 211
grisha_b13 0:aa53c09fba30 212 //----------------------------------------
grisha_b13 0:aa53c09fba30 213 // сохранение значения переменных для обработки
grisha_b13 0:aa53c09fba30 214 // в след.цикле (установка, сброс)
grisha_b13 0:aa53c09fba30 215 void save_stat(){
grisha_b13 0:aa53c09fba30 216 x01_m = x01; x02_m = x02; x03_m = x03; x04_m = x04;
grisha_b13 0:aa53c09fba30 217 x05_m = x05; x06_m = x06; x07_m = x07; x08_m = x08;
grisha_b13 0:aa53c09fba30 218 y01_m = y01; y02_m = y02; y03_m = y03; y04_m = y04;
grisha_b13 0:aa53c09fba30 219 y05_m = y05; y06_m = y06;
grisha_b13 0:aa53c09fba30 220 swd01_m = swd01;
grisha_b13 0:aa53c09fba30 221 swd02_m = swd02;
grisha_b13 0:aa53c09fba30 222 swd03_m = swd03;
grisha_b13 0:aa53c09fba30 223 swd04_m = swd04;
grisha_b13 0:aa53c09fba30 224 }
grisha_b13 0:aa53c09fba30 225
grisha_b13 0:aa53c09fba30 226 //----------------------------------------
grisha_b13 0:aa53c09fba30 227 // изменение значения секундных и милисекундных таймеров
grisha_b13 0:aa53c09fba30 228 // (дискретность delay_time мсек)
grisha_b13 0:aa53c09fba30 229 void timers(){
grisha_b13 0:aa53c09fba30 230
grisha_b13 0:aa53c09fba30 231 int i = delay_time; // время цикла в мсек
grisha_b13 0:aa53c09fba30 232 int max1 = 60000; // макс. значение для мсек таймеров (60sec)
grisha_b13 0:aa53c09fba30 233 int max2 = 36000; // макс. значение для сек таймеров (10час)
grisha_b13 0:aa53c09fba30 234
grisha_b13 0:aa53c09fba30 235 // timers, 1s
grisha_b13 0:aa53c09fba30 236 if(t_sys < 1000) {
grisha_b13 0:aa53c09fba30 237 t_sys = t_sys + i;
grisha_b13 0:aa53c09fba30 238 } else {
grisha_b13 0:aa53c09fba30 239 t_sys = 0;
grisha_b13 0:aa53c09fba30 240 if(t101 < max2) { t101 = t101 + 1; }
grisha_b13 0:aa53c09fba30 241 if(t102 < max2) { t102 = t102 + 1; }
grisha_b13 0:aa53c09fba30 242 if(t103 < max2) { t103 = t103 + 1; }
grisha_b13 0:aa53c09fba30 243 if(t104 < max2) { t104 = t104 + 1; }
grisha_b13 0:aa53c09fba30 244 if(t105 < max2) { t105 = t105 + 1; }
grisha_b13 0:aa53c09fba30 245 }
grisha_b13 0:aa53c09fba30 246
grisha_b13 0:aa53c09fba30 247 // timers, 10ms
grisha_b13 0:aa53c09fba30 248 if(t01 < max1) { t01 = t01 + i; }
grisha_b13 0:aa53c09fba30 249 if(t02 < max1) { t02 = t02 + i; }
grisha_b13 0:aa53c09fba30 250 if(t03 < max1) { t03 = t03 + i; }
grisha_b13 0:aa53c09fba30 251 if(t04 < max1) { t04 = t04 + i; }
grisha_b13 0:aa53c09fba30 252 if(t05 < max1) { t05 = t05 + i; }
grisha_b13 0:aa53c09fba30 253 }
grisha_b13 0:aa53c09fba30 254
grisha_b13 0:aa53c09fba30 255 //----------------------------------------
grisha_b13 0:aa53c09fba30 256 // поиск и чтение значения из строки
grisha_b13 0:aa53c09fba30 257 // возвращает целое число. 0-999999
grisha_b13 0:aa53c09fba30 258 int read_val() {
grisha_b13 0:aa53c09fba30 259 char inp_c[10];
grisha_b13 0:aa53c09fba30 260 int val = 0;
grisha_b13 0:aa53c09fba30 261 int i = 0;
grisha_b13 0:aa53c09fba30 262 int p = 0;
grisha_b13 0:aa53c09fba30 263
grisha_b13 0:aa53c09fba30 264 while(p < MAX_LEN) {
grisha_b13 0:aa53c09fba30 265 if(pc_buffer[p] == '=') { break; }
grisha_b13 0:aa53c09fba30 266 p++;
grisha_b13 0:aa53c09fba30 267 }
grisha_b13 0:aa53c09fba30 268
grisha_b13 0:aa53c09fba30 269 p++;
grisha_b13 0:aa53c09fba30 270 i = 0; if(pc_buffer[p + i] >= 48 && pc_buffer[p + i] <= 57) { inp_c[i] = pc_buffer[p + i]; } else { inp_c[i] = 0; }
grisha_b13 0:aa53c09fba30 271 i = 1; if(pc_buffer[p + i] >= 48 && pc_buffer[p + i] <= 57) { inp_c[i] = pc_buffer[p + i]; } else { inp_c[i] = 0; }
grisha_b13 0:aa53c09fba30 272 i = 2; if(pc_buffer[p + i] >= 48 && pc_buffer[p + i] <= 57) { inp_c[i] = pc_buffer[p + i]; } else { inp_c[i] = 0; }
grisha_b13 0:aa53c09fba30 273 i = 3; if(pc_buffer[p + i] >= 48 && pc_buffer[p + i] <= 57) { inp_c[i] = pc_buffer[p + i]; } else { inp_c[i] = 0; }
grisha_b13 0:aa53c09fba30 274 i = 4; if(pc_buffer[p + i] >= 48 && pc_buffer[p + i] <= 57) { inp_c[i] = pc_buffer[p + i]; } else { inp_c[i] = 0; }
grisha_b13 0:aa53c09fba30 275 i = 5; if(pc_buffer[p + i] >= 48 && pc_buffer[p + i] <= 57) { inp_c[i] = pc_buffer[p + i]; } else { inp_c[i] = 0; }
grisha_b13 0:aa53c09fba30 276 inp_c[6] = 0 ;
grisha_b13 0:aa53c09fba30 277
grisha_b13 0:aa53c09fba30 278 val = atoi(inp_c);
grisha_b13 0:aa53c09fba30 279 return val;
grisha_b13 0:aa53c09fba30 280 }
grisha_b13 0:aa53c09fba30 281
grisha_b13 0:aa53c09fba30 282