From 99fa2d79e25d79d5d61b3ecee8b64647f37439a0 Mon Sep 17 00:00:00 2001 From: Sayeth Date: Wed, 5 Mar 2025 12:33:26 -0600 Subject: [PATCH] backup from gitlab --- daq | Bin 0 -> 13952 bytes daq.c | 124 ++++++++ daq.h | 41 +++ data.dat | 458 ++++++++++++++++++++++++++++ images/.gitkeep | 0 images/conexion_sensores.png | Bin 0 -> 33641 bytes main.c | 36 +++ resources/config-uart-pins.sh | 18 ++ resources/ebb-set-uart-pins.service | 11 + uart.c | 87 ++++++ uart.h | 35 +++ 11 files changed, 810 insertions(+) create mode 100755 daq create mode 100644 daq.c create mode 100644 daq.h create mode 100644 data.dat create mode 100644 images/.gitkeep create mode 100644 images/conexion_sensores.png create mode 100644 main.c create mode 100755 resources/config-uart-pins.sh create mode 100644 resources/ebb-set-uart-pins.service create mode 100644 uart.c create mode 100644 uart.h diff --git a/daq b/daq new file mode 100755 index 0000000000000000000000000000000000000000..bc1781d7ae03e17fc6bb17b5618c0349882d612e GIT binary patch literal 13952 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 literal 0 HcmV?d00001 diff --git a/daq.c b/daq.c new file mode 100644 index 0000000..d935834 --- /dev/null +++ b/daq.c @@ -0,0 +1,124 @@ +/* +*/ +#include "daq.h" + +//DEFINITIOS +#define data_file_path "./DATA/data.dat" + +int sensConf(unsigned char uartNumber, int baudRate, unsigned char mode[], unsigned char response[], int tries) +{ + int count; + + uartConf(uartNumber, baudRate); + while(tries){ + uartTransmit(uartNumber, mode); + tcdrain(uartFile[uartNumber]); //wait all data has been sent + printf("Command sended.\n"); + //usleep(100000); //give the sensor a chance to respond + count = uartReceive(uartNumber); + if (count == 0) printf("There was no data available to read!\n"); + else if (strcmp(receive[uartNumber], response) == 0) { + printf("Sensor configurated.\n"); + return 0; + } else { + printf("The following was read in [%d]: %s\n",count,receive[uartNumber]); + //char *c = receive[uartNumber]; + //while (*c != '\0'){ + // printf("%d = '%c'\n",*c, *c); + // c++; + //} + } + tries --; + } + printf("Sensor configuration failed.\n"); + return -1; +} + +int DAQ(int t_hrs, int sp_s) +{ + FILE* dfp; // create a file pointer + const char data_header[200] = + "t\tCO2\tCO2 f\tCO\tCO f\tO2\tO2\tT CO\tT O2\tP CO\tP O2\tRH\n"\ + "s\tppm\tppm\tppm\tppm\tppO2\t%\t°C*10\t°C\tmBar\tmBar\t%"; + char co2_uf[10]="", co2_f[10]="", + co_uf[10]="", co_f[10]="", + o2_ppm[10]="", o2_xcent[10]="", + co_temp[10]="", o2_temp[10]="", + co_press[10]="", o2_press[10]="", + co_relH[10]="", DATA[200]=""; //measurements varirables + time_t curtime; //current time (date) + clock_t start_t, end_t; //processing time measurements variables + time_t next_samp_time, t0; //time control variables + double iteration_time_ms = sp_s*1e6 - 0.2e6; //cicle iteration maximum time + double inactivity_time = 1; //time to sleep + + time(&curtime); //saving date in curtime + //registro datos de inicio + dfp = fopen(data_file_path, "w"); // open file for writing + // send the value to the file + fprintf(dfp, "Starting DAQ at %s\n", ctime(&curtime)); + fclose(dfp); // close the file using the file pointer + printf("%s", colums); //display variables colums + //ciclo + next_samp_time = time(NULL)+1; //setting next sampling time + t0 = next_samp_time; //saving initial time + for(time_t t = 0; t < (t_hrs*3600); t+=sp_s){ //cycle from 0 to adquisition time (seconds), incrementing sampling period + //checking inactivity time + if (inactivity_time <= 1){ + usleep((int)inactivity_time); //inactivity + } + else{ + printf("Ejecution time exceded.\n%s", colums); + next_samp_time = time(NULL)+1; //updating time values + t = next_samp_time-t0; + } + while(next_samp_time != time(NULL)); //synchronizing/waiting to start measurements + + start_t = clock(); //saving start time + uartTransmit(COAF, get_readigns); //transmiting commands to sensors + uartTransmit(LOX_O2, Readings_OX); + uartTransmit(SprintIR, get_readigns); + uartReceive(COAF); //receiving replys from + uartReceive(LOX_O2); + uartReceive(SprintIR); + //interpreting and spliting measurements in variables + memcpy(co2_uf, getMeasures(receive[SprintIR],'z', 5), 5); + memcpy(co2_f, getMeasures(receive[SprintIR],'Z', 5), 5); + memcpy(co_uf, getMeasures(receive[COAF], 'z', 5), 5); + memcpy(co_f, getMeasures(receive[COAF], 'Z', 5), 5); + memcpy(o2_ppm, getMeasures(receive[LOX_O2], 'O', 6), 6); + memcpy(o2_xcent, getMeasures(receive[LOX_O2], '%', 6), 6); + memcpy(co_temp, getMeasures(receive[COAF], 'T', 5), 5); + memcpy(o2_temp, getMeasures(receive[LOX_O2], 'T', 5), 5); + memcpy(co_press, getMeasures(receive[COAF], 'B', 5), 5); + memcpy(o2_press, getMeasures(receive[LOX_O2], 'P', 4), 4); + memcpy(co_relH, getMeasures(receive[COAF], 'H', 5), 5); + //saving formated measurements in string DATA + sprintf(DATA, + "%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s", + (int)t, co2_uf, co2_f, co_uf, co_f, o2_ppm, o2_xcent, + co_temp, o2_temp, co_press, o2_press, co_relH); + printf("\r%s", DATA); //showing measurements on display + + dfp = fopen(data_file_path, "a"); // open file for writing + fprintf(dfp, "%s\n", DATA); // saving measurements string to data file + fclose(dfp); // close the file using the file pointer + next_samp_time += sp_s; //adding sampling period to next_samp_time + end_t = clock(); //saving end time + //calculate time to sleep + inactivity_time = iteration_time_ms - ((double)(end_t - start_t)*1e6 / CLOCKS_PER_SEC); + } + + return 0; +} + +char *getMeasures(char src[], char fval, int nchar) +{ + char * ptr = &src[0]; + static char s[10]=""; + + while(*ptr != fval) ptr++; + ptr += 2; + memcpy(s, ptr, nchar); + return s; +} diff --git a/daq.h b/daq.h new file mode 100644 index 0000000..e9e26c1 --- /dev/null +++ b/daq.h @@ -0,0 +1,41 @@ + +#ifndef DAQ_H +#define DAQ_H + +//HEADERS +#include +#include +#include +#include +#include +#include +#include "uart.h" + +//DEFINITIONS +#define SprintIR 4 //co2 sensor +#define COAF 1 //co sensor +#define LOX_O2 2 //o2 + +//comands +#define Rep_Dev_ID "Y\r\n" +#define Pulling_Mode "K 2\r\n" +#define OX_P_Mode "M 1\r\n" +#define FILnUNFIL "M 6\r\n" +#define unf_gas_con "z\r\n" +#define fil_gas_con "Z\r\n" +#define Temperature "T\r\n" +#define get_readigns "Q\r\n" +#define percent_oxigen "%\r\n" +#define ppm_oxigen "O\r\n" +#define M_zZTHBD "M 14406\r\n" +#define M_zZTHB "M 12358\r\n" +#define Readings_OX "A\r\n" + +//FUNCTIONS +int sensConf(unsigned char uartNumber, int baudRate, unsigned char mode[], unsigned char response[], int tries); +int measure(unsigned char uartNumber, unsigned char command[], int multiplier, int excess); +char *getMeasures(char src[], char fval, int nchar); +int str2int(unsigned char *ptr); +int DAQ(int t_hrs, int sp_s); + +#endif diff --git a/data.dat b/data.dat new file mode 100644 index 0000000..0ebb9e0 --- /dev/null +++ b/data.dat @@ -0,0 +1,458 @@ +Fri Feb 28 17:05:16 2020 +Starting DAQ +time(s) CO2 unfil(ppm) CO2 fil(ppm) CO unfil(ppm) CO fil(ppm) O2(ppm) O2(%) Temperaure C02(ºC*10) Temperaure 02(ºC) Pressure C02(.mBar) Presure 02(mBar) Relative Humidity(.) +0 00243 00236 00000 00000 0165.1 020.36 01254 +24.8 00811 0811 00382 +1 00226 00238 00226 00000 0165.1 020.36 01254 +25.1 00811 0811 00382 +2 00240 00238 00001 00000 0165.2 020.36 01254 +25.0 00813 0811 00382 +3 00243 00236 00000 00000 0165.2 020.36 01254 +25.0 00814 0811 00382 +4 00227 00240 00002 00000 0165.1 020.37 01254 +25.2 00814 0811 00382 +5 00241 00242 00000 00000 0165.1 020.36 01254 +24.8 00814 0811 00382 +6 00235 00243 00000 00000 0165.1 020.36 01254 +25.2 00814 0811 00382 +7 00233 00239 00000 00000 0165.1 020.36 01254 +24.8 00813 0811 00381 +8 00231 00239 00000 00000 0165.1 020.36 01253 +25.1 00814 0811 00381 +9 00241 00237 00000 00000 0165.0 020.36 01253 +24.8 00813 0811 00381 +10 00241 00236 00000 00000 0165.0 020.35 01253 +25.1 00813 0811 00381 +11 00242 00238 00000 00000 0165.0 020.35 01253 +24.9 00813 0811 00381 +12 00227 00239 00000 00000 0165.0 020.35 01253 +24.9 00814 0811 00381 +13 00243 00240 00000 00000 0165.0 020.34 01253 +25.2 00814 0811 00380 +14 00238 00242 00001 00000 0165.0 020.34 01253 +24.9 00814 0811 00381 +15 00234 00240 00000 00000 0165.0 020.34 01253 +24.9 00813 0811 00381 +16 00241 00240 00000 00000 0165.0 020.34 01253 +24.9 00814 0811 00381 +17 00228 00240 00000 00000 0164.9 020.34 01253 +25.2 00813 0811 00382 +18 00243 00242 00000 00000 0164.9 020.34 01253 +24.9 00814 0811 00383 +19 00237 00242 00000 00000 0164.8 020.33 01253 +25.1 00814 0811 00383 +20 00243 00244 00000 00000 0164.8 020.33 01253 +25.1 00814 0811 00384 +21 00262 00254 00000 00000 0164.8 020.33 01253 +24.9 00813 0811 00384 +22 00269 00261 00000 00000 0164.8 020.33 01254 +25.0 00814 0811 00386 +23 00257 00261 00001 00000 0164.8 020.32 01254 +24.9 00814 0811 00387 +24 00257 00265 00000 00000 0164.8 020.32 01255 +24.8 00814 0811 00388 +25 00250 00266 00000 00000 0164.8 020.32 01255 +24.9 00814 0811 00387 +26 00269 00265 00000 00000 0164.7 020.32 01255 +25.2 00814 0811 00386 +27 00272 00268 00000 00000 0164.7 020.31 01255 +24.9 00814 0811 00385 +28 00267 00271 00000 00000 0164.7 020.32 01255 +24.9 00814 0811 00385 +29 00274 00280 00000 00000 0164.7 020.31 01255 +25.0 00814 0811 00385 +30 00272 00282 00000 00000 0164.7 020.31 01256 +24.8 00813 0811 00385 +31 00283 00280 00000 00000 0164.7 020.31 01256 +24.8 00814 0811 00385 +32 00278 00278 00000 00000 0164.7 020.31 01256 +25.1 00814 0811 00385 +33 00281 00281 00000 00000 0164.7 020.31 01257 +24.8 00814 0811 00384 +34 00282 00284 00000 00000 0164.7 020.31 01257 +25.1 00813 0811 00384 +35 00284 00286 00000 00000 0164.7 020.31 01257 +25.1 00813 0811 00383 +36 00272 00282 00000 00000 0164.7 020.30 01258 +24.9 00814 0811 00383 +37 00283 00281 00000 00000 0165.3 020.31 01258 +25.0 00814 0811 00383 +38 00271 00281 00000 00000 0165.3 020.38 01258 +25.0 00813 0811 00382 +39 00282 00284 00000 00000 0165.3 020.38 01259 +25.0 00814 0811 00382 +40 00285 00288 00000 00000 0165.2 020.38 01259 +24.8 00814 0811 00382 +41 00281 00285 00000 00000 0165.2 020.37 01259 +25.1 00813 0811 00381 +42 00293 00291 00000 00000 0165.2 020.37 01259 +25.0 00814 0811 00380 +43 00300 00301 00000 00000 0165.1 020.36 01259 +25.0 00811 0811 00380 +44 00337 00317 00000 00000 0165.1 020.36 01260 +25.0 00814 0811 00380 +45 00336 00335 00000 00000 0165.1 020.36 01260 +25.0 00813 0811 00380 +46 00362 00350 00000 00000 0165.1 020.36 01260 +24.8 00814 0811 00380 +47 00383 00365 00000 00000 0165.0 020.35 01261 +25.2 00814 0811 00381 +48 00384 00381 00000 00000 0165.0 020.35 01261 +25.2 00813 0811 00381 +49 00403 00396 00001 00000 0165.0 020.35 01262 +25.1 00814 0811 00383 +50 00428 00417 00002 00000 0164.9 020.34 01262 +25.0 00813 0811 00385 +51 00464 00442 00000 00000 0164.9 020.34 01263 +24.9 00813 0811 00387 +52 00484 00464 00000 00000 0164.8 020.33 01263 +24.9 00813 0811 00389 +53 00534 00494 00000 00001 0164.7 020.32 01264 +25.0 00814 0811 00391 +54 00546 00525 00002 00001 0164.7 020.31 01265 +25.0 00812 0811 00393 +55 00571 00550 00001 00001 0164.2 020.31 01266 +24.8 00815 0811 00396 +56 00581 00574 00001 00002 0164.1 020.25 01266 +25.2 00812 0811 00397 +57 00594 00596 00001 00002 0164.0 020.24 01267 +25.2 00813 0811 00400 +58 00639 00619 00002 00002 0164.0 020.23 01268 +24.9 00814 0811 00403 +59 00658 00645 00003 00002 0163.6 020.22 01269 +25.2 00813 0811 00406 +60 00680 00666 00003 00002 0163.5 020.17 01270 +25.1 00815 0811 00410 +61 00699 00689 00004 00003 0163.1 020.16 01270 +25.0 00812 0811 00413 +62 00730 00713 00004 00003 0163.1 020.11 01271 +25.0 00814 0811 00415 +63 00749 00735 00004 00003 0163.0 020.11 01271 +25.0 00812 0811 00417 +64 00765 00760 00005 00004 0162.6 020.10 01271 +25.2 00812 0811 00420 +65 00803 00788 00005 00004 0162.3 020.05 01272 +25.2 00813 0811 00423 +66 00829 00809 00004 00004 0162.2 020.01 01272 +25.2 00814 0811 00426 +67 00827 00824 00004 00004 0161.9 020.00 01273 +25.1 00814 0811 00430 +68 00860 00846 00004 00004 0161.8 019.96 01273 +25.2 00813 0811 00433 +69 00885 00871 00005 00005 0161.5 019.95 01274 +25.2 00812 0811 00437 +70 00908 00899 00006 00005 0161.4 019.91 01275 +25.2 00812 0811 00440 +71 00940 00922 00008 00006 0161.3 019.90 01276 +25.2 00813 0811 00445 +72 00958 00946 00006 00006 0161.2 019.89 01277 +25.2 00813 0811 00447 +73 00975 00962 00008 00006 0160.8 019.88 01277 +25.2 00813 0811 00451 +74 01013 00984 00009 00007 0160.4 019.83 01279 +25.1 00813 0811 00454 +75 01002 01005 00009 00007 0160.3 019.78 01279 +25.1 00813 0811 00457 +76 01031 01035 00008 00008 0159.9 019.77 01280 +25.4 00813 0811 00458 +77 01100 01060 00010 00009 0159.9 019.77 01281 +25.4 00813 0811 00460 +78 01068 01070 00006 00009 0159.9 019.72 01281 +25.1 00813 0811 00460 +79 01120 01090 00011 00009 0159.5 019.71 01281 +25.4 00813 0811 00462 +80 01129 01120 00009 00009 0159.1 019.67 01281 +25.2 00813 0811 00463 +81 01127 01135 00009 00010 0159.0 019.62 01282 +25.2 00814 0811 00465 +82 01167 01159 00010 00010 0158.6 019.61 01282 +25.2 00814 0811 00467 +83 01168 01181 00011 00010 0158.2 019.55 01283 +25.4 00813 0811 00468 +84 01204 01204 00010 00010 0157.8 019.51 01283 +25.4 00813 0811 00471 +85 01227 01216 00011 00010 0157.7 019.46 01284 +25.2 00813 0811 00474 +86 01246 01242 00011 00011 0157.4 019.45 01284 +25.3 00813 0811 00477 +87 01270 01261 00012 00011 0157.3 019.41 01284 +25.2 00813 0811 00480 +88 01297 01292 00013 00012 0157.3 019.40 01285 +25.2 00813 0811 00483 +89 01305 01313 00013 00012 0156.9 019.39 01285 +25.4 00813 0811 00485 +90 01349 01337 00013 00013 0156.6 019.35 01285 +25.5 00813 0811 00487 +91 01359 01351 00013 00013 0156.2 019.31 01285 +25.3 00814 0811 00490 +92 01371 01355 00014 00013 0156.2 019.27 01286 +25.4 00813 0811 00494 +93 01382 01378 00014 00013 0155.8 019.26 01286 +25.2 00814 0811 00497 +94 01438 01396 00014 00014 0155.8 019.22 01287 +25.4 00814 0811 00499 +95 01436 01413 00015 00014 0155.7 019.21 01288 +25.6 00814 0811 00501 +96 01423 01434 00015 00014 0155.3 019.20 01288 +25.4 00814 0811 00503 +97 01473 01450 00017 00015 0155.2 019.15 01288 +25.3 00814 0811 00504 +98 01488 01477 00016 00015 0154.8 019.14 01289 +25.7 00814 0811 00506 +99 01519 01491 00016 00016 0154.7 019.08 01289 +25.3 00814 0811 00507 +100 01523 01517 00018 00016 0154.3 019.07 01289 +25.5 00814 0811 00508 +101 01545 01526 00018 00017 0154.3 019.03 01289 +25.7 00813 0811 00509 +102 01589 01549 00017 00017 0153.9 019.02 01289 +25.7 00814 0811 00511 +103 01578 01573 00017 00017 0153.6 018.98 01289 +25.7 00814 0811 00514 +104 01606 01583 00018 00018 0153.5 018.94 01288 +25.7 00814 0811 00516 +105 01597 01597 00018 00018 0153.2 018.93 01289 +25.6 00814 0811 00519 +106 01628 01616 00017 00018 0152.8 018.89 01289 +25.5 00814 0811 00523 +107 01640 01632 00019 00018 0152.4 018.85 01289 +25.5 00813 0811 00528 +108 01665 01647 00018 00018 0152.0 018.79 01290 +25.4 00814 0811 00531 +109 01685 01662 00021 00020 0152.0 018.75 01291 +25.7 00813 0811 00537 +110 01712 01692 00021 00020 0151.6 018.74 01291 +25.4 00813 0811 00538 +111 01698 01700 00021 00021 0151.2 018.70 01291 +25.5 00813 0811 00540 +112 01701 01708 00023 00021 0150.9 018.65 01291 +25.6 00814 0811 00542 +113 01772 01728 00023 00022 0150.6 018.61 01291 +25.6 00814 0811 00544 +114 01761 01742 00023 00022 0150.6 018.57 01292 +25.7 00814 0811 00546 +115 01791 01767 00024 00023 0150.6 018.57 01292 +25.7 00814 0811 00549 +116 01797 01786 01797 00023 0150.5 018.57 01292 +25.7 00814 0811 00549 +117 01808 01811 00023 00023 0150.4 018.56 01292 +25.6 00813 0811 00552 +118 01809 01835 00024 00023 0150.4 018.55 01292 +25.8 00813 0811 00553 +119 01866 01862 00025 00024 0150.1 018.54 01293 +25.6 00813 0811 00555 +120 01887 01887 00026 00024 0150.0 018.51 01293 +25.6 00814 0811 00558 +121 01897 01890 00025 00025 0149.7 018.50 01294 +25.7 00813 0811 00562 +122 01918 01909 00025 00025 0149.3 018.46 01294 +25.6 00813 0811 00564 +123 01956 01924 00025 00026 0149.2 018.41 01295 +25.7 00812 0811 00564 +124 01937 01947 00025 00026 0148.9 018.40 01295 +25.7 00813 0811 00565 +125 02034 01983 00026 00026 0148.6 018.37 01295 +25.7 00813 0811 00567 +126 01981 01999 00027 00026 0148.5 018.32 01295 +25.9 00815 0811 00568 +127 01973 01997 00029 00027 0148.5 018.31 01295 +25.7 00813 0811 00569 +128 02029 02015 00029 00027 0148.0 018.31 01295 +26.0 00813 0811 00571 +129 02030 02036 00029 00028 0147.7 018.25 01295 +25.7 00813 0811 00573 +130 02068 02067 00028 00029 0147.3 018.21 01295 +25.8 00815 0811 00575 +131 02041 02071 00029 00029 0147.2 018.16 01295 +25.7 00813 0811 00577 +132 02085 02088 00030 00029 0146.9 018.16 01295 +25.7 00813 0811 00579 +133 02161 02099 00030 00030 0146.6 018.12 01295 +25.9 00814 0811 00581 +134 02106 02116 00032 00030 0146.3 018.07 01295 +25.7 00814 0811 00583 +135 02107 02123 00031 00030 0146.2 018.04 01295 +25.9 00813 0811 00585 +136 02149 02145 00032 00031 0146.1 018.03 01296 +25.7 00812 0811 00588 +137 02181 02170 00034 00032 0146.1 018.02 01296 +26.1 00813 0811 00590 +138 02206 02199 00033 00032 0145.8 018.01 01296 +25.7 00813 0811 00592 +139 02200 02217 00035 00033 0145.7 017.97 01296 +25.7 00813 0811 00595 +140 02239 02235 00034 00034 0145.3 017.97 01296 +26.0 00812 0811 00597 +141 02243 02239 00036 00034 0145.3 017.92 01296 +25.8 00813 0811 00599 +142 02244 02255 00035 00034 0144.9 017.92 01296 +25.9 00812 0811 00601 +143 02263 02273 00035 00035 0144.9 017.87 01296 +26.1 00813 0811 00603 +144 02304 02306 00036 00035 0144.6 017.87 01296 +25.8 00814 0811 00604 +145 02246 02322 00036 00035 0144.5 017.83 01296 +25.9 00814 0811 00607 +146 02348 02333 00038 00036 0144.4 017.82 01296 +26.1 00813 0811 00609 +147 02401 02352 00037 00037 0144.0 017.81 01296 +26.1 00812 0811 00612 +148 02345 02372 00038 00038 0143.7 017.75 01296 +26.1 00815 0811 00615 +149 02338 02376 00038 00038 0143.6 017.71 01296 +25.9 00814 0811 00619 +150 02353 02402 00039 00038 0143.3 017.71 01297 +26.0 00812 0811 00621 +151 02445 02428 00041 00039 0143.2 017.67 01297 +26.0 00814 0811 00623 +152 02425 02446 00041 00039 0143.2 017.66 01297 +26.1 00813 0811 00623 +153 02471 02450 00042 00040 0143.2 017.66 01297 +26.1 00813 0811 00625 +154 02524 02471 00038 00040 0142.9 017.66 01297 +26.1 00813 0811 00625 +155 02568 02485 00042 00041 0142.8 017.62 01298 +25.9 00814 0811 00627 +156 02494 02494 00042 00041 0142.5 017.61 01298 +26.0 00813 0811 00628 +157 02517 02512 00044 00042 0142.2 017.57 01298 +26.1 00813 0811 00630 +158 02597 02550 00042 00042 0141.9 017.53 01299 +26.1 00814 0811 00631 +159 02559 02559 00044 00043 0141.5 017.49 01299 +26.1 00813 0811 00632 +160 02588 02579 00044 00043 0141.5 017.45 01299 +26.2 00812 0811 00632 +161 02570 02579 00045 00043 0141.2 017.45 01299 +26.0 00814 0811 00633 +162 02561 02588 00044 00044 0141.1 017.41 01299 +26.0 00814 0811 00633 +163 02664 02603 00046 00044 0141.1 017.40 01299 +26.3 00814 0811 00634 +164 02632 02618 00044 00045 0141.0 017.40 01299 +26.0 00814 0811 00635 +165 02600 02650 00047 00045 0140.7 017.39 01298 +26.2 00813 0811 00636 +166 02720 02683 00047 00045 0140.7 017.36 01298 +26.1 00813 0811 00638 +167 02679 02679 00046 00046 0140.4 017.35 01298 +26.1 00814 0811 00640 +168 02707 02693 00047 00047 0140.4 017.31 01298 +26.1 00813 0811 00641 +169 02693 02721 00048 00047 0140.0 017.31 01298 +26.3 00813 0811 00642 +170 02703 02716 00048 00048 0140.0 017.27 01298 +26.1 00815 0811 00644 +171 02805 02731 00048 00048 0139.7 017.26 01297 +26.3 00814 0811 00645 +172 02694 02740 00050 00049 0139.6 017.22 01297 +26.3 00814 0811 00647 +173 02704 02745 00051 00049 0139.5 017.21 01297 +26.2 00813 0811 00649 +174 02732 02740 00051 00050 0139.5 017.21 01297 +26.2 00814 0811 00651 +175 02814 02769 00051 00050 0139.1 017.20 01297 +26.4 00814 0811 00653 +176 02838 02788 00052 00051 0139.1 017.15 01297 +26.1 00814 0811 00656 +177 02783 02801 00053 00052 0139.0 017.15 01297 +26.2 00812 0811 00658 +178 02779 02792 00051 00052 0139.0 017.14 01297 +26.1 00813 0811 00660 +179 02881 02797 00053 00052 0138.9 017.13 01297 +26.5 00814 0811 00661 +180 02821 02812 00054 00053 0138.6 017.13 01297 +26.4 00814 0811 00663 +181 02862 02825 00055 00053 0138.5 017.09 01297 +26.2 00814 0811 00665 +182 02844 02816 00057 00055 0138.1 017.08 01297 +26.3 00813 0811 00666 +183 02825 02816 00057 00056 0138.1 017.04 01298 +26.5 00813 0811 00668 +184 02830 02821 00059 00057 0138.1 017.03 01298 +26.2 00813 0811 00668 +185 02779 02812 00059 00058 0137.9 017.03 01298 +26.5 00813 0811 00668 +186 02848 02807 00061 00060 0137.8 017.00 01298 +26.3 00813 0811 00667 +187 02812 02807 00061 00060 0137.8 016.99 01298 +26.2 00813 0811 00666 +188 02728 02802 00061 00061 0137.7 016.99 01298 +26.2 00814 0811 00666 +189 02733 02779 00061 00061 0137.7 016.99 01297 +26.3 00813 0811 00666 +190 02815 02783 00061 00061 0137.7 016.99 01297 +26.2 00813 0811 00666 +191 02764 02774 00061 00061 0137.4 016.98 01297 +26.1 00813 0811 00666 +192 02783 02792 00062 00061 0137.4 016.98 01297 +26.1 00813 0811 00666 +193 02727 02788 00059 00061 0137.4 016.95 01297 +26.2 00813 0811 00666 +194 02823 02796 00061 00061 0137.4 016.95 01297 +26.6 00815 0811 00666 +195 02740 02800 00062 00061 0137.4 016.94 01296 +26.5 00814 0811 00666 +196 02777 02787 00061 00061 0137.3 016.94 01296 +26.2 00814 0811 00666 +197 02809 02790 00062 00061 0137.3 016.93 01296 +26.2 00813 0811 00667 +198 02776 02795 00060 00061 0137.3 016.93 01296 +26.4 00813 0811 00667 +199 02767 02767 00061 00061 0137.3 016.93 01295 +26.4 00813 0811 00667 +200 02812 02781 00061 00061 0137.2 016.93 01295 +26.6 00814 0811 00668 +201 02794 02794 00061 00061 0137.2 016.92 01295 +26.3 00813 0811 00668 +202 02789 02794 00062 00061 0137.2 016.92 01294 +26.4 00813 0811 00669 +203 02853 02793 00061 00062 0137.2 016.92 01294 +26.4 00814 0811 00669 +204 02760 02788 00061 00062 0137.2 016.92 01294 +26.5 00813 0811 00670 +205 02747 02774 00060 00062 0137.1 016.91 01294 +26.6 00812 0811 00670 +206 02769 02774 00061 00062 0137.1 016.91 01293 +26.5 00815 0811 00671 +207 02778 02769 00063 00062 0137.1 016.91 01293 +26.6 00813 0811 00671 +208 02709 02769 00063 00062 0137.0 016.91 01293 +26.6 00813 0811 00671 +209 02777 02773 00061 00063 0137.0 016.90 01293 +26.3 00813 0811 00672 +210 02708 02772 00062 00063 0137.0 016.90 01293 +26.4 00812 0811 00672 +211 02749 02776 00061 00062 0137.0 016.90 01292 +26.6 00812 0811 00673 +212 02799 02771 00062 00062 0137.0 016.90 01292 +26.4 00813 0811 00673 +213 02807 02771 00062 00062 0137.0 016.90 01292 +26.5 00813 0811 00674 +214 02780 02780 00062 00062 0137.0 016.90 01292 +26.4 00813 0811 00674 +215 02756 02756 00063 00062 0137.0 016.89 01291 +26.4 00815 0811 00675 +216 02820 02775 00062 00062 0136.9 016.89 01291 +26.6 00813 0811 00675 +217 02783 02788 00061 00062 0136.9 016.89 01291 +26.4 00813 0811 00676 +218 02792 02783 00061 00062 0136.9 016.88 01291 +26.5 00814 0811 00676 +219 02791 02787 00061 00062 0136.9 016.88 01291 +26.4 00813 0811 00676 +220 02819 02782 00063 00062 0136.9 016.89 01290 +26.6 00814 0811 00677 +221 02759 02773 00061 00062 0136.9 016.88 01290 +26.6 00813 0811 00677 +222 02740 02768 00062 00062 0136.9 016.88 01290 +26.6 00814 0811 00678 +223 02753 02763 00062 00062 0136.8 016.88 01290 +26.6 00813 0811 00678 +224 02780 02762 00062 00063 0136.8 016.87 01289 +26.5 00814 0811 00679 +225 02844 02762 00063 00063 0136.8 016.87 01289 +26.5 00812 0811 00679 +226 02688 02734 00063 00063 0136.8 016.87 01289 +26.4 00814 0811 00680 +227 02747 02752 00063 00063 0136.8 016.87 01289 +26.4 00813 0811 00680 +228 02751 02742 00063 00063 0136.8 016.87 01289 +26.5 00813 0811 00680 +229 02677 02728 00062 00063 0136.8 016.87 01288 +26.5 00814 0811 00681 +230 02691 02728 00065 00063 0136.8 016.87 01288 +26.5 00813 0811 00681 +231 02718 02732 02718 00063 0136.8 016.87 01288 +26.6 00813 0811 00681 +232 02745 02746 00063 00063 0136.8 016.87 01288 +26.5 00812 0811 00682 +233 02795 02749 00063 00063 0136.8 016.87 01288 +26.6 00813 0811 00682 +234 02726 02740 00062 00063 0136.8 016.87 01288 +26.5 00814 0811 00682 +235 02739 02749 00063 00062 0136.7 016.86 01288 +26.4 00814 0811 00683 +236 02812 02748 00063 00062 0136.7 016.86 01287 +26.5 00813 0811 00683 +237 02735 02744 00061 00062 0136.7 016.86 01287 +26.5 00813 0811 00683 +238 02720 02738 00061 00062 0136.7 016.86 01287 +26.5 00813 0811 00683 +239 02802 02756 00061 00062 0136.7 016.86 01287 +26.6 00813 0811 00684 +240 02719 02752 00062 00062 0136.7 016.86 01287 +26.6 00814 0811 00684 +241 02756 02751 00063 00062 0136.7 016.86 01287 +26.4 00813 0811 00685 +242 02751 02746 00063 00062 0136.7 016.86 01287 +26.4 00814 0811 00685 +243 02718 02737 00063 00063 0136.7 016.86 01286 +26.4 00811 0811 00685 +244 02722 02732 00061 00062 0136.7 016.86 01286 +26.4 00813 0811 00685 +245 02704 02736 00062 00063 0136.7 016.86 01286 +26.6 00814 0811 00685 +246 02781 02758 00062 00063 0136.6 016.85 01286 +26.5 00813 0811 00685 +247 02698 02744 00062 00062 0136.6 016.85 01286 +26.5 00814 0811 00686 +248 02758 02753 00062 00062 0136.6 016.85 01286 +26.4 00813 0811 00686 +249 02743 02734 00061 00062 0136.6 016.84 01285 +26.6 00813 0811 00686 +250 02688 02739 00062 00062 0136.6 016.84 01285 +26.7 00814 0811 00687 +251 02729 02734 00062 00062 0136.5 016.84 01285 +26.5 00812 0811 00687 +252 02682 02711 00063 00062 0136.5 016.84 01285 +26.4 00813 0811 00687 +253 02705 02715 00063 00062 0136.5 016.83 01285 +26.7 00813 0811 00687 +254 02682 02715 00061 00062 0136.5 016.83 01285 +26.6 00814 0811 00687 +255 02709 02732 00062 00062 0136.5 016.83 01285 +26.5 00813 0811 00688 +256 02741 02737 00062 00062 0136.5 016.83 01284 +26.5 00814 0811 00688 +257 02694 02722 00063 00062 0136.5 016.83 01284 +26.6 00813 0811 00688 +258 02708 02745 00062 00062 0136.5 016.83 01284 +26.7 00813 0811 00688 +259 02717 02727 00061 00062 0136.5 016.83 01284 +26.7 00814 0811 00688 +260 02699 02735 00062 00062 0136.5 016.83 01284 +26.6 00813 0811 00688 +261 02679 02712 00061 00062 0136.4 016.83 01284 +26.6 00813 0811 00688 +262 02730 02744 00061 00061 0136.4 016.82 01284 +26.7 00813 0811 00689 +263 02702 02748 00062 00061 0136.4 016.82 01284 +26.7 00814 0811 00689 +264 02770 02729 00064 00062 0136.4 016.82 01284 +26.4 00812 0811 00689 +265 02719 02725 00062 00062 0136.4 016.82 01283 +26.6 00813 0811 00689 +266 02724 02728 00064 00062 0136.4 016.82 01283 +26.5 00814 0811 00689 +267 02747 02728 00063 00062 0136.4 016.82 01283 +26.6 00812 0811 00689 +268 02677 02733 00061 00062 0136.1 016.82 01283 +26.5 00814 0811 00690 +269 02682 02718 00061 00062 0136.1 016.82 01283 +26.5 00813 0811 00690 +270 02677 02723 00062 00062 0136.1 016.78 01283 +26.6 00813 0811 00690 +271 02749 02723 00061 00061 0136.1 016.78 01283 +26.6 00814 0811 00690 +272 02718 02713 00061 00061 0136.1 016.78 01283 +26.6 00814 0811 00690 +273 02722 02713 00062 00061 0136.1 016.79 01283 +26.5 00814 0811 00690 +274 02740 02726 00062 00061 0136.1 016.79 01282 +26.5 00814 0811 00690 +275 02771 02726 00060 00061 0136.2 016.79 01282 +26.4 00814 0811 00690 +276 02689 02725 00061 00061 0136.2 016.79 01282 +26.5 00814 0811 00691 +277 02766 02730 00062 00061 0136.2 016.79 01282 +26.4 00812 0811 00691 +278 02693 02711 00061 00061 0136.2 016.79 01282 +26.6 00813 0811 00691 +279 02679 02715 00062 00061 0136.2 016.79 01282 +26.6 00812 0811 00691 +280 02701 02715 00063 00062 0136.2 016.79 01282 +26.4 00814 0811 00691 +281 02751 02710 00060 00062 0136.2 016.79 01282 +26.5 00813 0811 00691 +282 02696 02706 00060 00062 0136.2 016.79 01282 +26.6 00812 0811 00691 +283 02678 02719 00060 00061 0136.2 016.79 01281 +26.6 00813 0811 00691 +284 02677 02723 00062 00062 0136.2 016.79 01281 +26.5 00813 0811 00691 +285 02705 02719 00061 00062 0136.2 016.79 01281 +26.7 00814 0811 00691 +286 02668 02718 00062 00062 0136.1 016.79 01281 +26.6 00813 0811 00692 +287 02690 02709 00060 00062 0136.2 016.79 01281 +26.6 00814 0811 00692 +288 02718 02708 00061 00062 0136.2 016.79 01281 +26.5 00812 0811 00692 +289 02639 02726 00061 00062 0136.2 016.79 01281 +26.6 00812 0811 00692 +290 02703 02721 00060 00061 0136.1 016.79 01281 +26.4 00813 0811 00692 +291 02707 02717 00061 00061 0136.1 016.79 01281 +26.5 00814 0811 00692 +292 02726 02717 00061 00061 0136.1 016.79 01281 +26.7 00812 0811 00692 +293 02720 02716 00061 00061 0136.1 016.78 01281 +26.6 00812 0811 00692 +294 02747 02720 00061 00061 0136.2 016.79 01281 +26.6 00813 0811 00692 +295 02765 02720 00061 00061 0136.2 016.79 01281 +26.6 00812 0811 00692 +296 02742 02720 00060 00061 0136.2 016.79 01280 +26.6 00813 0811 00692 +297 02706 02701 00061 00061 0136.2 016.79 01280 +26.3 00813 0811 00692 +298 02637 02701 00062 00061 0136.2 016.79 01280 +26.5 00812 0811 00692 +299 02691 02701 00061 00061 0136.1 016.79 01280 +26.5 00812 0811 00692 +300 02718 02718 00061 00062 0136.1 016.79 01280 +26.3 00813 0811 00693 +301 02650 02700 00060 00062 0136.1 016.79 01280 +26.6 00813 0811 00693 +302 02681 02696 00061 00062 0136.1 016.78 01280 +26.6 00812 0811 00693 +303 02704 02700 00062 00061 0136.1 016.78 01280 +26.6 00813 0811 00693 +304 02658 02699 00062 00061 0136.1 016.78 01280 +26.5 00813 0811 00693 +305 02704 02695 00062 00061 0136.1 016.78 01280 +26.5 00812 0811 00693 +306 02713 02695 00062 00061 0136.1 016.78 01279 +26.3 00812 0811 00693 +307 02689 02694 00061 00061 0136.1 016.78 01279 +26.3 00815 0811 00693 +308 02698 02694 02698 00061 0136.1 016.78 01279 +26.3 00815 0811 00693 +309 02680 02698 00058 00061 0136.1 016.78 01279 +26.4 00812 0811 00692 +310 02491 02625 00053 00059 0136.4 016.78 01279 +26.4 00814 0811 00676 +311 02241 02447 00047 00056 0137.0 016.82 01278 +26.5 00813 0811 00647 +312 02016 02195 00044 00052 0139.3 016.90 01278 +26.3 00813 0811 00617 +313 01744 01952 00039 00047 0139.9 017.17 01278 +26.6 00814 0811 00592 +314 01614 01736 00036 00043 0142.1 017.26 01277 +26.4 00813 0811 00566 +315 01436 01572 00032 00038 0144.1 017.53 01276 +26.3 00813 0811 00542 +316 01332 01431 00028 00035 0146.1 017.77 01276 +26.5 00811 0811 00519 +317 01162 01285 00024 00031 0146.8 018.01 01276 +26.4 00813 0811 00499 +318 01083 01162 00023 00027 0149.1 018.10 01275 +26.2 00813 0811 00480 +319 00979 01045 00020 00024 0149.7 018.38 01275 +26.3 00814 0811 00464 +320 00888 00952 00017 00022 0150.4 018.46 01275 +26.3 00813 0811 00450 +321 00834 00879 00018 00020 0151.2 018.55 01274 +26.4 00813 0811 00437 +322 00760 00811 00015 00018 0153.1 018.64 01274 +26.3 00814 0811 00426 +323 00698 00747 00015 00016 0153.7 018.88 01273 +26.4 00814 0811 00416 +324 00646 00689 00013 00015 0154.4 018.95 01273 +26.4 00814 0811 00408 +325 00610 00645 00010 00014 0155.0 019.04 01273 +26.4 00813 0811 00401 +326 00554 00601 00009 00012 0155.7 019.11 01272 +26.4 00814 0811 00395 +327 00530 00561 00010 00011 0156.3 019.19 01272 +26.5 00814 0811 00389 +328 00507 00527 00008 00010 0157.0 019.27 01271 +26.2 00813 0811 00385 +329 00472 00493 00009 00010 0157.7 019.36 01271 +26.4 00814 0811 00381 +330 00472 00469 00008 00009 0158.3 019.44 01271 +26.1 00813 0811 00378 +331 00418 00445 00008 00008 0158.8 019.53 01271 +26.4 00814 0811 00375 +332 00427 00427 00008 00008 0159.3 019.59 01271 +26.3 00812 0811 00372 +333 00406 00410 00007 00007 0159.8 019.64 01270 +26.4 00814 0811 00370 +334 00380 00396 00008 00007 0160.2 019.70 01270 +26.2 00813 0811 00369 +335 00352 00374 00006 00007 0160.6 019.76 01270 +26.1 00814 0811 00367 +336 00356 00369 00006 00007 0161.1 019.80 01270 +26.2 00813 0811 00366 +337 00352 00362 00006 00006 0161.1 019.86 01270 +26.2 00814 0811 00365 +338 00347 00348 00006 00006 0161.5 019.87 01269 +26.3 00813 0811 00364 +339 00325 00342 00004 00006 0161.9 019.92 01269 +26.1 00814 0811 00363 +340 00322 00332 00004 00005 0162.0 019.96 01269 +26.1 00814 0811 00362 +341 00305 00322 00006 00005 0162.0 019.97 01268 +26.1 00813 0811 00362 +342 00316 00319 00006 00005 0162.1 019.98 01268 +26.1 00814 0811 00361 +343 00307 00314 00005 00005 0162.6 019.99 01268 +26.2 00813 0811 00361 +344 00289 00305 00005 00005 0163.1 020.05 01268 +26.2 00814 0811 00361 +345 00300 00298 00003 00005 0163.1 020.05 01268 +26.2 00813 0811 00361 +346 00287 00294 00003 00005 0163.1 020.11 01268 +26.4 00813 0811 00361 +347 00290 00294 00004 00004 0163.2 020.12 01267 +26.3 00814 0811 00360 +348 00272 00287 00003 00004 0163.2 020.12 01267 +26.1 00813 0811 00361 +349 00287 00289 00003 00004 0163.3 020.13 01267 +26.1 00813 0811 00360 +350 00267 00287 00004 00003 0163.4 020.14 01267 +26.2 00813 0811 00361 +351 00280 00281 00003 00003 0163.4 020.14 01267 +26.1 00813 0811 00361 +352 00285 00284 00002 00003 0163.5 020.15 01266 +26.1 00813 0811 00361 +353 00280 00282 00002 00003 0163.5 020.16 01266 +26.3 00813 0811 00361 +354 00286 00277 00003 00002 0163.6 020.17 01266 +26.1 00813 0811 00361 +355 00276 00276 00004 00003 0163.6 020.17 01266 +26.2 00813 0811 00361 +356 00282 00275 00002 00003 0163.7 020.18 01266 +26.3 00813 0811 00361 +357 00288 00277 00004 00003 0163.7 020.18 01266 +26.1 00813 0811 00361 +358 00270 00273 00003 00003 0163.8 020.19 01265 +26.3 00813 0811 00361 +359 00260 00269 00002 00003 0163.8 020.20 01265 +26.0 00813 0811 00362 +360 00261 00266 00003 00003 0163.9 020.20 01265 +26.2 00813 0811 00361 +361 00281 00271 00003 00003 0163.9 020.21 01265 +26.1 00813 0811 00361 +362 00266 00268 00003 00003 0163.9 020.21 01265 +26.3 00814 0811 00361 +363 00268 00268 00002 00002 0163.9 020.21 01265 +26.1 00813 0811 00362 +364 00261 00269 00003 00002 0164.0 020.21 01265 +26.0 00813 0811 00362 +365 00270 00269 00002 00002 0164.0 020.22 01265 +26.1 00814 0811 00362 +366 00281 00267 00003 00002 0164.1 020.23 01264 +26.0 00813 0811 00362 +367 00279 00266 00002 00003 0164.1 020.23 01264 +25.9 00813 0811 00362 +368 00263 00266 00003 00003 0164.1 020.24 01264 +26.1 00812 0811 00362 +369 00253 00263 00002 00003 0164.1 020.24 01264 +25.9 00813 0811 00363 +370 00262 00267 00003 00002 0164.2 020.24 01264 +26.1 00813 0811 00363 +371 00258 00263 00002 00002 0164.2 020.25 01264 +26.0 00813 0811 00363 +372 00269 00267 00002 00002 0164.3 020.25 01264 +26.1 00813 0811 00363 +373 00273 00267 00002 00002 0164.3 020.25 01264 +26.0 00813 0811 00363 +374 00268 00266 00001 00002 0164.3 020.26 01264 +26.1 00813 0811 00363 +375 00271 00263 00003 00002 0164.3 020.26 01264 +25.9 00813 0811 00363 +376 00261 00263 00002 00002 0164.4 020.26 01263 +26.0 00813 0811 00363 +377 00260 00262 00002 00002 0164.4 020.27 01263 +26.1 00813 0811 00363 +378 00268 00263 00001 00002 0164.4 020.27 01263 +26.1 00813 0811 00364 +379 00263 00261 00003 00002 0164.5 020.28 01263 +26.0 00813 0811 00364 +380 00252 00262 00003 00002 0164.5 020.28 01263 +26.0 00813 0811 00364 +381 00259 00263 00002 00002 0164.5 020.28 01263 +25.9 00814 0811 00364 +382 00262 00262 00003 00002 0164.9 020.28 01263 +25.9 00813 0811 00364 +383 00260 00264 00002 00002 0164.9 020.33 01263 +26.1 00813 0811 00364 +384 00258 00261 00002 00002 0164.9 020.33 01263 +26.1 00813 0811 00364 +385 00263 00264 00002 00002 0164.9 020.33 01263 +26.1 00813 0811 00364 +386 00255 00259 00002 00002 0164.8 020.33 01263 +26.1 00813 0811 00364 +387 00262 00259 00001 00002 0164.9 020.33 01263 +25.9 00813 0811 00364 +388 00275 00258 00000 00001 0164.9 020.33 01263 +25.9 00813 0811 00364 +389 00251 00253 00001 00001 0164.9 020.33 01263 +26.0 00813 0811 00364 +390 00259 00256 00001 00001 0164.9 020.33 01263 +25.8 00813 0811 00364 +391 00249 00256 00001 00001 0164.9 020.33 01262 +25.9 00813 0811 00365 +392 00257 00258 00002 00001 0164.9 020.33 01262 +26.1 00814 0811 00365 +393 00258 00258 00002 00001 0164.9 020.33 01262 +25.8 00813 0811 00365 +394 00257 00257 00001 00001 0164.9 020.33 01262 +26.0 00813 0811 00365 +395 00261 00257 00001 00001 0164.9 020.33 01262 +25.8 00813 0811 00365 +396 00255 00260 00000 00001 0164.9 020.33 01262 +26.0 00813 0811 00365 +397 00262 00260 00001 00001 0164.9 020.34 01262 +25.8 00813 0811 00365 +398 00256 00258 00003 00001 0164.9 020.34 01262 +25.7 00813 0811 00365 +399 00265 00260 00002 00001 0164.9 020.34 01262 +25.9 00813 0811 00365 +400 00253 00259 00001 00001 0164.9 020.34 01262 +25.7 00814 0811 00365 +401 00257 00262 00001 00002 0165.0 020.34 01262 +25.9 00813 0811 00365 +402 00243 00260 00001 00001 0165.0 020.34 01262 +25.8 00814 0811 00365 +403 00257 00260 00000 00001 0165.0 020.34 01262 +26.0 00813 0811 00365 +404 00260 00262 00000 00001 0165.0 020.34 01261 +25.7 00813 0811 00366 +405 00254 00258 00002 00001 0165.0 020.34 01261 +25.8 00814 0811 00366 +406 00250 00260 00001 00001 0165.0 020.34 01261 +25.7 00813 0811 00366 +407 00256 00261 00000 00001 0165.0 020.34 01261 +26.1 00813 0811 00366 +408 00276 00258 00002 00001 0165.0 020.34 01261 +25.7 00813 0811 00366 +409 00263 00260 00002 00001 0165.0 020.34 01261 +25.8 00813 0811 00366 +410 00258 00260 00001 00001 0165.0 020.35 01261 +25.7 00814 0811 00366 +411 00253 00260 00000 00001 0165.0 020.35 01261 +25.8 00812 0811 00366 +412 00252 00258 00000 00001 0165.1 020.35 01261 +25.7 00813 0811 00366 +413 00251 00257 00000 00000 0165.0 020.35 01261 +25.8 00814 0811 00366 +414 00261 00258 00000 00000 0165.1 020.35 01261 +25.7 00814 0811 00367 +415 00254 00256 00001 00001 0165.1 020.36 01261 +25.9 00813 0811 00367 +416 00255 00255 00001 00001 0165.1 020.35 01261 +25.8 00812 0811 00367 +417 00262 00256 00001 00001 0165.1 020.35 01261 +25.9 00813 0811 00367 +418 00265 00255 00000 00001 0165.1 020.36 01260 +25.7 00813 0811 00367 +419 00244 00256 00002 00001 0165.1 020.36 01260 +25.7 00814 0811 00368 +420 00272 00257 00001 00001 0165.1 020.35 01260 +25.8 00812 0811 00368 +421 00259 00257 00001 00001 0165.2 020.36 01260 +26.0 00813 0811 00368 +422 00256 00258 00000 00001 0165.2 020.36 01260 +26.0 00812 0811 00368 +423 00263 00257 00263 00001 0165.1 020.37 01260 +25.8 00812 0811 00368 +424 00245 00256 00001 00001 0165.2 020.36 01260 +25.7 00812 0811 00368 +425 00241 00252 00001 00001 0165.2 020.37 01260 +25.7 00814 0811 00368 +426 00257 00258 00000 00001 0165.2 020.37 01260 +25.7 00812 0811 00368 +427 00248 00255 00001 00001 0165.1 020.37 01260 +25.8 00813 0811 00368 +428 00241 00252 00001 00001 0165.1 020.36 01260 +25.7 00813 0811 00369 +429 00249 00253 00001 00001 0165.1 020.36 01260 +25.7 00812 0811 00369 +430 00245 00254 00001 00001 0165.1 020.36 01260 +25.7 00813 0811 00369 +431 00260 00258 00001 00000 0165.1 020.36 01260 +25.7 00813 0811 00369 +432 00249 00259 00000 00001 0165.1 020.36 01260 +25.9 00812 0811 00369 +433 00256 00257 00000 00001 0165.1 020.36 01260 +25.9 00813 0811 00369 +434 00255 00257 00001 00001 0165.1 020.36 01260 +25.8 00812 0811 00369 +435 00251 00254 00000 00000 0165.1 020.36 01260 +25.9 00812 0811 00369 +436 00249 00254 00001 00000 0165.1 020.36 01260 +25.7 00812 0811 00369 +437 00267 00255 00001 00001 0165.1 020.36 01260 +25.7 00813 0811 00369 +438 00251 00251 00000 00001 0165.1 020.36 01260 +25.7 00814 0811 00369 +439 00241 00251 00000 00001 0165.1 020.36 01259 +25.8 00813 0811 00369 +440 00264 00253 00000 00001 0165.1 020.36 01259 +25.7 00813 0811 00369 +441 00250 00256 00000 00000 0165.0 020.35 01259 +25.7 00812 0811 00369 +442 00251 00256 00000 00000 0165.0 020.35 01259 +25.8 00812 0811 00369 +443 00247 00256 00000 00000 0165.0 020.35 01259 +25.7 00813 0811 00369 +444 00263 00257 00000 00000 0165.0 020.35 01259 +25.6 00812 0811 00369 +445 00247 00255 00000 00000 0165.0 020.35 01259 +25.7 00813 0811 00369 +446 00257 00253 00001 00000 0165.0 020.35 01259 +25.7 00812 0811 00369 +447 00256 00255 00000 00000 0165.0 020.35 01259 +25.8 00812 0811 00370 +448 00253 00256 00000 00000 0165.0 020.35 01259 +25.7 00813 0811 00370 +449 00248 00251 00000 00000 0165.0 020.34 01259 +25.6 00812 0811 00370 +450 00246 00253 00000 00000 0165.0 020.34 01259 +25.8 00812 0811 00370 +451 00244 00252 00000 00000 0165.0 020.34 01259 +25.5 00813 0811 00369 +452 00249 00252 00000 00000 0165.0 020.34 01259 +25.5 00812 0811 00370 +453 00268 00254 00000 00000 0165.0 020.35 01259 +25.7 00812 0811 00370 +454 00252 00252 00000 00000 0165.0 020.35 01259 +25.5 00813 0811 00370 diff --git a/images/.gitkeep b/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/images/conexion_sensores.png b/images/conexion_sensores.png new file mode 100644 index 0000000000000000000000000000000000000000..f2dda7534b814b61a1e75b61e703844edbe91895 GIT binary patch literal 33641 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 literal 0 HcmV?d00001 diff --git a/main.c b/main.c new file mode 100644 index 0000000..ec49808 --- /dev/null +++ b/main.c @@ -0,0 +1,36 @@ +#include "daq.h" + +int main(int argc, char *argv[]){ + + int T_acq, t_samp; + + if(argc!=3){ + printf("Invalid number of arguments,\n"\ + "Usage: daq \nexiting!\n"); + return -2; + } + + // configuring sensors + printf("Configuring CO2 sensor\n"); + sensConf(SprintIR, B9600, Pulling_Mode, " K 00002\r\n", 5); + sensConf(SprintIR, B9600, FILnUNFIL, " M 00006\r\n", 5); + printf("Configuring CO sensor\n"); + sensConf(COAF, B9600, Pulling_Mode, "K 00002\r\n", 5); + sensConf(COAF, B9600, M_zZTHB, "M 14406\r\n", 5); + printf("Configuring O2 sensor\n"); + sensConf(LOX_O2, B9600, OX_P_Mode, "M 01\r\n", 5); + + // acquiring + T_acq = atoi(argv[1]);//str to int + t_samp = atoi(argv[2]); + printf("Starting data acquisition with duration of %dh every %ds\n", T_acq, t_samp); + DAQ(T_acq, t_samp); + + // deinit uart + uartClose(SprintIR); + uartClose(COAF); + uartClose(LOX_O2); + // finishing + printf("Exiting of the program...\n"); + return 0; +} diff --git a/resources/config-uart-pins.sh b/resources/config-uart-pins.sh new file mode 100755 index 0000000..d950f4b --- /dev/null +++ b/resources/config-uart-pins.sh @@ -0,0 +1,18 @@ +#!/bin/bash +#uart1 +config-pin P9_24 uart +config-pin -q P9_24 +config-pin P9_26 uart +config-pin -q P9_26 + +#uart2 +config-pin P9_21 uart +config-pin -q P9_21 +config-pin P9_22 uart +config-pin -q P9_22 + +#uart4 +config-pin P9_13 uart +config-pin -q P9_13 +config-pin P9_11 uart +config-pin -q P9_11 \ No newline at end of file diff --git a/resources/ebb-set-uart-pins.service b/resources/ebb-set-uart-pins.service new file mode 100644 index 0000000..230fe94 --- /dev/null +++ b/resources/ebb-set-uart-pins.service @@ -0,0 +1,11 @@ +Description=Enable the UART pins on boot +After=generic-board-startup.service + +[Service] +Type=simple +User=root +WorkingDirectory=/usr/bin +ExecStart=/usr/bin/config-uart-pins.sh + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/uart.c b/uart.c new file mode 100644 index 0000000..7d1ea47 --- /dev/null +++ b/uart.c @@ -0,0 +1,87 @@ +/* + comments +*/ +//libraries +#include "uart.h" + +//file paths and global variables +#define incomplet_uart_path "/dev/ttyO" +struct termios options; //The termios structure + +// *** FUNCTIONS *** + +int uartConf(unsigned char uartNumber, int baudRate) +{ + unsigned char fullFileName[11]; + + //completing uart file path + if ((uartNumber==1)||(uartNumber==2)||(uartNumber==4)||(uartNumber==5)) + sprintf(fullFileName, incomplet_uart_path "%d", uartNumber); + else{ + perror("Wrong UART number. " \ + "UART numbers availables 1, 2, 4 or 5.\n"); + return UART_NUMBER_INCORRECT; + } + //openign uart file + printf("Configuring UART%d.\n", uartNumber); + if ((uartFile[uartNumber] = open(fullFileName, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK))<0){ + //if ((uartFile[uartNumber] = open(fullFileName, O_RDWR | O_NOCTTY | O_NDELAY))<0){ + //if ((uartFile[uartNumber] = open(fullFileName, O_RDWR | O_NOCTTY))<0){ + perror("UART: Failed to open the file.\n"); + return -1; + } + //Sets the parameters associated with file + tcgetattr(uartFile[uartNumber], &options); + //cleaning flags + options.c_ispeed = 0; + options.c_lflag = 0; + options.c_line = 0; + options.c_oflag = 0; + options.c_ospeed = 0; + // Set up the communications options: + // 8-bit, enable receiver, no modem control lines + options.c_cflag = baudRate | CS8 | CREAD | CLOCAL; + options.c_iflag = IGNPAR; //ignore partity errors, CR -> newline + //options.c_iflag = IGNPAR | ICRNL; //ignore partity errors, CR -> newline + //options.c_lflag = ICANON; + tcflush(uartFile[uartNumber], TCIOFLUSH); //discard file information not transmitted + tcsetattr(uartFile[uartNumber], TCSANOW, &options); //changes occur immmediately + printf("UART%d configurated.\n", uartNumber); + + return UART_FUNCTION_SUCCESSFUL; +} + +int uartClose(unsigned char uartNumber) +{ + printf("Closing UART%d.\n", uartNumber); + close(uartFile[uartNumber]); + return UART_FUNCTION_SUCCESSFUL; +} + +int uartTransmit(unsigned char uartNumber, unsigned char message[]) +{ + int count; + + //writing file + if ((count = write(uartFile[uartNumber], message, (strlen(message))))<0){ //send the string + perror("Failed to write to the output\n"); + return -1; + } + tcflush(uartFile[uartNumber], TCOFLUSH); + + return UART_FUNCTION_SUCCESSFUL; +} + +int uartReceive(unsigned char uartNumber) +{ + int count; + + /*if ((count = read(uartFile[uartNumber], (void*)receive[uartNumber], 100))<0){ //receive[uartNumber] the data + perror("Failed to read from the input\n"); + return -1; + }*/ + while((count = read(uartFile[uartNumber], (void*)receive[uartNumber], 100)) < 0); + tcflush(uartFile[uartNumber], TCIFLUSH); + + return count; +} diff --git a/uart.h b/uart.h new file mode 100644 index 0000000..b5bb2fa --- /dev/null +++ b/uart.h @@ -0,0 +1,35 @@ +// Guarding macro start +#ifndef UART_H +#define UART_H + +// Includes begin +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Error codes and return values +#define UART_FUNCTION_SUCCESSFUL 0 +#define UART_NUMBER_INCORRECT 1 +/*#define UART_BAUDRATE_INCORRECT 2 +#define UART_FIFO_ERROR 3 +#define UART_INCORRECT_PATH 4*/ + +//VARIABLES +int uartFile[6]; //file descriptor +unsigned char receive[6][100]; //declare a buffer for receiving data + +// Function declarations +int uartConf(uint8_t uartNumber, int baudRate); +int uartClose(uint8_t uartNumber); +int uartTransmit(uint8_t uartNumber, unsigned char message[]); +int uartReceive(uint8_t uartNumber); + +// Guarding macro end +#endif // UART_H