teste de publish

Committer:
brunofgc
Date:
Mon Apr 16 12:30:09 2018 +0000
Revision:
16:1b43a57ee676
Parent:
15:6d9e9cafe138
Child:
17:c046e4b07ded
Vers?o 16/04/2018 com modbus otimizado para 100 leituras

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brunofgc 0:8c59a494a451 1 #include "devices.h"
brunofgc 0:8c59a494a451 2
brunofgc 0:8c59a494a451 3 enum {
brunofgc 0:8c59a494a451 4 estadoConfiguracao_idle = 0,
brunofgc 0:8c59a494a451 5 estadoConfiguracao_creatingDevice,
brunofgc 0:8c59a494a451 6 estadoConfiguracao_alarmSet,
brunofgc 0:8c59a494a451 7 estadoConfiguracao_readingsSet,
brunofgc 4:3f92979d1ffb 8 estadoConfiguracao_scheduleSet,
brunofgc 4:3f92979d1ffb 9 estadoConfiguracao_scheduleExceptionSet
brunofgc 0:8c59a494a451 10 };
brunofgc 0:8c59a494a451 11
brunofgc 1:3f9e5b86d9e4 12 /*
brunofgc 1:3f9e5b86d9e4 13 Antigo
brunofgc 0:8c59a494a451 14 uint8_t resizeArray(uint32_t atual, uint32_t novo, char **array,uint16_t sizeUnit)
brunofgc 0:8c59a494a451 15 {
brunofgc 0:8c59a494a451 16 uint32_t i;
brunofgc 0:8c59a494a451 17 char *p = (char *) malloc(sizeUnit*novo);
brunofgc 0:8c59a494a451 18 char *aux;
brunofgc 0:8c59a494a451 19
brunofgc 0:8c59a494a451 20 if(p==NULL) {
brunofgc 0:8c59a494a451 21 return 0;
brunofgc 0:8c59a494a451 22 }
brunofgc 0:8c59a494a451 23
brunofgc 0:8c59a494a451 24 aux = *array;
brunofgc 0:8c59a494a451 25
brunofgc 0:8c59a494a451 26 if(atual) {
brunofgc 0:8c59a494a451 27 //So sigo em frente se tinha algo dentro deste array
brunofgc 0:8c59a494a451 28 for(i=0; i<(novo*sizeUnit); i++) {
brunofgc 0:8c59a494a451 29 p[i]=aux[i];
brunofgc 0:8c59a494a451 30 }
brunofgc 0:8c59a494a451 31 free(aux);
brunofgc 0:8c59a494a451 32 }
brunofgc 0:8c59a494a451 33
brunofgc 0:8c59a494a451 34 *array = p;
brunofgc 0:8c59a494a451 35 return 1;
brunofgc 0:8c59a494a451 36 }
brunofgc 1:3f9e5b86d9e4 37 */
brunofgc 1:3f9e5b86d9e4 38
brunofgc 2:ca3723da6668 39 /*uint8_t resizeArray(uint32_t atual, uint32_t novo, char **array,uint16_t sizeUnit)
brunofgc 1:3f9e5b86d9e4 40 {
brunofgc 1:3f9e5b86d9e4 41 uint32_t i;
brunofgc 1:3f9e5b86d9e4 42 char *p = (char *) malloc(sizeUnit*novo);
brunofgc 1:3f9e5b86d9e4 43
brunofgc 1:3f9e5b86d9e4 44 if(p==NULL) {
brunofgc 1:3f9e5b86d9e4 45 return 0;
brunofgc 1:3f9e5b86d9e4 46 }
brunofgc 1:3f9e5b86d9e4 47
brunofgc 1:3f9e5b86d9e4 48 if(atual) {
brunofgc 1:3f9e5b86d9e4 49 //So sigo em frente se tinha algo dentro deste array
brunofgc 1:3f9e5b86d9e4 50 for(i=0; i<(novo*sizeUnit); i++) {
brunofgc 1:3f9e5b86d9e4 51 p[i]=*array[i];
brunofgc 1:3f9e5b86d9e4 52 }
brunofgc 1:3f9e5b86d9e4 53 free(*array);
brunofgc 1:3f9e5b86d9e4 54 }
brunofgc 1:3f9e5b86d9e4 55
brunofgc 1:3f9e5b86d9e4 56 *array = p;
brunofgc 1:3f9e5b86d9e4 57 return 1;
brunofgc 2:ca3723da6668 58 }*/
brunofgc 0:8c59a494a451 59
brunofgc 0:8c59a494a451 60 void writeReadingsToSD(){
brunofgc 0:8c59a494a451 61 int i;
brunofgc 0:8c59a494a451 62 for(i=0;i<devices;i++){
brunofgc 0:8c59a494a451 63 dispositivos[i]->writeReadingsToSD();
brunofgc 0:8c59a494a451 64 }
brunofgc 0:8c59a494a451 65 }
brunofgc 0:8c59a494a451 66
brunofgc 0:8c59a494a451 67 void verifyAlarms(){
brunofgc 0:8c59a494a451 68 int i;
brunofgc 0:8c59a494a451 69 for(i=0;i<devices;i++){
brunofgc 0:8c59a494a451 70 dispositivos[i]->verifyAlarms();
brunofgc 0:8c59a494a451 71 }
brunofgc 0:8c59a494a451 72 }
brunofgc 0:8c59a494a451 73
brunofgc 0:8c59a494a451 74 void verifySchedules(){
brunofgc 0:8c59a494a451 75 int i;
brunofgc 0:8c59a494a451 76 for(i=0;i<devices;i++){
brunofgc 0:8c59a494a451 77 dispositivos[i]->verifySchedules();
brunofgc 0:8c59a494a451 78 }
brunofgc 0:8c59a494a451 79 }
brunofgc 0:8c59a494a451 80
brunofgc 0:8c59a494a451 81 void device::floatToBin(uint8_t dir, float *v,uint8_t *p)
brunofgc 0:8c59a494a451 82 {
brunofgc 0:8c59a494a451 83 //Variáveis locais
brunofgc 0:8c59a494a451 84 union {
brunofgc 0:8c59a494a451 85 char c[4];
brunofgc 0:8c59a494a451 86 float v;
brunofgc 0:8c59a494a451 87 }u;
brunofgc 0:8c59a494a451 88 int i;
brunofgc 0:8c59a494a451 89
brunofgc 0:8c59a494a451 90 if(dir) {
brunofgc 0:8c59a494a451 91 u.v = *v;
brunofgc 0:8c59a494a451 92 for(i=0; i<4; i++) {
brunofgc 0:8c59a494a451 93 p[i]=u.c[3-i];
brunofgc 0:8c59a494a451 94 }
brunofgc 0:8c59a494a451 95 } else {
brunofgc 0:8c59a494a451 96 for(i=0; i<4; i++) {
brunofgc 0:8c59a494a451 97 u.c[3-i]=p[i];
brunofgc 0:8c59a494a451 98 }
brunofgc 0:8c59a494a451 99 *v = u.v;
brunofgc 0:8c59a494a451 100 }
brunofgc 0:8c59a494a451 101 }
brunofgc 0:8c59a494a451 102
brunofgc 0:8c59a494a451 103 void device::uint32_t_ToBin(uint8_t dir, uint32_t *v,uint8_t *p)
brunofgc 0:8c59a494a451 104 {
brunofgc 0:8c59a494a451 105 //Variáveis locais
brunofgc 0:8c59a494a451 106 union {
brunofgc 0:8c59a494a451 107 char c[4];
brunofgc 0:8c59a494a451 108 uint32_t v;
brunofgc 0:8c59a494a451 109 }u;
brunofgc 0:8c59a494a451 110 int i;
brunofgc 0:8c59a494a451 111
brunofgc 0:8c59a494a451 112 if(dir) {
brunofgc 0:8c59a494a451 113 u.v = *v;
brunofgc 0:8c59a494a451 114 for(i=0; i<4; i++) {
brunofgc 0:8c59a494a451 115 p[i]=u.c[3-i];
brunofgc 0:8c59a494a451 116 }
brunofgc 0:8c59a494a451 117 } else {
brunofgc 0:8c59a494a451 118 for(i=0; i<4; i++) {
brunofgc 0:8c59a494a451 119 u.c[3-i]=p[i];
brunofgc 0:8c59a494a451 120 }
brunofgc 0:8c59a494a451 121 *v = u.v;
brunofgc 0:8c59a494a451 122 }
brunofgc 0:8c59a494a451 123 }
brunofgc 0:8c59a494a451 124
brunofgc 0:8c59a494a451 125 void device::uint16_t_ToBin(uint8_t dir, uint16_t *v,uint8_t *p)
brunofgc 0:8c59a494a451 126 {
brunofgc 0:8c59a494a451 127 //Variáveis locais
brunofgc 0:8c59a494a451 128 union {
brunofgc 0:8c59a494a451 129 char c[2];
brunofgc 0:8c59a494a451 130 uint32_t v;
brunofgc 0:8c59a494a451 131 }u;
brunofgc 0:8c59a494a451 132 int i;
brunofgc 0:8c59a494a451 133
brunofgc 0:8c59a494a451 134 if(dir) {
brunofgc 0:8c59a494a451 135 u.v = *v;
brunofgc 0:8c59a494a451 136 for(i=0; i<2; i++) {
brunofgc 0:8c59a494a451 137 p[i]=u.c[1-i];
brunofgc 0:8c59a494a451 138 }
brunofgc 0:8c59a494a451 139 } else {
brunofgc 0:8c59a494a451 140 for(i=0; i<2; i++) {
brunofgc 0:8c59a494a451 141 u.c[1-i]=p[i];
brunofgc 0:8c59a494a451 142 }
brunofgc 0:8c59a494a451 143 *v = u.v;
brunofgc 0:8c59a494a451 144 }
brunofgc 0:8c59a494a451 145 }
brunofgc 0:8c59a494a451 146
brunofgc 1:3f9e5b86d9e4 147 //Funcao restaurada
brunofgc 0:8c59a494a451 148 void device::verifyAlarms(){
brunofgc 0:8c59a494a451 149 //Inicio da verificação
brunofgc 0:8c59a494a451 150 uint16_t alarmIndex;
brunofgc 0:8c59a494a451 151 float leitura_float,value_float;
brunofgc 0:8c59a494a451 152 uint32_t leitura_uint32_t,value_uint32_t;
brunofgc 0:8c59a494a451 153 uint16_t leitura_uint16_t,value_uint16_t;
brunofgc 0:8c59a494a451 154 bool leitura_bit,value_bit;
brunofgc 0:8c59a494a451 155 bool alarmFound;
brunofgc 0:8c59a494a451 156 char aux[30];
brunofgc 5:8efd609dea7d 157
brunofgc 5:8efd609dea7d 158 for(alarmIndex = 0;alarmIndex < this->numAlarms;alarmIndex++){
brunofgc 5:8efd609dea7d 159
brunofgc 5:8efd609dea7d 160 /*pc.printf("\r\nTeste Alarm, id<%lu>.\r\n",this->alarms[alarmIndex].id);
brunofgc 5:8efd609dea7d 161 pc.printf("ON<%lu>.\r\n",this->alarms[alarmIndex].on);
brunofgc 5:8efd609dea7d 162 pc.printf("secAlarm<%lu>.\r\n",this->alarms[alarmIndex].secAlarm);
brunofgc 5:8efd609dea7d 163 pc.printf("alarmFound<%lu>.\r\n",this->alarms[alarmIndex].alarmFound);*/
brunofgc 5:8efd609dea7d 164 if(this->alarms[alarmIndex].on){
brunofgc 5:8efd609dea7d 165 alarmFound=this->alarms[alarmIndex].alarmFound;
brunofgc 5:8efd609dea7d 166 switch(this->alarms[alarmIndex].type){
brunofgc 5:8efd609dea7d 167 case modBusType_float:
brunofgc 5:8efd609dea7d 168 //Montar float!
brunofgc 5:8efd609dea7d 169 this->floatToBin(0,&value_float,&this->alarms[alarmIndex].value[0]);
brunofgc 5:8efd609dea7d 170
brunofgc 5:8efd609dea7d 171 if(this->alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus;
brunofgc 5:8efd609dea7d 172 modBusMaster1::readFloat(
brunofgc 5:8efd609dea7d 173 this->alarms[alarmIndex].addrModbusRead,
brunofgc 5:8efd609dea7d 174 this->alarms[alarmIndex].funcModbusRead,
brunofgc 5:8efd609dea7d 175 this->alarms[alarmIndex].regModbusRead,
brunofgc 5:8efd609dea7d 176 1,
brunofgc 5:8efd609dea7d 177 &leitura_float
brunofgc 5:8efd609dea7d 178 );
brunofgc 5:8efd609dea7d 179 }else{
brunofgc 5:8efd609dea7d 180 //leitura_float = temperaturas[this->alarms[alarmIndex].regModbusRead];
brunofgc 5:8efd609dea7d 181 //Busca Interna
brunofgc 5:8efd609dea7d 182 if(this->alarms[alarmIndex].regModbusRead<100){//Registradores das entradas de temperatura
brunofgc 5:8efd609dea7d 183 //Populando floatBuffer com a temperaturas
brunofgc 5:8efd609dea7d 184 if(this->alarms[alarmIndex].regModbusRead < num_temperatureSensors){
brunofgc 5:8efd609dea7d 185 leitura_float = temperaturas[this->alarms[alarmIndex].regModbusRead];
brunofgc 5:8efd609dea7d 186 }
brunofgc 5:8efd609dea7d 187 }
brunofgc 11:013a2ab0c12e 188 if((this->alarms[alarmIndex].regModbusRead>99)&&(this->alarms[alarmIndex].regModbusRead<104)){//Registradores das entradas analógicas
brunofgc 5:8efd609dea7d 189 leitura_float = aiFiltrada[this->alarms[alarmIndex].regModbusRead - 100];
brunofgc 5:8efd609dea7d 190 }
brunofgc 5:8efd609dea7d 191 }
brunofgc 5:8efd609dea7d 192
brunofgc 5:8efd609dea7d 193 if(this->alarms[alarmIndex].max!=0){
brunofgc 5:8efd609dea7d 194 if(leitura_float > value_float){
brunofgc 5:8efd609dea7d 195 this->alarms[alarmIndex].secAlarm++;
brunofgc 5:8efd609dea7d 196 if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){
brunofgc 5:8efd609dea7d 197 this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds;
brunofgc 5:8efd609dea7d 198 alarmFound = true;
brunofgc 5:8efd609dea7d 199 }
brunofgc 5:8efd609dea7d 200 }else{
brunofgc 5:8efd609dea7d 201 if(this->alarms[alarmIndex].secAlarm==1){
brunofgc 5:8efd609dea7d 202 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 203 alarmFound = false;
brunofgc 5:8efd609dea7d 204 }else{
brunofgc 5:8efd609dea7d 205 if(this->alarms[alarmIndex].secAlarm){
brunofgc 5:8efd609dea7d 206 if(alarmFound){
brunofgc 5:8efd609dea7d 207 this->alarms[alarmIndex].secAlarm--;
brunofgc 5:8efd609dea7d 208 }else{
brunofgc 5:8efd609dea7d 209 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 210 }
brunofgc 5:8efd609dea7d 211 }
brunofgc 5:8efd609dea7d 212 }
brunofgc 5:8efd609dea7d 213 }
brunofgc 5:8efd609dea7d 214 }else{
brunofgc 5:8efd609dea7d 215 if(leitura_float < value_float){
brunofgc 5:8efd609dea7d 216 this->alarms[alarmIndex].secAlarm++;
brunofgc 5:8efd609dea7d 217 if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){
brunofgc 5:8efd609dea7d 218 this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds;
brunofgc 5:8efd609dea7d 219 alarmFound = true;
brunofgc 5:8efd609dea7d 220 }
brunofgc 5:8efd609dea7d 221 }else{
brunofgc 5:8efd609dea7d 222 if(this->alarms[alarmIndex].secAlarm==1){
brunofgc 5:8efd609dea7d 223 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 224 alarmFound = false;
brunofgc 5:8efd609dea7d 225 }else{
brunofgc 5:8efd609dea7d 226 if(this->alarms[alarmIndex].secAlarm){
brunofgc 5:8efd609dea7d 227 if(alarmFound){
brunofgc 5:8efd609dea7d 228 this->alarms[alarmIndex].secAlarm--;
brunofgc 5:8efd609dea7d 229 }else{
brunofgc 5:8efd609dea7d 230 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 231 }
brunofgc 5:8efd609dea7d 232 }
brunofgc 5:8efd609dea7d 233 }
brunofgc 5:8efd609dea7d 234 }
brunofgc 5:8efd609dea7d 235 }
brunofgc 5:8efd609dea7d 236 break;
brunofgc 5:8efd609dea7d 237 case modBusType_uint32_t:
brunofgc 5:8efd609dea7d 238 //Montar uint32_t!
brunofgc 5:8efd609dea7d 239 this->uint32_t_ToBin(0,&value_uint32_t,&this->alarms[alarmIndex].value[0]);
brunofgc 5:8efd609dea7d 240
brunofgc 5:8efd609dea7d 241 if(this->alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus;
brunofgc 5:8efd609dea7d 242 //Bloco de leitura da variável modBus;
brunofgc 5:8efd609dea7d 243 modBusMaster1::readRegister32BIT(
brunofgc 5:8efd609dea7d 244 this->alarms[alarmIndex].addrModbusRead,
brunofgc 5:8efd609dea7d 245 this->alarms[alarmIndex].funcModbusRead,
brunofgc 5:8efd609dea7d 246 this->alarms[alarmIndex].regModbusRead,
brunofgc 5:8efd609dea7d 247 1,
brunofgc 5:8efd609dea7d 248 &leitura_uint32_t
brunofgc 5:8efd609dea7d 249 );
brunofgc 5:8efd609dea7d 250 }else{
brunofgc 5:8efd609dea7d 251 leitura_uint32_t = pulsosEDs[this->alarms[alarmIndex].regModbusRead];
brunofgc 5:8efd609dea7d 252 }
brunofgc 5:8efd609dea7d 253
brunofgc 5:8efd609dea7d 254 if(this->alarms[alarmIndex].max!=0){
brunofgc 5:8efd609dea7d 255 if(leitura_uint32_t > value_uint32_t){
brunofgc 5:8efd609dea7d 256 this->alarms[alarmIndex].secAlarm++;
brunofgc 5:8efd609dea7d 257 if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){
brunofgc 5:8efd609dea7d 258 this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds;
brunofgc 5:8efd609dea7d 259 alarmFound = true;
brunofgc 5:8efd609dea7d 260 pulsosEDs[this->alarms[alarmIndex].regModbusRead]=0;
brunofgc 5:8efd609dea7d 261 }
brunofgc 5:8efd609dea7d 262 }else{
brunofgc 5:8efd609dea7d 263 if(this->alarms[alarmIndex].secAlarm==1){
brunofgc 5:8efd609dea7d 264 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 265 alarmFound = false;
brunofgc 5:8efd609dea7d 266 }else{
brunofgc 5:8efd609dea7d 267 if(this->alarms[alarmIndex].secAlarm){
brunofgc 5:8efd609dea7d 268 if(alarmFound){
brunofgc 5:8efd609dea7d 269 this->alarms[alarmIndex].secAlarm--;
brunofgc 5:8efd609dea7d 270 }else{
brunofgc 5:8efd609dea7d 271 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 272 }
brunofgc 5:8efd609dea7d 273 }
brunofgc 5:8efd609dea7d 274 }
brunofgc 5:8efd609dea7d 275 }
brunofgc 5:8efd609dea7d 276 }else{
brunofgc 5:8efd609dea7d 277 if(leitura_uint32_t < value_uint32_t){
brunofgc 5:8efd609dea7d 278 this->alarms[alarmIndex].secAlarm++;
brunofgc 5:8efd609dea7d 279 if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){
brunofgc 5:8efd609dea7d 280 this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds;
brunofgc 5:8efd609dea7d 281 alarmFound = true;
brunofgc 5:8efd609dea7d 282 pulsosEDs[this->alarms[alarmIndex].regModbusRead]=0;
brunofgc 5:8efd609dea7d 283 }
brunofgc 5:8efd609dea7d 284 }else{
brunofgc 5:8efd609dea7d 285 if(this->alarms[alarmIndex].secAlarm==1){
brunofgc 5:8efd609dea7d 286 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 287 alarmFound = false;
brunofgc 5:8efd609dea7d 288 }else{
brunofgc 5:8efd609dea7d 289 if(this->alarms[alarmIndex].secAlarm){
brunofgc 5:8efd609dea7d 290 if(alarmFound){
brunofgc 5:8efd609dea7d 291 this->alarms[alarmIndex].secAlarm--;
brunofgc 5:8efd609dea7d 292 }else{
brunofgc 5:8efd609dea7d 293 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 294 }
brunofgc 5:8efd609dea7d 295 }
brunofgc 5:8efd609dea7d 296 }
brunofgc 5:8efd609dea7d 297 }
brunofgc 5:8efd609dea7d 298 }
brunofgc 5:8efd609dea7d 299 break;
brunofgc 0:8c59a494a451 300
brunofgc 5:8efd609dea7d 301 case modBusType_uint16_t:
brunofgc 5:8efd609dea7d 302 //Montar uint16_t!
brunofgc 5:8efd609dea7d 303 this->uint16_t_ToBin(0,&value_uint16_t,&this->alarms[alarmIndex].value[0]);
brunofgc 5:8efd609dea7d 304
brunofgc 5:8efd609dea7d 305 if(this->alarms[alarmIndex].addrModbusRead!=enderecoControladoraVirtual){
brunofgc 5:8efd609dea7d 306 //Bloco de leitura da variável modBus;
brunofgc 5:8efd609dea7d 307 modBusMaster1::readRegister16BIT(
brunofgc 5:8efd609dea7d 308 this->alarms[alarmIndex].addrModbusRead,
brunofgc 5:8efd609dea7d 309 this->alarms[alarmIndex].funcModbusRead,
brunofgc 5:8efd609dea7d 310 this->alarms[alarmIndex].regModbusRead,
brunofgc 5:8efd609dea7d 311 1,
brunofgc 5:8efd609dea7d 312 &leitura_uint16_t
brunofgc 5:8efd609dea7d 313 );
brunofgc 5:8efd609dea7d 314 }else{
brunofgc 11:013a2ab0c12e 315 if(this->alarms[alarmIndex].regModbusRead<4){
brunofgc 11:013a2ab0c12e 316 leitura_uint16_t = aiFiltrada[this->alarms[alarmIndex].regModbusRead];
brunofgc 5:8efd609dea7d 317 }
brunofgc 5:8efd609dea7d 318 }
brunofgc 5:8efd609dea7d 319
brunofgc 5:8efd609dea7d 320 if(this->alarms[alarmIndex].max!=0){
brunofgc 5:8efd609dea7d 321 if(leitura_uint16_t > value_uint16_t){
brunofgc 5:8efd609dea7d 322 this->alarms[alarmIndex].secAlarm++;
brunofgc 5:8efd609dea7d 323 if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){
brunofgc 5:8efd609dea7d 324 this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds;
brunofgc 5:8efd609dea7d 325 alarmFound = true;
brunofgc 5:8efd609dea7d 326 }
brunofgc 5:8efd609dea7d 327 }else{
brunofgc 5:8efd609dea7d 328 if(this->alarms[alarmIndex].secAlarm==1){
brunofgc 5:8efd609dea7d 329 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 330 alarmFound = false;
brunofgc 5:8efd609dea7d 331 }else{
brunofgc 5:8efd609dea7d 332 if(this->alarms[alarmIndex].secAlarm){
brunofgc 5:8efd609dea7d 333 if(alarmFound){
brunofgc 5:8efd609dea7d 334 this->alarms[alarmIndex].secAlarm--;
brunofgc 5:8efd609dea7d 335 }else{
brunofgc 5:8efd609dea7d 336 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 337 }
brunofgc 5:8efd609dea7d 338 }
brunofgc 5:8efd609dea7d 339 }
brunofgc 5:8efd609dea7d 340 }
brunofgc 5:8efd609dea7d 341 }else{
brunofgc 5:8efd609dea7d 342 if(leitura_uint16_t < value_uint16_t){
brunofgc 5:8efd609dea7d 343 this->alarms[alarmIndex].secAlarm++;
brunofgc 5:8efd609dea7d 344 if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){
brunofgc 5:8efd609dea7d 345 this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds;
brunofgc 5:8efd609dea7d 346 alarmFound = true;
brunofgc 5:8efd609dea7d 347 }
brunofgc 5:8efd609dea7d 348 }else{
brunofgc 5:8efd609dea7d 349 if(this->alarms[alarmIndex].secAlarm==1){
brunofgc 5:8efd609dea7d 350 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 351 alarmFound = false;
brunofgc 5:8efd609dea7d 352 }else{
brunofgc 5:8efd609dea7d 353 if(this->alarms[alarmIndex].secAlarm){
brunofgc 5:8efd609dea7d 354 if(alarmFound){
brunofgc 5:8efd609dea7d 355 this->alarms[alarmIndex].secAlarm--;
brunofgc 5:8efd609dea7d 356 }else{
brunofgc 5:8efd609dea7d 357 this->alarms[alarmIndex].secAlarm=0;
brunofgc 5:8efd609dea7d 358 }
brunofgc 5:8efd609dea7d 359 }
brunofgc 5:8efd609dea7d 360 }
brunofgc 5:8efd609dea7d 361 }
brunofgc 5:8efd609dea7d 362 }
brunofgc 5:8efd609dea7d 363 break;
brunofgc 5:8efd609dea7d 364
brunofgc 6:f20c0e094294 365 case modBusType_bit:
brunofgc 5:8efd609dea7d 366 //Montar bit!
brunofgc 5:8efd609dea7d 367 //O valor de alarm para bit é o value[0]!!!
brunofgc 5:8efd609dea7d 368 value_bit = (this->alarms[alarmIndex].value[0] > 0); //Qualquer valor maior que zero da saída 1
brunofgc 5:8efd609dea7d 369
brunofgc 6:f20c0e094294 370 if(this->alarms[alarmIndex].addrModbusRead != enderecoControladoraVirtual){//Bloco de leitura da variável modBus;
brunofgc 6:f20c0e094294 371 //Bloco de leitura da variável modBus;
brunofgc 6:f20c0e094294 372 modBusMaster1::readCoils(
brunofgc 6:f20c0e094294 373 this->alarms[alarmIndex].addrModbusRead,
brunofgc 6:f20c0e094294 374 this->alarms[alarmIndex].regModbusRead,
brunofgc 6:f20c0e094294 375 1,
brunofgc 6:f20c0e094294 376 &leitura_bit
brunofgc 6:f20c0e094294 377 );
brunofgc 6:f20c0e094294 378 }else{
brunofgc 6:f20c0e094294 379 leitura_bit = entradasDigitais[this->alarms[alarmIndex].regModbusRead];
brunofgc 6:f20c0e094294 380 }
brunofgc 5:8efd609dea7d 381 if(leitura_bit == value_bit){
brunofgc 0:8c59a494a451 382 this->alarms[alarmIndex].secAlarm++;
brunofgc 0:8c59a494a451 383 if(this->alarms[alarmIndex].secAlarm >= this->alarms[alarmIndex].seconds){
brunofgc 0:8c59a494a451 384 this->alarms[alarmIndex].secAlarm = this->alarms[alarmIndex].seconds;
brunofgc 0:8c59a494a451 385 alarmFound = true;
brunofgc 0:8c59a494a451 386 }
brunofgc 0:8c59a494a451 387 }else{
brunofgc 0:8c59a494a451 388 if(this->alarms[alarmIndex].secAlarm==1){
brunofgc 0:8c59a494a451 389 this->alarms[alarmIndex].secAlarm=0;
brunofgc 0:8c59a494a451 390 alarmFound = false;
brunofgc 0:8c59a494a451 391 }else{
brunofgc 0:8c59a494a451 392 if(this->alarms[alarmIndex].secAlarm){
brunofgc 0:8c59a494a451 393 if(alarmFound){
brunofgc 0:8c59a494a451 394 this->alarms[alarmIndex].secAlarm--;
brunofgc 0:8c59a494a451 395 }else{
brunofgc 0:8c59a494a451 396 this->alarms[alarmIndex].secAlarm=0;
brunofgc 0:8c59a494a451 397 }
brunofgc 0:8c59a494a451 398 }
brunofgc 0:8c59a494a451 399 }
brunofgc 5:8efd609dea7d 400 }
brunofgc 5:8efd609dea7d 401 break;
brunofgc 0:8c59a494a451 402
brunofgc 5:8efd609dea7d 403 }
brunofgc 0:8c59a494a451 404
brunofgc 5:8efd609dea7d 405 //Verifico se houve alarme não tratado
brunofgc 5:8efd609dea7d 406 if(this->alarms[alarmIndex].alarmFound!=alarmFound){
brunofgc 5:8efd609dea7d 407 this->alarms[alarmIndex].alarmFound=alarmFound;
brunofgc 5:8efd609dea7d 408 if(alarmFound){
brunofgc 5:8efd609dea7d 409 printf("Alarm FOUND! Id <%lu>.\n",this->alarms[alarmIndex].id);
brunofgc 5:8efd609dea7d 410 sdCardBuf.fill("log{alarm:event:found;id:",25);
brunofgc 5:8efd609dea7d 411 sprintf(aux,"%lu",this->alarms[alarmIndex].id);
brunofgc 5:8efd609dea7d 412 sdCardBuf.fill(aux,strlen(aux));
brunofgc 5:8efd609dea7d 413
brunofgc 5:8efd609dea7d 414 sdCardBuf.fill(";timestamp:",11);
brunofgc 5:8efd609dea7d 415 sprintf(aux,"%lu",time(NULL));
brunofgc 5:8efd609dea7d 416 sdCardBuf.fill(aux,strlen(aux));
brunofgc 5:8efd609dea7d 417
brunofgc 5:8efd609dea7d 418 sdCardBuf.fill(";reading:",9);
brunofgc 5:8efd609dea7d 419 if(this->alarms[alarmIndex].type == modBusType_float){
brunofgc 5:8efd609dea7d 420 sprintf(aux,"%f",leitura_float);
brunofgc 5:8efd609dea7d 421 }else if(this->alarms[alarmIndex].type == modBusType_uint32_t){
brunofgc 5:8efd609dea7d 422 sprintf(aux,"%lu",leitura_uint32_t);
brunofgc 5:8efd609dea7d 423 }else if(this->alarms[alarmIndex].type == modBusType_uint16_t){
brunofgc 5:8efd609dea7d 424 sprintf(aux,"%lu",leitura_uint16_t);
brunofgc 5:8efd609dea7d 425 }else if(this->alarms[alarmIndex].type == modBusType_bit){
brunofgc 5:8efd609dea7d 426 sprintf(aux,"%lu",leitura_bit);
brunofgc 5:8efd609dea7d 427 }
brunofgc 5:8efd609dea7d 428 sdCardBuf.fill(aux,strlen(aux));
brunofgc 5:8efd609dea7d 429 leitura_uint16_t = sdCardBuf.fill("}log",4); //Reaproveitando uma variável de 16bit
brunofgc 8:25061210fcc9 430 sdCard::insereDadosBank(sdCardBuf.get(),leitura_uint16_t);
brunofgc 5:8efd609dea7d 431
brunofgc 5:8efd609dea7d 432 boolExecAct=true;
brunofgc 5:8efd609dea7d 433 act = this->alarms[alarmIndex].idAct;
brunofgc 5:8efd609dea7d 434 }else{
brunofgc 5:8efd609dea7d 435 printf("Alarm RELEASE! id <%lu>.\n",this->alarms[alarmIndex].id);
brunofgc 5:8efd609dea7d 436 sdCardBuf.fill("log{alarm:event:release;id:",27);
brunofgc 5:8efd609dea7d 437 sprintf(aux,"%lu",this->alarms[alarmIndex].id);
brunofgc 5:8efd609dea7d 438 sdCardBuf.fill(aux,strlen(aux));
brunofgc 5:8efd609dea7d 439
brunofgc 5:8efd609dea7d 440 sdCardBuf.fill(";timestamp:",11);
brunofgc 5:8efd609dea7d 441 sprintf(aux,"%lu",time(NULL));
brunofgc 5:8efd609dea7d 442 sdCardBuf.fill(aux,strlen(aux));
brunofgc 5:8efd609dea7d 443
brunofgc 5:8efd609dea7d 444 leitura_uint16_t = sdCardBuf.fill("}log",4); //Reaproveitando uma variável de 16bit
brunofgc 5:8efd609dea7d 445 sdCard::arquivoAberto(40000);
brunofgc 8:25061210fcc9 446 sdCard::insereDadosBank(sdCardBuf.get(),leitura_uint16_t);
brunofgc 5:8efd609dea7d 447 }
brunofgc 5:8efd609dea7d 448 //atrasa o envio em 3 segundos para que possa ser gravado o registro do alarme.
brunofgc 5:8efd609dea7d 449 enviaDadosPorAlarme=10;
brunofgc 5:8efd609dea7d 450 }
brunofgc 0:8c59a494a451 451 }
brunofgc 0:8c59a494a451 452 }
brunofgc 0:8c59a494a451 453 }
brunofgc 0:8c59a494a451 454
brunofgc 0:8c59a494a451 455 void device::verifySchedules(){
brunofgc 5:8efd609dea7d 456 char stringTime[30];
brunofgc 0:8c59a494a451 457 char *weekdayString;
brunofgc 5:8efd609dea7d 458 time_t seconds = time(NULL)+5;
brunofgc 0:8c59a494a451 459 uint8_t hora;
brunofgc 0:8c59a494a451 460 uint16_t minuto;
brunofgc 0:8c59a494a451 461 uint8_t weekday=0;
brunofgc 5:8efd609dea7d 462 uint16_t anoAtual=0;
brunofgc 5:8efd609dea7d 463 uint16_t diaAtual=0;
brunofgc 5:8efd609dea7d 464 uint16_t mesAtual=0;
brunofgc 5:8efd609dea7d 465 uint16_t anoScheduleException=0;
brunofgc 5:8efd609dea7d 466 uint16_t diaScheduleException=0;
brunofgc 5:8efd609dea7d 467 uint16_t mesScheduleException=0;
brunofgc 0:8c59a494a451 468 const char* weekdayTable[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
brunofgc 0:8c59a494a451 469 uint8_t indexSchedule;
brunofgc 5:8efd609dea7d 470 uint8_t indexScheduleException;
brunofgc 5:8efd609dea7d 471 bool exceptionDetected=false;
brunofgc 0:8c59a494a451 472
brunofgc 5:8efd609dea7d 473 pc.printf("Verifing schedule.\r\n");
brunofgc 0:8c59a494a451 474
brunofgc 5:8efd609dea7d 475 strftime(stringTime, 30, "%a,%R,%y,%d,%m", localtime(&seconds));
brunofgc 5:8efd609dea7d 476 //pc.printf("VerifySchedule <%s>.\r\n",stringTime);
brunofgc 5:8efd609dea7d 477 //Thu,20:48,17,2,7
brunofgc 0:8c59a494a451 478 weekdayString = strtok(stringTime,",");
brunofgc 0:8c59a494a451 479 weekday = 0;
brunofgc 0:8c59a494a451 480 while((weekday<10)&&(strstr(weekdayTable[weekday],weekdayString)==NULL)){
brunofgc 0:8c59a494a451 481 weekday++;
brunofgc 0:8c59a494a451 482 }
brunofgc 0:8c59a494a451 483 hora = atoi(strtok(NULL,":"));
brunofgc 5:8efd609dea7d 484 minuto = atoi(strtok(NULL,","));
brunofgc 5:8efd609dea7d 485 minuto = (hora*60)+minuto;
brunofgc 5:8efd609dea7d 486 anoAtual = atoi(strtok(NULL,","));
brunofgc 5:8efd609dea7d 487 diaAtual = atoi(strtok(NULL,","));
brunofgc 5:8efd609dea7d 488 mesAtual = atoi(strtok(NULL,""));
brunofgc 5:8efd609dea7d 489
brunofgc 5:8efd609dea7d 490 //pc.printf("Passo 1 .\r\n");
brunofgc 5:8efd609dea7d 491 for(indexSchedule = 0; indexSchedule < qtdSchedules; indexSchedule++){
brunofgc 5:8efd609dea7d 492 //pc.printf("Passo 2.\r\n");
brunofgc 5:8efd609dea7d 493 if(this->schedules[indexSchedule].weekday&(0x1<<weekday)){
brunofgc 5:8efd609dea7d 494 //pc.printf("Passo 3.\r\n");
brunofgc 0:8c59a494a451 495 if(this->schedules[indexSchedule].minute == minuto){
brunofgc 5:8efd609dea7d 496 //pc.printf("Passo 4.\r\n");
brunofgc 0:8c59a494a451 497 //Verifico se já executei e então executo a ação.
brunofgc 0:8c59a494a451 498 if(!this->schedules[indexSchedule].actSent){
brunofgc 5:8efd609dea7d 499 //pc.printf("Passo 5 .\r\n");
brunofgc 0:8c59a494a451 500 //Executa a ação;
brunofgc 5:8efd609dea7d 501 for(indexScheduleException = 0;indexScheduleException<this->numScheduleExceptions;indexScheduleException++){
brunofgc 5:8efd609dea7d 502 //pc.printf("Passo 6.\r\n");
brunofgc 5:8efd609dea7d 503 if(this->schedules[indexSchedule].id == this->scheduleExceptions[indexScheduleException].id_schedule){
brunofgc 5:8efd609dea7d 504 //pc.printf("Passo 7.\r\n");
brunofgc 5:8efd609dea7d 505 seconds = this->scheduleExceptions[indexScheduleException].timestamp;
brunofgc 5:8efd609dea7d 506 strftime(stringTime, 30, "%y,%d,%m", localtime(&seconds));
brunofgc 5:8efd609dea7d 507 anoScheduleException=atoi(strtok(stringTime,","));
brunofgc 5:8efd609dea7d 508 diaScheduleException=atoi(strtok(NULL,","));
brunofgc 5:8efd609dea7d 509 mesScheduleException=atoi(strtok(NULL,""));
brunofgc 5:8efd609dea7d 510 /*
brunofgc 5:8efd609dea7d 511 pc.printf("\r\nDebug ScheduleException.\r\n");
brunofgc 5:8efd609dea7d 512 pc.printf("stringTime <%s>.\r\n",stringTime);
brunofgc 5:8efd609dea7d 513 pc.printf("anoScheduleException %lu.",anoScheduleException);
brunofgc 5:8efd609dea7d 514 pc.printf("diaScheduleException %lu.",diaScheduleException);
brunofgc 5:8efd609dea7d 515 pc.printf("mesScheduleException %lu.",mesScheduleException);
brunofgc 5:8efd609dea7d 516 pc.printf("anoAtual %lu.",anoAtual);
brunofgc 5:8efd609dea7d 517 pc.printf("diaAtual %lu.",diaAtual);
brunofgc 5:8efd609dea7d 518 pc.printf("mesAtual %lu.",mesAtual);
brunofgc 5:8efd609dea7d 519 pc.printf("\r\n");
brunofgc 5:8efd609dea7d 520 */
brunofgc 5:8efd609dea7d 521 if(
brunofgc 5:8efd609dea7d 522 ((anoScheduleException == anoAtual) || (anoScheduleException == 70))
brunofgc 5:8efd609dea7d 523 &&
brunofgc 5:8efd609dea7d 524 (diaAtual == diaScheduleException)
brunofgc 5:8efd609dea7d 525 &&
brunofgc 5:8efd609dea7d 526 (mesAtual == mesScheduleException)
brunofgc 5:8efd609dea7d 527 )
brunofgc 5:8efd609dea7d 528 {
brunofgc 5:8efd609dea7d 529 pc.printf("ScheduleException detected.\r\n");
brunofgc 5:8efd609dea7d 530 exceptionDetected=true;
brunofgc 5:8efd609dea7d 531 }
brunofgc 5:8efd609dea7d 532 }
brunofgc 5:8efd609dea7d 533 }
brunofgc 5:8efd609dea7d 534 if(!exceptionDetected){
brunofgc 16:1b43a57ee676 535 diversos::wdt.kick(90.0);
brunofgc 5:8efd609dea7d 536 this->execAct(this->schedules[indexSchedule].idAct);
brunofgc 5:8efd609dea7d 537 this->schedules[indexSchedule].actSent = true;
brunofgc 5:8efd609dea7d 538 }
brunofgc 0:8c59a494a451 539 }
brunofgc 0:8c59a494a451 540 }else{
brunofgc 0:8c59a494a451 541 this->schedules[indexSchedule].actSent = false;
brunofgc 0:8c59a494a451 542 }
brunofgc 5:8efd609dea7d 543 }
brunofgc 0:8c59a494a451 544 }
brunofgc 0:8c59a494a451 545 }
brunofgc 0:8c59a494a451 546
brunofgc 0:8c59a494a451 547 /*
brunofgc 0:8c59a494a451 548 void device::verifySchedules(){
brunofgc 0:8c59a494a451 549 char stringTime[15];
brunofgc 0:8c59a494a451 550 char *weekdayString;
brunofgc 0:8c59a494a451 551 time_t seconds = time(NULL);
brunofgc 0:8c59a494a451 552 uint8_t hora;
brunofgc 0:8c59a494a451 553 uint16_t minuto;
brunofgc 0:8c59a494a451 554 uint8_t weekday=0;
brunofgc 0:8c59a494a451 555 const char* weekdayTable[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
brunofgc 0:8c59a494a451 556 uint8_t indexSchedule;
brunofgc 0:8c59a494a451 557
brunofgc 0:8c59a494a451 558 //Tue,19:09
brunofgc 0:8c59a494a451 559 strftime(stringTime, 15, "%a,%R", localtime(&seconds));
brunofgc 0:8c59a494a451 560
brunofgc 0:8c59a494a451 561 weekdayString = strtok(stringTime,",");
brunofgc 0:8c59a494a451 562 weekday = 0;
brunofgc 0:8c59a494a451 563 while((weekday<10)&&(strstr(weekdayTable[weekday],weekdayString)==NULL)){
brunofgc 0:8c59a494a451 564 weekday++;
brunofgc 0:8c59a494a451 565 }
brunofgc 0:8c59a494a451 566 weekday++;
brunofgc 0:8c59a494a451 567 hora = atoi(strtok(NULL,":"));
brunofgc 0:8c59a494a451 568 minuto = atoi(strtok(NULL,""));
brunofgc 0:8c59a494a451 569 minuto = (hora*60)+minuto;
brunofgc 0:8c59a494a451 570 //printf("\r\n\r\nMinuto %lu.\r\n\r\n",minuto);
brunofgc 0:8c59a494a451 571 for(indexSchedule = 0; indexSchedule < qtdSchedules; indexSchedule++){
brunofgc 0:8c59a494a451 572 //printf("Executando item %u do for de schedules.\r\n\r\n",indexSchedule);
brunofgc 0:8c59a494a451 573 if((this->schedules[indexSchedule].weekday == weekday)||(this->schedules[indexSchedule].weekday == 0)){
brunofgc 0:8c59a494a451 574 //Se for um alarme para o dia de hoje ou o alarme independer de dia (Se o dia for zero)
brunofgc 0:8c59a494a451 575 //printf("Hoje eh dia de executar a acão do schedule indice %u.\r\n\r\n",indexSchedule);
brunofgc 0:8c59a494a451 576 if(this->schedules[indexSchedule].minute == minuto){
brunofgc 0:8c59a494a451 577 //Verifico se já executei e então executo a ação.
brunofgc 0:8c59a494a451 578 if(!this->schedules[indexSchedule].actSent){
brunofgc 0:8c59a494a451 579 //Executa a ação;
brunofgc 0:8c59a494a451 580 //printf("Executando a acao!\r\n\r\n");
brunofgc 0:8c59a494a451 581 this->execAct(this->schedules[indexSchedule].idAct);
brunofgc 0:8c59a494a451 582 this->schedules[indexSchedule].actSent = true;
brunofgc 0:8c59a494a451 583 }
brunofgc 0:8c59a494a451 584 }else{
brunofgc 0:8c59a494a451 585 this->schedules[indexSchedule].actSent = false;
brunofgc 0:8c59a494a451 586 }
brunofgc 0:8c59a494a451 587 }
brunofgc 0:8c59a494a451 588 }
brunofgc 0:8c59a494a451 589 }
brunofgc 0:8c59a494a451 590 */
brunofgc 0:8c59a494a451 591 /*
brunofgc 0:8c59a494a451 592 uint8_t device::execActSchedule(uint32_t index){
brunofgc 0:8c59a494a451 593 switch(this->schedules[index].actType){
brunofgc 0:8c59a494a451 594 case modBusType_float:
brunofgc 0:8c59a494a451 595 float floatValueToWrite;
brunofgc 0:8c59a494a451 596 //writeFloat(uint8_t,uint16_t,uint8_t,float*);
brunofgc 0:8c59a494a451 597 this->floatToBin(0,&floatValueToWrite,&this->schedules[index].actValue[0]);
brunofgc 0:8c59a494a451 598 modBusMaster1::writeFloat(
brunofgc 0:8c59a494a451 599 this->schedules[index].param1,
brunofgc 0:8c59a494a451 600 this->schedules[index].param2,
brunofgc 0:8c59a494a451 601 this->schedules[index].param3,
brunofgc 0:8c59a494a451 602 &floatValueToWrite
brunofgc 0:8c59a494a451 603 );
brunofgc 0:8c59a494a451 604 break;
brunofgc 0:8c59a494a451 605 case modBusType_uint32_t:
brunofgc 0:8c59a494a451 606 uint32_t uint32ValueToWrite;
brunofgc 0:8c59a494a451 607 this->uint32_t_ToBin(0,&uint32ValueToWrite,&this->schedules[index].actValue[0]);
brunofgc 0:8c59a494a451 608 modBusMaster1::writeRegister32BIT(
brunofgc 0:8c59a494a451 609 this->schedules[index].param1,
brunofgc 0:8c59a494a451 610 this->schedules[index].param2,
brunofgc 0:8c59a494a451 611 this->schedules[index].param3,
brunofgc 0:8c59a494a451 612 &uint32ValueToWrite
brunofgc 0:8c59a494a451 613 );
brunofgc 0:8c59a494a451 614 break;
brunofgc 0:8c59a494a451 615 case modBusType_uint16_t:
brunofgc 0:8c59a494a451 616 uint16_t uint16ValueToWrite;
brunofgc 0:8c59a494a451 617 this->uint16_t_ToBin(0,&uint16ValueToWrite,&this->schedules[index].actValue[0]);
brunofgc 0:8c59a494a451 618 modBusMaster1::writeRegister16BIT(
brunofgc 0:8c59a494a451 619 this->schedules[index].param1,
brunofgc 0:8c59a494a451 620 this->schedules[index].param2,
brunofgc 0:8c59a494a451 621 this->schedules[index].param3,
brunofgc 0:8c59a494a451 622 &uint16ValueToWrite
brunofgc 0:8c59a494a451 623 );
brunofgc 0:8c59a494a451 624 break;
brunofgc 0:8c59a494a451 625 case modBusType_bit:
brunofgc 0:8c59a494a451 626 bool boolValueToWrite;
brunofgc 0:8c59a494a451 627 boolValueToWrite = (this->schedules[index].actValue[0] != 0);
brunofgc 0:8c59a494a451 628 modBusMaster1::writeSingleCoil(
brunofgc 0:8c59a494a451 629 this->schedules[index].param1,
brunofgc 0:8c59a494a451 630 this->schedules[index].param3,
brunofgc 0:8c59a494a451 631 boolValueToWrite
brunofgc 0:8c59a494a451 632 );
brunofgc 0:8c59a494a451 633 break;
brunofgc 0:8c59a494a451 634 case IrCommandType:
brunofgc 0:8c59a494a451 635 //Busca no arquivo
brunofgc 0:8c59a494a451 636 //Abre arquivo
brunofgc 0:8c59a494a451 637 char comandoIr[1024];
brunofgc 0:8c59a494a451 638 char indexBusca[10];
brunofgc 0:8c59a494a451 639 bool endOfFile = false;
brunofgc 0:8c59a494a451 640
brunofgc 0:8c59a494a451 641 //printf("\r\n===================DEBUG(Schedule)===================\r\n");
brunofgc 0:8c59a494a451 642 //"Ir:0,6E01FFFFS"
brunofgc 0:8c59a494a451 643 sprintf(indexBusca,"Ir:%u,",this->schedules[index].param3);
brunofgc 0:8c59a494a451 644 //printf("indexBusca = <%s>.\r\n",indexBusca);
brunofgc 0:8c59a494a451 645 if(sdCard::abreArquivo(&sdCard::devices,"r")){
brunofgc 0:8c59a494a451 646 do{
brunofgc 0:8c59a494a451 647 fgets(comandoIr,1024,sdCard::devices.fp);
brunofgc 0:8c59a494a451 648 endOfFile = feof(sdCard::devices.fp);
brunofgc 0:8c59a494a451 649 //printf("Linha comando Ir = <%s>.\r\nendOfFile = %u\r\n",comandoIr,endOfFile);
brunofgc 0:8c59a494a451 650 }while((strstr(comandoIr,indexBusca)==NULL)&&(endOfFile==0));
brunofgc 0:8c59a494a451 651 sdCard::fechaArquivo(&sdCard::devices);
brunofgc 0:8c59a494a451 652
brunofgc 0:8c59a494a451 653 //Vê se deu tudo certo, se não encontrou, retorna false
brunofgc 0:8c59a494a451 654 if(!endOfFile){
brunofgc 0:8c59a494a451 655 //Encontrado o comando, vou desempacotar ele.
brunofgc 0:8c59a494a451 656 strtok(comandoIr,",");
brunofgc 0:8c59a494a451 657 //Neste ponto já tenho o meu comando pronto para ser executado dentro de comandoIr;
brunofgc 0:8c59a494a451 658 //printf("\r\n\r\n\r\nEstou enviando o comando %s de dentro do schedule.\r\n\r\n\r\n",strtok(NULL,"S"));
brunofgc 0:8c59a494a451 659 deserializaPacoteIR(strtok(NULL,"S"));
brunofgc 0:8c59a494a451 660 enviaComandoIR(this->schedules[index].param1,this->schedules[index].param2);
brunofgc 0:8c59a494a451 661 }
brunofgc 0:8c59a494a451 662 }else{
brunofgc 0:8c59a494a451 663 return false;
brunofgc 0:8c59a494a451 664 }
brunofgc 0:8c59a494a451 665 //printf("\r\n===================DEBUG(Schedule)===================\r\n");
brunofgc 0:8c59a494a451 666 break;
brunofgc 0:8c59a494a451 667 }
brunofgc 0:8c59a494a451 668 return true;
brunofgc 0:8c59a494a451 669 }
brunofgc 0:8c59a494a451 670 */
brunofgc 0:8c59a494a451 671 /*
brunofgc 0:8c59a494a451 672 uint8_t device::execActAlarm(uint32_t index){
brunofgc 0:8c59a494a451 673 switch(this->alarms[index].actType){
brunofgc 0:8c59a494a451 674 case modBusType_float:
brunofgc 0:8c59a494a451 675 float floatValueToWrite;
brunofgc 0:8c59a494a451 676 //writeFloat(uint8_t,uint16_t,uint8_t,float*);
brunofgc 0:8c59a494a451 677 this->floatToBin(0,&floatValueToWrite,&this->alarms[index].actValue[0]);
brunofgc 0:8c59a494a451 678 modBusMaster1::writeFloat(
brunofgc 0:8c59a494a451 679 this->alarms[index].addrModbusWrite,
brunofgc 0:8c59a494a451 680 this->alarms[index].funcModbusWrite,
brunofgc 0:8c59a494a451 681 this->alarms[index].regModbusWrite,
brunofgc 0:8c59a494a451 682 &floatValueToWrite
brunofgc 0:8c59a494a451 683 );
brunofgc 0:8c59a494a451 684 break;
brunofgc 0:8c59a494a451 685 case modBusType_uint32_t:
brunofgc 0:8c59a494a451 686 uint32_t uint32ValueToWrite;
brunofgc 0:8c59a494a451 687 this->uint32_t_ToBin(0,&uint32ValueToWrite,&this->alarms[index].actValue[0]);
brunofgc 0:8c59a494a451 688 modBusMaster1::writeRegister32BIT(
brunofgc 0:8c59a494a451 689 this->alarms[index].addrModbusWrite,
brunofgc 0:8c59a494a451 690 this->alarms[index].funcModbusWrite,
brunofgc 0:8c59a494a451 691 this->alarms[index].regModbusWrite,
brunofgc 0:8c59a494a451 692 &uint32ValueToWrite
brunofgc 0:8c59a494a451 693 );
brunofgc 0:8c59a494a451 694 break;
brunofgc 0:8c59a494a451 695 case modBusType_uint16_t:
brunofgc 0:8c59a494a451 696 uint16_t uint16ValueToWrite;
brunofgc 0:8c59a494a451 697 this->uint16_t_ToBin(0,&uint16ValueToWrite,&this->alarms[index].actValue[0]);
brunofgc 0:8c59a494a451 698 modBusMaster1::writeRegister16BIT(
brunofgc 0:8c59a494a451 699 this->alarms[index].addrModbusWrite,
brunofgc 0:8c59a494a451 700 this->alarms[index].funcModbusWrite,
brunofgc 0:8c59a494a451 701 this->alarms[index].regModbusWrite,
brunofgc 0:8c59a494a451 702 &uint16ValueToWrite
brunofgc 0:8c59a494a451 703 );
brunofgc 0:8c59a494a451 704 break;
brunofgc 0:8c59a494a451 705 case modBusType_bit:
brunofgc 0:8c59a494a451 706 bool boolValueToWrite;
brunofgc 0:8c59a494a451 707 boolValueToWrite = (this->alarms[index].actValue[0] != 0);
brunofgc 0:8c59a494a451 708 modBusMaster1::writeSingleCoil(
brunofgc 0:8c59a494a451 709 this->alarms[index].addrModbusWrite,
brunofgc 0:8c59a494a451 710 this->alarms[index].regModbusWrite,
brunofgc 0:8c59a494a451 711 boolValueToWrite
brunofgc 0:8c59a494a451 712 );
brunofgc 0:8c59a494a451 713 break;
brunofgc 0:8c59a494a451 714 }
brunofgc 0:8c59a494a451 715 return true;
brunofgc 0:8c59a494a451 716 }
brunofgc 0:8c59a494a451 717 */
brunofgc 0:8c59a494a451 718
brunofgc 0:8c59a494a451 719 void device::setReading(char *linha)
brunofgc 0:8c59a494a451 720 {
brunofgc 0:8c59a494a451 721 uint8_t addr=0;
brunofgc 0:8c59a494a451 722 uint8_t func=0;
brunofgc 0:8c59a494a451 723 uint16_t reg=0;
brunofgc 0:8c59a494a451 724 uint8_t numRegs=0;
brunofgc 0:8c59a494a451 725 char *pChar;
brunofgc 0:8c59a494a451 726 bool inputData = false;
brunofgc 0:8c59a494a451 727
brunofgc 0:8c59a494a451 728 //printf("Linha <%s>.\n",linha);
brunofgc 0:8c59a494a451 729 if(strstr(linha,"readingsSet")) {
brunofgc 0:8c59a494a451 730 return;
brunofgc 0:8c59a494a451 731 }
brunofgc 0:8c59a494a451 732
brunofgc 2:ca3723da6668 733 this->numReadings++;
brunofgc 0:8c59a494a451 734
brunofgc 0:8c59a494a451 735 if(strstr(linha,"float,")) {
brunofgc 0:8c59a494a451 736 this->readings[this->numReadings-1].type=modBusType_float;
brunofgc 0:8c59a494a451 737 inputData = true;
brunofgc 0:8c59a494a451 738 }
brunofgc 0:8c59a494a451 739
brunofgc 0:8c59a494a451 740 if(strstr(linha,"uint32_t,")) {
brunofgc 0:8c59a494a451 741 this->readings[this->numReadings-1].type=modBusType_uint32_t;
brunofgc 0:8c59a494a451 742 inputData = true;
brunofgc 0:8c59a494a451 743 }
brunofgc 0:8c59a494a451 744
brunofgc 0:8c59a494a451 745 if(strstr(linha,"uint16_t,")) {
brunofgc 0:8c59a494a451 746 this->readings[this->numReadings-1].type=modBusType_uint16_t;
brunofgc 0:8c59a494a451 747 inputData = true;
brunofgc 0:8c59a494a451 748 }
brunofgc 0:8c59a494a451 749
brunofgc 0:8c59a494a451 750 if(strstr(linha,"uint8_t,")) {
brunofgc 0:8c59a494a451 751 this->readings[this->numReadings-1].type=modBusType_uint8_t;
brunofgc 0:8c59a494a451 752 inputData = true;
brunofgc 0:8c59a494a451 753 }
brunofgc 0:8c59a494a451 754
brunofgc 0:8c59a494a451 755 if(strstr(linha,"bit,")) {
brunofgc 0:8c59a494a451 756 this->readings[this->numReadings-1].type=modBusType_bit;
brunofgc 0:8c59a494a451 757 inputData = true;
brunofgc 0:8c59a494a451 758 }
brunofgc 0:8c59a494a451 759
brunofgc 0:8c59a494a451 760 if(inputData){
brunofgc 0:8c59a494a451 761 pChar = strtok(linha,",");
brunofgc 0:8c59a494a451 762
brunofgc 0:8c59a494a451 763 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 764 addr = atoi(pChar);
brunofgc 0:8c59a494a451 765
brunofgc 0:8c59a494a451 766 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 767 func = atoi(pChar);
brunofgc 0:8c59a494a451 768
brunofgc 0:8c59a494a451 769 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 770 reg = atoi(pChar);
brunofgc 0:8c59a494a451 771
brunofgc 0:8c59a494a451 772 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 773 numRegs = atoi(pChar);
brunofgc 0:8c59a494a451 774
brunofgc 0:8c59a494a451 775 this->readings[this->numReadings-1].addr=addr;
brunofgc 0:8c59a494a451 776 this->readings[this->numReadings-1].func=func;
brunofgc 0:8c59a494a451 777 this->readings[this->numReadings-1].reg=reg;
brunofgc 0:8c59a494a451 778 this->readings[this->numReadings-1].numRegs=numRegs;
brunofgc 0:8c59a494a451 779 }
brunofgc 0:8c59a494a451 780
brunofgc 0:8c59a494a451 781 }
brunofgc 0:8c59a494a451 782
brunofgc 0:8c59a494a451 783 void device::setAlarm(char *linha)
brunofgc 0:8c59a494a451 784 {
brunofgc 0:8c59a494a451 785 float floatVar;
brunofgc 0:8c59a494a451 786 uint32_t aux32_t;
brunofgc 0:8c59a494a451 787 uint16_t aux16_t;
brunofgc 0:8c59a494a451 788 char *pChar;
brunofgc 0:8c59a494a451 789
brunofgc 0:8c59a494a451 790 if(strstr(linha,"alarmSet")) {
brunofgc 2:ca3723da6668 791 //Inicialização de contadores de alarme
brunofgc 2:ca3723da6668 792 //É necessário inicializar estes dados para quando a máquina de alarmes rodar ter um inicio correto.
brunofgc 2:ca3723da6668 793 this->alarms[this->numAlarms].secAlarm=0;
brunofgc 2:ca3723da6668 794 this->alarms[this->numAlarms].idAct=0;
brunofgc 5:8efd609dea7d 795 this->alarms[this->numAlarms].on=0;
brunofgc 2:ca3723da6668 796 this->alarms[this->numAlarms].alarmFound = false;
brunofgc 0:8c59a494a451 797 //Inicialização de contadores de alarme
brunofgc 0:8c59a494a451 798 this->numAlarms++;
brunofgc 0:8c59a494a451 799 }
brunofgc 0:8c59a494a451 800
brunofgc 5:8efd609dea7d 801 if(strstr(linha,"idAlarm:")){
brunofgc 0:8c59a494a451 802 strtok(linha,":");
brunofgc 0:8c59a494a451 803 this->alarms[this->numAlarms-1].id = atoi(strtok(NULL,"\r\n"));
brunofgc 0:8c59a494a451 804 }
brunofgc 0:8c59a494a451 805
brunofgc 5:8efd609dea7d 806 if(strstr(linha,"seconds:")) {
brunofgc 0:8c59a494a451 807 strtok(linha,":");
brunofgc 0:8c59a494a451 808 pChar = strtok(NULL,"\r\n");
brunofgc 0:8c59a494a451 809 this->alarms[this->numAlarms-1].seconds = atoi(pChar);
brunofgc 0:8c59a494a451 810 }
brunofgc 0:8c59a494a451 811
brunofgc 5:8efd609dea7d 812 if(strstr(linha,"on:")) {
brunofgc 5:8efd609dea7d 813 strtok(linha,":");
brunofgc 5:8efd609dea7d 814 pChar = strtok(NULL,"\r\n");
brunofgc 5:8efd609dea7d 815 this->alarms[this->numAlarms-1].on = atoi(pChar);
brunofgc 5:8efd609dea7d 816 }
brunofgc 5:8efd609dea7d 817
brunofgc 5:8efd609dea7d 818 if(strstr(linha,"idAct:")) {
brunofgc 0:8c59a494a451 819 strtok(linha,":");
brunofgc 0:8c59a494a451 820 this->alarms[this->numAlarms-1].idAct = atoi(strtok(NULL,""));
brunofgc 0:8c59a494a451 821 return;
brunofgc 5:8efd609dea7d 822 }
brunofgc 5:8efd609dea7d 823
brunofgc 5:8efd609dea7d 824 if(strstr(linha,"bit,")){
brunofgc 5:8efd609dea7d 825 this->alarms[this->numAlarms-1].type=modBusType_bit;
brunofgc 5:8efd609dea7d 826
brunofgc 0:8c59a494a451 827 pChar = strtok(linha,",");
brunofgc 0:8c59a494a451 828
brunofgc 0:8c59a494a451 829 //Parametro1
brunofgc 0:8c59a494a451 830 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 831 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 832
brunofgc 0:8c59a494a451 833 //Parametro2
brunofgc 0:8c59a494a451 834 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 835 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 836
brunofgc 0:8c59a494a451 837 //Parametro3
brunofgc 0:8c59a494a451 838 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 839 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 840
brunofgc 0:8c59a494a451 841 //Parametro4
brunofgc 0:8c59a494a451 842 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 843 this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um
brunofgc 0:8c59a494a451 844
brunofgc 0:8c59a494a451 845 //Parametro5
brunofgc 0:8c59a494a451 846 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 847 this->alarms[this->numAlarms-1].value[0]= (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um
brunofgc 0:8c59a494a451 848 }
brunofgc 0:8c59a494a451 849
brunofgc 0:8c59a494a451 850 if(strstr(linha,"float,")) {
brunofgc 0:8c59a494a451 851 this->alarms[this->numAlarms-1].type=modBusType_float;
brunofgc 0:8c59a494a451 852 strtok(linha,",");
brunofgc 0:8c59a494a451 853
brunofgc 0:8c59a494a451 854 //Parametro 1;
brunofgc 0:8c59a494a451 855 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 856 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 857
brunofgc 0:8c59a494a451 858 //Parametro 2;
brunofgc 0:8c59a494a451 859 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 860 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 861
brunofgc 0:8c59a494a451 862 //Parametro 3;
brunofgc 0:8c59a494a451 863 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 864 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 865
brunofgc 0:8c59a494a451 866 //Parametro 4;
brunofgc 0:8c59a494a451 867 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 868 this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um
brunofgc 0:8c59a494a451 869
brunofgc 0:8c59a494a451 870 //Parametro 5;
brunofgc 0:8c59a494a451 871 pChar = strtok(NULL,"\r\n");
brunofgc 0:8c59a494a451 872 //floatVar = diversos::stringToFloat(pChar,100);
brunofgc 0:8c59a494a451 873 floatVar = atof(pChar);
brunofgc 5:8efd609dea7d 874
brunofgc 0:8c59a494a451 875 this->floatToBin(1,&floatVar,&this->alarms[this->numAlarms-1].value[0]);
brunofgc 0:8c59a494a451 876 }
brunofgc 5:8efd609dea7d 877
brunofgc 0:8c59a494a451 878 if(strstr(linha,"uint32_t,")) {
brunofgc 0:8c59a494a451 879 this->alarms[this->numAlarms-1].type=modBusType_uint32_t;
brunofgc 0:8c59a494a451 880 //sscanf(linha,"max:uint32_t,%lu,%lu,%lu,%lu",&aux1,&aux2,&aux3,&aux4);
brunofgc 0:8c59a494a451 881 strtok(linha,",");
brunofgc 0:8c59a494a451 882
brunofgc 0:8c59a494a451 883 //parametro1
brunofgc 5:8efd609dea7d 884 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 885 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 886
brunofgc 0:8c59a494a451 887 //parametro2
brunofgc 5:8efd609dea7d 888 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 889 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 890
brunofgc 0:8c59a494a451 891 //parametro3
brunofgc 5:8efd609dea7d 892 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 893 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 894
brunofgc 0:8c59a494a451 895 //Parametro 4;
brunofgc 0:8c59a494a451 896 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 897 this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um
brunofgc 0:8c59a494a451 898
brunofgc 0:8c59a494a451 899 //parametro5
brunofgc 5:8efd609dea7d 900 pChar = strtok(NULL,"\r\n");
brunofgc 0:8c59a494a451 901 aux32_t = atoi(pChar);
brunofgc 5:8efd609dea7d 902
brunofgc 0:8c59a494a451 903 this->uint32_t_ToBin(1,&aux32_t,&this->alarms[this->numAlarms-1].value[0]);
brunofgc 0:8c59a494a451 904 }
brunofgc 0:8c59a494a451 905
brunofgc 0:8c59a494a451 906
brunofgc 0:8c59a494a451 907
brunofgc 0:8c59a494a451 908 if(strstr(linha,"uint16_t,")) {
brunofgc 0:8c59a494a451 909 this->alarms[this->numAlarms-1].type=modBusType_uint16_t;
brunofgc 0:8c59a494a451 910 strtok(linha,",");
brunofgc 0:8c59a494a451 911
brunofgc 0:8c59a494a451 912 //parametro1
brunofgc 0:8c59a494a451 913 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 914 this->alarms[this->numAlarms-1].addrModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 915
brunofgc 0:8c59a494a451 916 //parametro2
brunofgc 5:8efd609dea7d 917 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 918 this->alarms[this->numAlarms-1].funcModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 919
brunofgc 0:8c59a494a451 920 //parametro3
brunofgc 5:8efd609dea7d 921 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 922 this->alarms[this->numAlarms-1].regModbusRead = atoi(pChar);
brunofgc 0:8c59a494a451 923
brunofgc 0:8c59a494a451 924 //Parametro 4;
brunofgc 0:8c59a494a451 925 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 926 this->alarms[this->numAlarms-1].max = (atoi(pChar) != 0); //Qualquer valor diferente de 0 é um
brunofgc 0:8c59a494a451 927
brunofgc 0:8c59a494a451 928 //parametro5
brunofgc 5:8efd609dea7d 929 pChar = strtok(NULL,"\r\n");
brunofgc 0:8c59a494a451 930 aux16_t = atoi(pChar);
brunofgc 5:8efd609dea7d 931
brunofgc 0:8c59a494a451 932 this->uint16_t_ToBin(1,&aux16_t,&this->alarms[this->numAlarms-1].value[0]);
brunofgc 5:8efd609dea7d 933 }
brunofgc 0:8c59a494a451 934 }
brunofgc 0:8c59a494a451 935
brunofgc 0:8c59a494a451 936 void device::setSchedule(char *linha)
brunofgc 0:8c59a494a451 937 {
brunofgc 0:8c59a494a451 938 //float floatVar;
brunofgc 0:8c59a494a451 939 //uint32_t aux32_t;
brunofgc 0:8c59a494a451 940 //uint16_t aux16_t;
brunofgc 5:8efd609dea7d 941 char *pChar;
brunofgc 5:8efd609dea7d 942
brunofgc 2:ca3723da6668 943 if(strstr(linha,"scheduleSet")) {
brunofgc 0:8c59a494a451 944 //Inicialização de contadores de schedules
brunofgc 2:ca3723da6668 945 //É necessário inicializar estes dados para quando a máquina de schedules rodar ter um inicio correto.
brunofgc 2:ca3723da6668 946 this->schedules[this->numSchedules].actSent = false;
brunofgc 2:ca3723da6668 947 //Inicialização de contadores de schedules
brunofgc 2:ca3723da6668 948 this->numSchedules++;
brunofgc 0:8c59a494a451 949 }
brunofgc 0:8c59a494a451 950
brunofgc 5:8efd609dea7d 951 if(strstr(linha,"idSchedule:")) {
brunofgc 0:8c59a494a451 952 strtok(linha,":");
brunofgc 5:8efd609dea7d 953 pChar = strtok(NULL,"");
brunofgc 5:8efd609dea7d 954 this->schedules[this->numSchedules-1].id = atoi(pChar);
brunofgc 0:8c59a494a451 955 }
brunofgc 0:8c59a494a451 956
brunofgc 5:8efd609dea7d 957 if(strstr(linha,"dayTime:")) {
brunofgc 0:8c59a494a451 958 strtok(linha,":");
brunofgc 0:8c59a494a451 959 pChar = strtok(NULL,",");
brunofgc 0:8c59a494a451 960 this->schedules[this->numSchedules-1].weekday = atoi(pChar);
brunofgc 5:8efd609dea7d 961 pChar = strtok(NULL,"");
brunofgc 0:8c59a494a451 962 this->schedules[this->numSchedules-1].minute = atoi(pChar);
brunofgc 0:8c59a494a451 963 }
brunofgc 5:8efd609dea7d 964
brunofgc 5:8efd609dea7d 965 if(strstr(linha,"idAct:")) {
brunofgc 0:8c59a494a451 966 strtok(linha,":");
brunofgc 0:8c59a494a451 967 pChar = strtok(NULL,"");
brunofgc 0:8c59a494a451 968 this->schedules[this->numSchedules-1].idAct = atoi(pChar);
brunofgc 5:8efd609dea7d 969 }
brunofgc 5:8efd609dea7d 970 /*pc.printf("Debugando erro em scheduleSet.\r\n");
brunofgc 5:8efd609dea7d 971 pc.printf("Linha <%s>\r\n",linha);
brunofgc 5:8efd609dea7d 972 pc.printf("actSent = %lu",this->schedules[this->numSchedules-1].actSent);
brunofgc 5:8efd609dea7d 973 pc.printf("idSchedule = %lu",this->schedules[this->numSchedules-1].id);
brunofgc 5:8efd609dea7d 974 pc.printf("dayTime = %lu",this->schedules[this->numSchedules-1].weekday);
brunofgc 5:8efd609dea7d 975 pc.printf("idAct = %lu",this->schedules[this->numSchedules-1].idAct);
brunofgc 5:8efd609dea7d 976 pc.printf("Debugando erro em scheduleSet.\r\n");*/
brunofgc 0:8c59a494a451 977 }
brunofgc 0:8c59a494a451 978
brunofgc 4:3f92979d1ffb 979 void device::setScheduleException(char *linha)
brunofgc 4:3f92979d1ffb 980 {
brunofgc 4:3f92979d1ffb 981 //float floatVar;
brunofgc 4:3f92979d1ffb 982 //uint32_t aux32_t;
brunofgc 4:3f92979d1ffb 983 //uint16_t aux16_t;
brunofgc 5:8efd609dea7d 984 char *pChar;
brunofgc 5:8efd609dea7d 985 if(strstr(linha,"scheduleExceptionSet")) {
brunofgc 4:3f92979d1ffb 986 //Inicialização de contadores de schedulesExceptions
brunofgc 4:3f92979d1ffb 987 this->numScheduleExceptions++;
brunofgc 4:3f92979d1ffb 988 }
brunofgc 4:3f92979d1ffb 989
brunofgc 5:8efd609dea7d 990 if(strstr(linha,"idSchedule:")) {
brunofgc 4:3f92979d1ffb 991 strtok(linha,":");
brunofgc 4:3f92979d1ffb 992 this->scheduleExceptions[this->numScheduleExceptions-1].id_schedule = atoi(strtok(NULL,"\r\n"));
brunofgc 4:3f92979d1ffb 993 }
brunofgc 4:3f92979d1ffb 994
brunofgc 5:8efd609dea7d 995 if(strstr(linha,"timestamp:")) {
brunofgc 4:3f92979d1ffb 996 strtok(linha,":");
brunofgc 4:3f92979d1ffb 997 pChar = strtok(NULL,",");
brunofgc 5:8efd609dea7d 998 this->scheduleExceptions[this->numScheduleExceptions-1].timestamp = atoi(pChar);
brunofgc 5:8efd609dea7d 999 }
brunofgc 4:3f92979d1ffb 1000 }
brunofgc 4:3f92979d1ffb 1001
brunofgc 0:8c59a494a451 1002 /*void device::writeReadingsToSD(){
brunofgc 0:8c59a494a451 1003 //Esta função faz a inserção de todos os dados no arquivo armazenamento.
brunofgc 5:8efd609dea7d 1004 uint16_t readingIndex=0;
brunofgc 5:8efd609dea7d 1005
brunofgc 0:8c59a494a451 1006 float *floatBuffer;
brunofgc 0:8c59a494a451 1007 uint32_t *uint32_tBuffer;
brunofgc 5:8efd609dea7d 1008 uint16_t *uint16_tBuffer;
brunofgc 5:8efd609dea7d 1009 bool *boolBuffer;
brunofgc 0:8c59a494a451 1010 uint32_t seconds_uint32_t;
brunofgc 0:8c59a494a451 1011
brunofgc 0:8c59a494a451 1012 //char registro[1024];
brunofgc 0:8c59a494a451 1013 //uint16_t indexRegistro;
brunofgc 0:8c59a494a451 1014
brunofgc 0:8c59a494a451 1015 seconds_uint32_t = (uint32_t) time(NULL);
brunofgc 0:8c59a494a451 1016
brunofgc 0:8c59a494a451 1017 //Inicio da string dentro do arquivo binario
brunofgc 8:25061210fcc9 1018 sdCard::insereDadosBank("log{data:",9);
brunofgc 0:8c59a494a451 1019
brunofgc 0:8c59a494a451 1020 //O timestamp é posto nos 4 primeiros bytes (segundos)
brunofgc 8:25061210fcc9 1021 sdCard::insereDadosBank(&sdCard::armazenamento,(char *)&seconds_uint32_t,4);
brunofgc 0:8c59a494a451 1022
brunofgc 0:8c59a494a451 1023 for(readingIndex = 0;readingIndex < this->numReadings;readingIndex++){
brunofgc 0:8c59a494a451 1024 switch(this->readings[readingIndex].type){
brunofgc 0:8c59a494a451 1025 case modBusType_float:
brunofgc 0:8c59a494a451 1026 floatBuffer = (float*) malloc(this->readings[readingIndex].numRegs*sizeof(float));
brunofgc 0:8c59a494a451 1027 modBusMaster1::readFloat(
brunofgc 0:8c59a494a451 1028 this->readings[readingIndex].addr,
brunofgc 0:8c59a494a451 1029 this->readings[readingIndex].func,
brunofgc 0:8c59a494a451 1030 this->readings[readingIndex].reg,
brunofgc 0:8c59a494a451 1031 this->readings[readingIndex].numRegs,
brunofgc 0:8c59a494a451 1032 floatBuffer
brunofgc 0:8c59a494a451 1033 );
brunofgc 0:8c59a494a451 1034 //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
brunofgc 8:25061210fcc9 1035 sdCard::insereDadosBank((char *)floatBuffer,sizeof(float)*this->readings[readingIndex].numRegs);
brunofgc 0:8c59a494a451 1036 free(floatBuffer);
brunofgc 0:8c59a494a451 1037 break;
brunofgc 0:8c59a494a451 1038 case modBusType_uint32_t:
brunofgc 0:8c59a494a451 1039 uint32_tBuffer = (uint32_t*) malloc(this->readings[readingIndex].numRegs*sizeof(uint32_t));
brunofgc 0:8c59a494a451 1040 modBusMaster1::readRegister32BIT(
brunofgc 0:8c59a494a451 1041 this->readings[readingIndex].addr,
brunofgc 0:8c59a494a451 1042 this->readings[readingIndex].func,
brunofgc 0:8c59a494a451 1043 this->readings[readingIndex].reg,
brunofgc 0:8c59a494a451 1044 this->readings[readingIndex].numRegs,
brunofgc 0:8c59a494a451 1045 uint32_tBuffer
brunofgc 0:8c59a494a451 1046 );
brunofgc 0:8c59a494a451 1047 //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
brunofgc 8:25061210fcc9 1048 sdCard::insereDadosBank((char *)uint32_tBuffer,sizeof(uint32_t)*this->readings[readingIndex].numRegs);
brunofgc 0:8c59a494a451 1049 free(uint32_tBuffer);
brunofgc 0:8c59a494a451 1050 break;
brunofgc 0:8c59a494a451 1051
brunofgc 0:8c59a494a451 1052 case modBusType_uint16_t:
brunofgc 0:8c59a494a451 1053 uint16_tBuffer = (uint16_t*) malloc(this->readings[readingIndex].numRegs*sizeof(uint16_t));
brunofgc 0:8c59a494a451 1054 modBusMaster1::readRegister16BIT(
brunofgc 0:8c59a494a451 1055 this->readings[readingIndex].addr,
brunofgc 0:8c59a494a451 1056 this->readings[readingIndex].func,
brunofgc 0:8c59a494a451 1057 this->readings[readingIndex].reg,
brunofgc 0:8c59a494a451 1058 this->readings[readingIndex].numRegs,
brunofgc 0:8c59a494a451 1059 uint16_tBuffer
brunofgc 0:8c59a494a451 1060 );
brunofgc 0:8c59a494a451 1061 //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
brunofgc 8:25061210fcc9 1062 sdCard::insereDadosBank((char *)uint16_tBuffer,sizeof(uint16_t)*this->readings[readingIndex].numRegs);
brunofgc 0:8c59a494a451 1063 free(uint16_tBuffer);
brunofgc 0:8c59a494a451 1064 break;
brunofgc 0:8c59a494a451 1065
brunofgc 0:8c59a494a451 1066 case modBusType_bit:
brunofgc 0:8c59a494a451 1067 boolBuffer = (bool*) malloc(this->readings[readingIndex].numRegs*sizeof(bool));
brunofgc 0:8c59a494a451 1068 modBusMaster1::readCoils(
brunofgc 0:8c59a494a451 1069 this->readings[readingIndex].addr,
brunofgc 0:8c59a494a451 1070 this->readings[readingIndex].reg,
brunofgc 0:8c59a494a451 1071 this->readings[readingIndex].numRegs,
brunofgc 0:8c59a494a451 1072 boolBuffer
brunofgc 0:8c59a494a451 1073 );
brunofgc 0:8c59a494a451 1074 //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
brunofgc 8:25061210fcc9 1075 sdCard::insereDadosBank((char *)boolBuffer,sizeof(bool)*this->readings[readingIndex].numRegs);
brunofgc 0:8c59a494a451 1076 free(boolBuffer);
brunofgc 0:8c59a494a451 1077 break;
brunofgc 0:8c59a494a451 1078
brunofgc 0:8c59a494a451 1079 }
brunofgc 0:8c59a494a451 1080 }
brunofgc 8:25061210fcc9 1081 sdCard::insereDadosBank("}log",4);
brunofgc 0:8c59a494a451 1082 }*/
brunofgc 0:8c59a494a451 1083
brunofgc 0:8c59a494a451 1084 uint8_t device::execAct(uint32_t index){
brunofgc 0:8c59a494a451 1085 //Primeiro preciso decidir que tipo de act estou lidando para tanto preciso pegar a ACT inteira.
brunofgc 0:8c59a494a451 1086 //Busca no arquivo
brunofgc 0:8c59a494a451 1087 //Abre arquivo
brunofgc 0:8c59a494a451 1088 char actString[1024];
brunofgc 0:8c59a494a451 1089 char indexBusca[15];
brunofgc 5:8efd609dea7d 1090 char alarmsSetString[256];
brunofgc 5:8efd609dea7d 1091 char alarmsResetString[256];
brunofgc 0:8c59a494a451 1092 char *pTipoComando;
brunofgc 0:8c59a494a451 1093 uint8_t tipoComando;
brunofgc 0:8c59a494a451 1094 bool endOfFile = false;
brunofgc 5:8efd609dea7d 1095 uint8_t indexAlarms;
brunofgc 5:8efd609dea7d 1096 char *pChar;
brunofgc 9:0230ec4d2e68 1097 bool commandExecOk = true;
brunofgc 12:254c32b4ece7 1098 uint8_t i;
brunofgc 12:254c32b4ece7 1099
brunofgc 0:8c59a494a451 1100 //Variáveis comuns;
brunofgc 0:8c59a494a451 1101 uint8_t param1;
brunofgc 0:8c59a494a451 1102 uint8_t param2;
brunofgc 0:8c59a494a451 1103 uint16_t param3;
brunofgc 0:8c59a494a451 1104 uint32_t param4;
brunofgc 0:8c59a494a451 1105
brunofgc 0:8c59a494a451 1106 //printf("\r\n===================DEBUG(execAct)===================\r\n");
brunofgc 5:8efd609dea7d 1107 sprintf(indexBusca,"idAct:%lu;",index);
brunofgc 5:8efd609dea7d 1108 pc.printf("Lido <%s>.\r\n",indexBusca);
brunofgc 0:8c59a494a451 1109 //printf("Buscando por indexBusca<%s>.\r\n",indexBusca);
brunofgc 0:8c59a494a451 1110 if(sdCard::abreArquivo(&sdCard::devices,"r")){
brunofgc 0:8c59a494a451 1111 do{
brunofgc 0:8c59a494a451 1112 endOfFile = feof(sdCard::devices.fp);
brunofgc 5:8efd609dea7d 1113 if(!endOfFile){fgets(actString,1024,sdCard::devices.fp);}
brunofgc 5:8efd609dea7d 1114 }while((strstr(actString,"actList")==NULL)&&(endOfFile==0));
brunofgc 6:f20c0e094294 1115 pc.printf("Achei o actList.\r\n");
brunofgc 5:8efd609dea7d 1116 do{
brunofgc 5:8efd609dea7d 1117 endOfFile = feof(sdCard::devices.fp);
brunofgc 0:8c59a494a451 1118 if(!endOfFile){fgets(actString,1024,sdCard::devices.fp);}
brunofgc 5:8efd609dea7d 1119 //printf("Linha ACT = <%s>.\r\nendOfFile = %u\r\n",actString,endOfFile);
brunofgc 5:8efd609dea7d 1120 }while((strstr(actString,indexBusca)==NULL)&&(endOfFile==0));
brunofgc 0:8c59a494a451 1121 sdCard::fechaArquivo(&sdCard::devices);
brunofgc 0:8c59a494a451 1122
brunofgc 0:8c59a494a451 1123 //Vê se deu tudo certo, se não encontrou, retorna false
brunofgc 0:8c59a494a451 1124 if(endOfFile){
brunofgc 0:8c59a494a451 1125 return false;
brunofgc 0:8c59a494a451 1126 }
brunofgc 0:8c59a494a451 1127 //Tudo correndo bem.
brunofgc 0:8c59a494a451 1128
brunofgc 0:8c59a494a451 1129 //printf("\r\nPoint 1\r\n");
brunofgc 0:8c59a494a451 1130
brunofgc 0:8c59a494a451 1131 //Encontrado o tipo de comando reutilizando a string indexBusca;
brunofgc 5:8efd609dea7d 1132 pChar = strtok(actString,";");
brunofgc 5:8efd609dea7d 1133 pc.printf("1- <%s>.\r\n",pChar);
brunofgc 5:8efd609dea7d 1134 pChar = strtok(NULL,";");
brunofgc 5:8efd609dea7d 1135 strcpy(alarmsSetString,pChar);
brunofgc 5:8efd609dea7d 1136 pChar = strtok(NULL,";");
brunofgc 5:8efd609dea7d 1137 strcpy(alarmsResetString,pChar);
brunofgc 5:8efd609dea7d 1138
brunofgc 5:8efd609dea7d 1139 pTipoComando = strtok(NULL,",");
brunofgc 5:8efd609dea7d 1140
brunofgc 5:8efd609dea7d 1141 printf("\r\nPoint 2 comando <%s>\r\n",pTipoComando);
brunofgc 0:8c59a494a451 1142 if(strstr(pTipoComando,"float")){tipoComando = modBusType_float;}
brunofgc 0:8c59a494a451 1143 if(strstr(pTipoComando,"bit")){tipoComando = modBusType_bit;}
brunofgc 0:8c59a494a451 1144 if(strstr(pTipoComando,"uint8_t")){tipoComando = modBusType_uint8_t;}
brunofgc 0:8c59a494a451 1145 if(strstr(pTipoComando,"uint16_t")){tipoComando = modBusType_uint16_t;}
brunofgc 0:8c59a494a451 1146 if(strstr(pTipoComando,"uint32_t")){tipoComando = modBusType_uint32_t;}
brunofgc 1:3f9e5b86d9e4 1147 if(strstr(pTipoComando,"IR")){tipoComando = IrCommandType;}
brunofgc 1:3f9e5b86d9e4 1148 if(strstr(pTipoComando,"PWM")){tipoComando = PWMCommandType;}
brunofgc 0:8c59a494a451 1149 }else{
brunofgc 0:8c59a494a451 1150 return false;
brunofgc 0:8c59a494a451 1151 }
brunofgc 0:8c59a494a451 1152
brunofgc 0:8c59a494a451 1153 switch(tipoComando){
brunofgc 0:8c59a494a451 1154 case modBusType_float:
brunofgc 0:8c59a494a451 1155 float floatValueToWrite;
brunofgc 0:8c59a494a451 1156 uint32_t auxMod;
brunofgc 0:8c59a494a451 1157 param1 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1158 param2 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1159 param3 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1160 //floatValueToWrite = diversos::stringToFloat(strtok(NULL,","),100);
brunofgc 0:8c59a494a451 1161 floatValueToWrite = atof(strtok(NULL,","));
brunofgc 5:8efd609dea7d 1162
brunofgc 1:3f9e5b86d9e4 1163 //Envio comando via Modbus
brunofgc 9:0230ec4d2e68 1164 if(modBusMaster1::writeFloat(
brunofgc 1:3f9e5b86d9e4 1165 param1,
brunofgc 1:3f9e5b86d9e4 1166 param3,
brunofgc 10:b61bb770f7b2 1167 1,
brunofgc 1:3f9e5b86d9e4 1168 &floatValueToWrite
brunofgc 9:0230ec4d2e68 1169 )){commandExecOk = false;}
brunofgc 0:8c59a494a451 1170 break;
brunofgc 0:8c59a494a451 1171 case modBusType_uint32_t:
brunofgc 0:8c59a494a451 1172 param1 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1173 param2 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1174 param3 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1175 param4 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1176
brunofgc 9:0230ec4d2e68 1177 if(modBusMaster1::writeRegister32BIT(
brunofgc 0:8c59a494a451 1178 param1,
brunofgc 0:8c59a494a451 1179 param3,
brunofgc 10:b61bb770f7b2 1180 1,
brunofgc 0:8c59a494a451 1181 &param4
brunofgc 9:0230ec4d2e68 1182 )){commandExecOk = false;}
brunofgc 0:8c59a494a451 1183 break;
brunofgc 0:8c59a494a451 1184 case modBusType_uint16_t:
brunofgc 0:8c59a494a451 1185 uint16_t param4_uint16_t;
brunofgc 0:8c59a494a451 1186 param1 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1187 param2 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1188 param3 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1189 param4_uint16_t = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1190
brunofgc 9:0230ec4d2e68 1191 if(modBusMaster1::writeRegister16BIT(
brunofgc 0:8c59a494a451 1192 param1,
brunofgc 0:8c59a494a451 1193 param3,
brunofgc 10:b61bb770f7b2 1194 1,
brunofgc 0:8c59a494a451 1195 &param4_uint16_t
brunofgc 9:0230ec4d2e68 1196 )){commandExecOk = false;}
brunofgc 0:8c59a494a451 1197 break;
brunofgc 0:8c59a494a451 1198 case modBusType_bit:
brunofgc 0:8c59a494a451 1199 param1 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1200 param2 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1201 param3 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1202 param4 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1203
brunofgc 0:8c59a494a451 1204 if(param1 != 254){
brunofgc 0:8c59a494a451 1205 //Envia comando via Modbus
brunofgc 9:0230ec4d2e68 1206 if(modBusMaster1::writeSingleCoil(
brunofgc 0:8c59a494a451 1207 param1,
brunofgc 0:8c59a494a451 1208 param3,
brunofgc 0:8c59a494a451 1209 (bool)param4
brunofgc 9:0230ec4d2e68 1210 )){commandExecOk = false;}
brunofgc 0:8c59a494a451 1211 }else{
brunofgc 0:8c59a494a451 1212 //Executa comando interno;
brunofgc 0:8c59a494a451 1213 switch(param3){
brunofgc 0:8c59a494a451 1214 case 0:
brunofgc 0:8c59a494a451 1215 SD1.write(param4*1.0f);
brunofgc 0:8c59a494a451 1216 break;
brunofgc 0:8c59a494a451 1217 case 1:
brunofgc 0:8c59a494a451 1218 SD2.write(param4*1.0f);
brunofgc 0:8c59a494a451 1219 break;
brunofgc 0:8c59a494a451 1220 case 2:
brunofgc 0:8c59a494a451 1221 SD3.write(param4*1.0f);
brunofgc 0:8c59a494a451 1222 break;
brunofgc 0:8c59a494a451 1223 case 3:
brunofgc 0:8c59a494a451 1224 SD4.write(param4*1.0f);
brunofgc 0:8c59a494a451 1225 break;
brunofgc 0:8c59a494a451 1226 case 4:
brunofgc 0:8c59a494a451 1227 SD5.write(param4*1.0f);
brunofgc 0:8c59a494a451 1228 break;
brunofgc 0:8c59a494a451 1229 case 5:
brunofgc 0:8c59a494a451 1230 SD6.write(param4*1.0f);
brunofgc 0:8c59a494a451 1231 break;
brunofgc 0:8c59a494a451 1232 case 6:
brunofgc 0:8c59a494a451 1233 SD7 = param4;
brunofgc 0:8c59a494a451 1234 break;
brunofgc 0:8c59a494a451 1235 case 7:
brunofgc 0:8c59a494a451 1236 SD8 = param4;
brunofgc 0:8c59a494a451 1237 break;
brunofgc 0:8c59a494a451 1238 }
brunofgc 0:8c59a494a451 1239 }
brunofgc 0:8c59a494a451 1240 break;
brunofgc 0:8c59a494a451 1241 case IrCommandType:
brunofgc 0:8c59a494a451 1242 //Busca no arquivo
brunofgc 0:8c59a494a451 1243 //Abre arquivo
brunofgc 0:8c59a494a451 1244 //printf("\r\nIniciando execucao de comando IR\r\n");
brunofgc 0:8c59a494a451 1245 param1 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1246 param2 = atoi(strtok(NULL,","));
brunofgc 0:8c59a494a451 1247 //printf("\r\nparam 1 %lu, param2 %lu\r\n",param1,param2);
brunofgc 0:8c59a494a451 1248 pTipoComando = strtok(NULL,"S");//Reaproveitando variável pTipoComando
brunofgc 0:8c59a494a451 1249 //printf("\r\nPacote IR <%s>.\r\n",pTipoComando);
brunofgc 0:8c59a494a451 1250 deserializaPacoteIR(pTipoComando);
brunofgc 5:8efd609dea7d 1251 //printf("Deserializado.\r\nInicio do envio.\r\n");
brunofgc 12:254c32b4ece7 1252 if(param1){
brunofgc 12:254c32b4ece7 1253 enviaComandoIR(param1,param2);
brunofgc 12:254c32b4ece7 1254 }else{
brunofgc 12:254c32b4ece7 1255 for(i=33;i<41;i++){
brunofgc 12:254c32b4ece7 1256 enviaComandoIR(i,param2);
brunofgc 12:254c32b4ece7 1257 if(i!=40){osDelay(100);}
brunofgc 12:254c32b4ece7 1258 }
brunofgc 12:254c32b4ece7 1259 }
brunofgc 5:8efd609dea7d 1260 //printf("Fim do envio.\r\n");
brunofgc 0:8c59a494a451 1261 break;
brunofgc 1:3f9e5b86d9e4 1262
brunofgc 1:3f9e5b86d9e4 1263 case PWMCommandType:
brunofgc 1:3f9e5b86d9e4 1264 //float floatValuePWM;
brunofgc 1:3f9e5b86d9e4 1265 //uint32_t auxPeriod;
brunofgc 1:3f9e5b86d9e4 1266 param1 = atoi(strtok(NULL,","));
brunofgc 1:3f9e5b86d9e4 1267 param2 = atoi(strtok(NULL,","));
brunofgc 1:3f9e5b86d9e4 1268 param3 = atoi(strtok(NULL,","));
brunofgc 1:3f9e5b86d9e4 1269 //floatValueToWrite = diversos::stringToFloat(strtok(NULL,","),100);
brunofgc 1:3f9e5b86d9e4 1270 floatValueToWrite = atof(strtok(NULL,","));
brunofgc 1:3f9e5b86d9e4 1271
brunofgc 1:3f9e5b86d9e4 1272 //Executa comando interno;
brunofgc 1:3f9e5b86d9e4 1273 auxMod = floatValueToWrite/10;
brunofgc 1:3f9e5b86d9e4 1274 floatValueToWrite = floatValueToWrite-(auxMod*10);
brunofgc 1:3f9e5b86d9e4 1275 SD1.period_us(auxMod);
brunofgc 1:3f9e5b86d9e4 1276 pwmPeriod = auxMod;
brunofgc 1:3f9e5b86d9e4 1277 switch(param3){
brunofgc 1:3f9e5b86d9e4 1278 case 0:
brunofgc 1:3f9e5b86d9e4 1279 SD1.write(floatValueToWrite);
brunofgc 1:3f9e5b86d9e4 1280 break;
brunofgc 1:3f9e5b86d9e4 1281 case 1:
brunofgc 1:3f9e5b86d9e4 1282 SD2.write(floatValueToWrite);
brunofgc 1:3f9e5b86d9e4 1283 break;
brunofgc 1:3f9e5b86d9e4 1284 case 2:
brunofgc 1:3f9e5b86d9e4 1285 SD3.write(floatValueToWrite);
brunofgc 1:3f9e5b86d9e4 1286 break;
brunofgc 1:3f9e5b86d9e4 1287 case 3:
brunofgc 1:3f9e5b86d9e4 1288 SD4.write(floatValueToWrite);
brunofgc 1:3f9e5b86d9e4 1289 break;
brunofgc 1:3f9e5b86d9e4 1290 case 4:
brunofgc 1:3f9e5b86d9e4 1291 SD5.write(floatValueToWrite);
brunofgc 1:3f9e5b86d9e4 1292 break;
brunofgc 1:3f9e5b86d9e4 1293 case 5:
brunofgc 1:3f9e5b86d9e4 1294 SD6.write(floatValueToWrite);
brunofgc 1:3f9e5b86d9e4 1295 break;
brunofgc 1:3f9e5b86d9e4 1296 }
brunofgc 1:3f9e5b86d9e4 1297 break;
brunofgc 1:3f9e5b86d9e4 1298
brunofgc 0:8c59a494a451 1299 default:
brunofgc 0:8c59a494a451 1300 //printf("comando nao encontrado\r\n");
brunofgc 0:8c59a494a451 1301 break;
brunofgc 0:8c59a494a451 1302 }
brunofgc 5:8efd609dea7d 1303 //Coletando dados do alarmSet e alarmReset
brunofgc 5:8efd609dea7d 1304
brunofgc 5:8efd609dea7d 1305 pChar = strtok(alarmsSetString,",");
brunofgc 5:8efd609dea7d 1306 while(pChar!=NULL){
brunofgc 5:8efd609dea7d 1307 pc.printf("Lido Alarm Set %lu - <%lu>.\r\n",indexAlarms,atoi(pChar));
brunofgc 13:c1122e7b0b36 1308 if(atoi(pChar)){
brunofgc 13:c1122e7b0b36 1309 dispositivos[0]->alarmOnOff(atoi(pChar),1);
brunofgc 13:c1122e7b0b36 1310 }
brunofgc 5:8efd609dea7d 1311 pChar = strtok(NULL,",");
brunofgc 5:8efd609dea7d 1312 }
brunofgc 5:8efd609dea7d 1313
brunofgc 5:8efd609dea7d 1314 pChar = strtok(alarmsResetString,",");
brunofgc 5:8efd609dea7d 1315 while(pChar!=NULL){
brunofgc 5:8efd609dea7d 1316 pc.printf("Lido Alarm Reset %lu - <%lu>.\r\n",indexAlarms,atoi(pChar));
brunofgc 13:c1122e7b0b36 1317 if(atoi(pChar)){
brunofgc 13:c1122e7b0b36 1318 dispositivos[0]->alarmOnOff(atoi(pChar),0);
brunofgc 13:c1122e7b0b36 1319 }
brunofgc 5:8efd609dea7d 1320 pChar = strtok(NULL,",");
brunofgc 5:8efd609dea7d 1321 }
brunofgc 5:8efd609dea7d 1322
brunofgc 0:8c59a494a451 1323 //printf("\r\n===================DEBUG(execAct)===================\r\n");
brunofgc 9:0230ec4d2e68 1324 return commandExecOk;
brunofgc 0:8c59a494a451 1325 }
brunofgc 0:8c59a494a451 1326
brunofgc 5:8efd609dea7d 1327 void device::alarmOnOff(uint32_t idAlarm,bool state){
brunofgc 5:8efd609dea7d 1328 uint16_t alarmIndex;
brunofgc 5:8efd609dea7d 1329 char indexBusca[30];
brunofgc 5:8efd609dea7d 1330 char alarmString[40];
brunofgc 5:8efd609dea7d 1331 uint32_t seekPosition;
brunofgc 5:8efd609dea7d 1332 bool endOfFile;
brunofgc 5:8efd609dea7d 1333 char charState;
brunofgc 5:8efd609dea7d 1334
brunofgc 5:8efd609dea7d 1335 for(alarmIndex = 0; alarmIndex < alarmes; alarmIndex++){
brunofgc 5:8efd609dea7d 1336 if(this->alarms[alarmIndex].id == idAlarm){
brunofgc 5:8efd609dea7d 1337 this->alarms[alarmIndex].on = state;
brunofgc 5:8efd609dea7d 1338 }
brunofgc 5:8efd609dea7d 1339 }
brunofgc 5:8efd609dea7d 1340
brunofgc 5:8efd609dea7d 1341 if(!sdCard::abreArquivo(&sdCard::devices,"rb+")){return;}
brunofgc 5:8efd609dea7d 1342
brunofgc 7:b4b2b8720166 1343 sprintf(indexBusca,"idAlarm:%lu\r",idAlarm);
brunofgc 5:8efd609dea7d 1344 do{
brunofgc 5:8efd609dea7d 1345 endOfFile = feof(sdCard::devices.fp);
brunofgc 5:8efd609dea7d 1346 if(!endOfFile){fgets(alarmString,40,sdCard::devices.fp);}
brunofgc 5:8efd609dea7d 1347 }while((strstr(alarmString,indexBusca)==NULL)&&(endOfFile==0));
brunofgc 5:8efd609dea7d 1348
brunofgc 5:8efd609dea7d 1349
brunofgc 5:8efd609dea7d 1350 do{
brunofgc 5:8efd609dea7d 1351 endOfFile = feof(sdCard::devices.fp);
brunofgc 5:8efd609dea7d 1352 if(!endOfFile){fgets(alarmString,40,sdCard::devices.fp);}
brunofgc 5:8efd609dea7d 1353 }while((strstr(alarmString,"on:")==NULL)&&(endOfFile==0));
brunofgc 5:8efd609dea7d 1354
brunofgc 5:8efd609dea7d 1355
brunofgc 5:8efd609dea7d 1356 if(endOfFile){
brunofgc 5:8efd609dea7d 1357 sdCard::fechaArquivo(&sdCard::devices);
brunofgc 5:8efd609dea7d 1358 return;
brunofgc 5:8efd609dea7d 1359 }
brunofgc 5:8efd609dea7d 1360
brunofgc 5:8efd609dea7d 1361 seekPosition = ftell(sdCard::devices.fp)-3;
brunofgc 5:8efd609dea7d 1362 fseek(sdCard::devices.fp,seekPosition,SEEK_SET);
brunofgc 5:8efd609dea7d 1363 if(state){charState='1';}else{charState='0';}
brunofgc 5:8efd609dea7d 1364 fputc(charState,sdCard::devices.fp);
brunofgc 5:8efd609dea7d 1365 //fprintf(sdCard::devices.fp,"%u",state);
brunofgc 5:8efd609dea7d 1366 fflush(sdCard::devices.fp);
brunofgc 5:8efd609dea7d 1367 sdCard::fechaArquivo(&sdCard::devices);
brunofgc 5:8efd609dea7d 1368 }
brunofgc 5:8efd609dea7d 1369
brunofgc 0:8c59a494a451 1370 void device::writeReadingsToSD(){
brunofgc 0:8c59a494a451 1371 //Buffering before insertData
brunofgc 0:8c59a494a451 1372 //Esta função faz a inserção de todos os dados no arquivo armazenamento.
brunofgc 0:8c59a494a451 1373 uint16_t readingIndex=0;
brunofgc 0:8c59a494a451 1374 /*
brunofgc 0:8c59a494a451 1375 union {
brunofgc 0:8c59a494a451 1376 char c[4];
brunofgc 0:8c59a494a451 1377 float v;
brunofgc 0:8c59a494a451 1378 }uFloat;
brunofgc 0:8c59a494a451 1379 */
brunofgc 0:8c59a494a451 1380 float *floatBuffer;
brunofgc 0:8c59a494a451 1381 uint32_t *uint32_tBuffer;
brunofgc 0:8c59a494a451 1382 uint16_t *uint16_tBuffer;
brunofgc 0:8c59a494a451 1383 bool *boolBuffer;
brunofgc 0:8c59a494a451 1384 uint32_t seconds_uint32_t;
brunofgc 0:8c59a494a451 1385 char seconds_char[5];
brunofgc 0:8c59a494a451 1386
brunofgc 0:8c59a494a451 1387 seconds_uint32_t = (uint32_t) time(NULL);
brunofgc 0:8c59a494a451 1388 seconds_char[0]=(seconds_uint32_t >> 0) & 0xFF;
brunofgc 0:8c59a494a451 1389 seconds_char[1]=(seconds_uint32_t >> 8) & 0xFF;
brunofgc 0:8c59a494a451 1390 seconds_char[2]=(seconds_uint32_t >> 16) & 0xFF;
brunofgc 0:8c59a494a451 1391 seconds_char[3]=(seconds_uint32_t >> 24) & 0xFF;
brunofgc 0:8c59a494a451 1392 seconds_char[4]=0;
brunofgc 0:8c59a494a451 1393
brunofgc 0:8c59a494a451 1394
brunofgc 0:8c59a494a451 1395 //Inicio da string dentro do arquivo binario
brunofgc 16:1b43a57ee676 1396 sdCardBuf.del();
brunofgc 0:8c59a494a451 1397 sdCardBuf.fill("log{data:",9);
brunofgc 0:8c59a494a451 1398
brunofgc 0:8c59a494a451 1399 //O timestamp é posto nos 4 primeiros bytes (segundos)
brunofgc 0:8c59a494a451 1400 sdCardBuf.fill(seconds_char,5);
brunofgc 0:8c59a494a451 1401
brunofgc 0:8c59a494a451 1402 for(readingIndex = 0;readingIndex < this->numReadings;readingIndex++){
brunofgc 0:8c59a494a451 1403 switch(this->readings[readingIndex].type){
brunofgc 0:8c59a494a451 1404 case modBusType_float:
brunofgc 1:3f9e5b86d9e4 1405 if(this->readings[readingIndex].addr != enderecoControladoraVirtual){
brunofgc 0:8c59a494a451 1406 //Busca externa via Modbus
brunofgc 0:8c59a494a451 1407 floatBuffer = (float*) malloc(((this->readings[readingIndex].numRegs*sizeof(float))+1)); //Alocando mais um byte para status
brunofgc 15:6d9e9cafe138 1408 ((char *)floatBuffer)[(this->readings[readingIndex].numRegs*sizeof(float))] = modBusMaster1::readFloat(
brunofgc 0:8c59a494a451 1409 this->readings[readingIndex].addr,
brunofgc 0:8c59a494a451 1410 this->readings[readingIndex].func,
brunofgc 0:8c59a494a451 1411 this->readings[readingIndex].reg,
brunofgc 0:8c59a494a451 1412 this->readings[readingIndex].numRegs,
brunofgc 0:8c59a494a451 1413 floatBuffer
brunofgc 0:8c59a494a451 1414 );
brunofgc 0:8c59a494a451 1415 }else{
brunofgc 0:8c59a494a451 1416 //Busca Interna
brunofgc 0:8c59a494a451 1417 floatBuffer = (float*) malloc(sizeof(float));
brunofgc 3:75223647cf3d 1418 if((this->readings[readingIndex].reg<100)&&(this->readings[readingIndex].reg < num_temperatureSensors)){//Registradores das entradas de temperatura
brunofgc 3:75223647cf3d 1419 //Populando floatBuffer com a temperaturas
brunofgc 3:75223647cf3d 1420 floatBuffer[0] = temperaturas[this->readings[readingIndex].reg];
brunofgc 1:3f9e5b86d9e4 1421 }
brunofgc 15:6d9e9cafe138 1422 if((this->readings[readingIndex].reg>=100)&&(this->readings[readingIndex].reg<104)){
brunofgc 3:75223647cf3d 1423 //Registradores das entradas analógicas
brunofgc 3:75223647cf3d 1424 floatBuffer[0] = aiFiltrada[this->readings[readingIndex].reg - 100];
brunofgc 3:75223647cf3d 1425 }
brunofgc 3:75223647cf3d 1426 this->readings[readingIndex].numRegs = 1;
brunofgc 0:8c59a494a451 1427 }
brunofgc 0:8c59a494a451 1428
brunofgc 0:8c59a494a451 1429 //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
brunofgc 0:8c59a494a451 1430 sdCardBuf.fill((char *)floatBuffer,((sizeof(float)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status
brunofgc 0:8c59a494a451 1431 free(floatBuffer);
brunofgc 0:8c59a494a451 1432 break;
brunofgc 15:6d9e9cafe138 1433 case modBusType_uint32_t:
brunofgc 3:75223647cf3d 1434 if(this->readings[readingIndex].addr != enderecoControladoraVirtual){
brunofgc 15:6d9e9cafe138 1435 uint32_tBuffer = (uint32_t*) malloc((this->readings[readingIndex].numRegs*sizeof(uint32_t))+1); //Alocando mais um byte para status
brunofgc 15:6d9e9cafe138 1436 ((char *)uint32_tBuffer)[(this->readings[readingIndex].numRegs*sizeof(uint32_t))] = modBusMaster1::readRegister32BIT(//Ponho o status no ultimo byte
brunofgc 3:75223647cf3d 1437 this->readings[readingIndex].addr,
brunofgc 3:75223647cf3d 1438 this->readings[readingIndex].func,
brunofgc 3:75223647cf3d 1439 this->readings[readingIndex].reg,
brunofgc 3:75223647cf3d 1440 this->readings[readingIndex].numRegs,
brunofgc 3:75223647cf3d 1441 uint32_tBuffer
brunofgc 3:75223647cf3d 1442 );
brunofgc 3:75223647cf3d 1443 //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
brunofgc 3:75223647cf3d 1444 }else{
brunofgc 15:6d9e9cafe138 1445 uint32_tBuffer = (uint32_t*) malloc(sizeof(uint32_t)+1); //Alocando mais um byte para status
brunofgc 3:75223647cf3d 1446 uint32_tBuffer[0] = pulsosEDs[this->readings[readingIndex].reg];
brunofgc 3:75223647cf3d 1447 this->readings[readingIndex].numRegs = 1;
brunofgc 3:75223647cf3d 1448 pulsosEDs[this->readings[readingIndex].reg] = 0;
brunofgc 3:75223647cf3d 1449 }
brunofgc 0:8c59a494a451 1450 sdCardBuf.fill((char *)uint32_tBuffer,((sizeof(uint32_t)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status
brunofgc 0:8c59a494a451 1451 free(uint32_tBuffer);
brunofgc 0:8c59a494a451 1452 break;
brunofgc 0:8c59a494a451 1453
brunofgc 15:6d9e9cafe138 1454 case modBusType_uint16_t:
brunofgc 1:3f9e5b86d9e4 1455 if(this->readings[readingIndex].addr!=enderecoControladoraVirtual){
brunofgc 0:8c59a494a451 1456 uint16_tBuffer = (uint16_t*) malloc(((this->readings[readingIndex].numRegs*sizeof(uint16_t))+1));//Alocando mais um byte para status
brunofgc 15:6d9e9cafe138 1457 ((char *)uint16_tBuffer)[(this->readings[readingIndex].numRegs*sizeof(uint16_t))] = modBusMaster1::readRegister16BIT(//
brunofgc 0:8c59a494a451 1458 this->readings[readingIndex].addr,
brunofgc 0:8c59a494a451 1459 this->readings[readingIndex].func,
brunofgc 0:8c59a494a451 1460 this->readings[readingIndex].reg,
brunofgc 0:8c59a494a451 1461 this->readings[readingIndex].numRegs,
brunofgc 0:8c59a494a451 1462 uint16_tBuffer
brunofgc 0:8c59a494a451 1463 );
brunofgc 0:8c59a494a451 1464 //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
brunofgc 0:8c59a494a451 1465 sdCardBuf.fill((char *)uint16_tBuffer,((sizeof(uint16_t)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status
brunofgc 0:8c59a494a451 1466 free(uint16_tBuffer);
brunofgc 15:6d9e9cafe138 1467 }else{
brunofgc 0:8c59a494a451 1468 if((this->readings[readingIndex].reg>0)&&((this->readings[readingIndex].reg + this->readings[readingIndex].numRegs)<=4)){
brunofgc 15:6d9e9cafe138 1469 sdCardBuf.fill((char *)&aiFiltrada[this->readings[readingIndex].reg-1],sizeof(uint16_t)*this->readings[readingIndex].numRegs);
brunofgc 15:6d9e9cafe138 1470 seconds_char[4]=0;
brunofgc 15:6d9e9cafe138 1471 sdCardBuf.fill((char *)&seconds_char[4],1);
brunofgc 0:8c59a494a451 1472 }
brunofgc 0:8c59a494a451 1473 }
brunofgc 0:8c59a494a451 1474 break;
brunofgc 0:8c59a494a451 1475
brunofgc 0:8c59a494a451 1476 case modBusType_bit:
brunofgc 15:6d9e9cafe138 1477 boolBuffer = (bool*) malloc(sizeof(bool)+1);//Alocando mais um byte para status
brunofgc 15:6d9e9cafe138 1478 if(this->readings[readingIndex].addr != enderecoControladoraVirtual){
brunofgc 15:6d9e9cafe138 1479 ((char *)boolBuffer)[(this->readings[readingIndex].numRegs*sizeof(bool))] = modBusMaster1::readCoils(
brunofgc 0:8c59a494a451 1480 this->readings[readingIndex].addr,
brunofgc 0:8c59a494a451 1481 this->readings[readingIndex].reg,
brunofgc 0:8c59a494a451 1482 this->readings[readingIndex].numRegs,
brunofgc 0:8c59a494a451 1483 boolBuffer
brunofgc 0:8c59a494a451 1484 );
brunofgc 15:6d9e9cafe138 1485 }else{
brunofgc 0:8c59a494a451 1486 boolBuffer[0] = entradasDigitais[this->readings[readingIndex].reg];
brunofgc 15:6d9e9cafe138 1487 ((char *)boolBuffer)[1]=0;
brunofgc 0:8c59a494a451 1488 }
brunofgc 0:8c59a494a451 1489 //pc.printf("Lido dentro de modBusMaster1::teste() <%f>.\n",modBusMaster1::teste());
brunofgc 0:8c59a494a451 1490 sdCardBuf.fill((char *)boolBuffer,((sizeof(bool)*this->readings[readingIndex].numRegs)+1));//Ao fim appendo o byte de status
brunofgc 0:8c59a494a451 1491 free(boolBuffer);
brunofgc 0:8c59a494a451 1492 break;
brunofgc 0:8c59a494a451 1493
brunofgc 0:8c59a494a451 1494 }
brunofgc 0:8c59a494a451 1495 }
brunofgc 0:8c59a494a451 1496 readingIndex = sdCardBuf.fill("}log",4); //Reaproveitando a variável de 16bit readingIndex
brunofgc 5:8efd609dea7d 1497 sdCard::arquivoAberto(40000);
brunofgc 5:8efd609dea7d 1498 //Insiro os dados se for possível.
brunofgc 8:25061210fcc9 1499 sdCard::insereDadosBank(sdCardBuf.get(),readingIndex);
brunofgc 0:8c59a494a451 1500 }
brunofgc 0:8c59a494a451 1501
brunofgc 0:8c59a494a451 1502
brunofgc 0:8c59a494a451 1503
brunofgc 0:8c59a494a451 1504
brunofgc 0:8c59a494a451 1505
brunofgc 0:8c59a494a451 1506
brunofgc 0:8c59a494a451 1507
brunofgc 0:8c59a494a451 1508
brunofgc 0:8c59a494a451 1509 device::device()
brunofgc 0:8c59a494a451 1510 {
brunofgc 0:8c59a494a451 1511 this->numAlarms=0;
brunofgc 0:8c59a494a451 1512 this->numReadings=0;
brunofgc 0:8c59a494a451 1513 }
brunofgc 0:8c59a494a451 1514
brunofgc 0:8c59a494a451 1515 int criaDevices(FILE *devicesCfg)
brunofgc 0:8c59a494a451 1516 {
brunofgc 0:8c59a494a451 1517 char linha[maxCaractereLeLinha];
brunofgc 0:8c59a494a451 1518 int i;
brunofgc 0:8c59a494a451 1519 int linhas = 0;
brunofgc 0:8c59a494a451 1520 devices = 0;
brunofgc 0:8c59a494a451 1521
brunofgc 0:8c59a494a451 1522 while(fgets(linha,maxCaractereLeLinha,devicesCfg)) {
brunofgc 0:8c59a494a451 1523 if(strstr(linha,"deviceCreate\\")) {
brunofgc 0:8c59a494a451 1524 devices++;
brunofgc 0:8c59a494a451 1525 }
brunofgc 0:8c59a494a451 1526 linhas++;
brunofgc 0:8c59a494a451 1527 }
brunofgc 0:8c59a494a451 1528
brunofgc 0:8c59a494a451 1529 printf("Contei %u linha(s), %u device(s).\n",linhas,devices);
brunofgc 0:8c59a494a451 1530
brunofgc 0:8c59a494a451 1531 //Criando vetor de objetos dispositivos;
brunofgc 0:8c59a494a451 1532
brunofgc 0:8c59a494a451 1533 dispositivos = (device **) malloc(sizeof(device)*devices);
brunofgc 0:8c59a494a451 1534
brunofgc 0:8c59a494a451 1535 for(i=0; i<devices; i++) {
brunofgc 0:8c59a494a451 1536 dispositivos[i] = new device();
brunofgc 0:8c59a494a451 1537 //dispositivos[i]->id=i;
brunofgc 0:8c59a494a451 1538 }
brunofgc 0:8c59a494a451 1539
brunofgc 2:ca3723da6668 1540 rewind(devicesCfg);
brunofgc 0:8c59a494a451 1541 return 1;
brunofgc 0:8c59a494a451 1542 }
brunofgc 0:8c59a494a451 1543
brunofgc 0:8c59a494a451 1544
brunofgc 0:8c59a494a451 1545 int configuraDevices(FILE *devicesCfg)
brunofgc 0:8c59a494a451 1546 {
brunofgc 0:8c59a494a451 1547 uint16_t linhas=0;
brunofgc 0:8c59a494a451 1548 //uint16_t leituras = 0;
brunofgc 2:ca3723da6668 1549 char linha[maxCaractereLeLinha];
brunofgc 0:8c59a494a451 1550 uint8_t estadoConfiguracao=estadoConfiguracao_idle;
brunofgc 2:ca3723da6668 1551 int8_t dispositivoEmConfiguracao = -1;
brunofgc 2:ca3723da6668 1552
brunofgc 2:ca3723da6668 1553 while(fgets(linha,maxCaractereLeLinha,devicesCfg)){
brunofgc 2:ca3723da6668 1554 if(strstr(linha,"alarmSet")) {
brunofgc 2:ca3723da6668 1555 //printf("Criando alarme no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 2:ca3723da6668 1556 alarmes++;
brunofgc 2:ca3723da6668 1557 estadoConfiguracao = estadoConfiguracao_alarmSet;
brunofgc 5:8efd609dea7d 1558 }
brunofgc 15:6d9e9cafe138 1559
brunofgc 15:6d9e9cafe138 1560 if(strstr(linha,"readingsEnd")) {
brunofgc 15:6d9e9cafe138 1561 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 15:6d9e9cafe138 1562 estadoConfiguracao = estadoConfiguracao_idle;
brunofgc 15:6d9e9cafe138 1563 leituras++;
brunofgc 15:6d9e9cafe138 1564 }
brunofgc 2:ca3723da6668 1565
brunofgc 15:6d9e9cafe138 1566 if(estadoConfiguracao == estadoConfiguracao_readingsSet){
brunofgc 2:ca3723da6668 1567 leituras++;
brunofgc 15:6d9e9cafe138 1568 }
brunofgc 0:8c59a494a451 1569
brunofgc 2:ca3723da6668 1570 if(strstr(linha,"readingsSet")) {
brunofgc 2:ca3723da6668 1571 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 15:6d9e9cafe138 1572 estadoConfiguracao = estadoConfiguracao_readingsSet;
brunofgc 2:ca3723da6668 1573 }
brunofgc 2:ca3723da6668 1574
brunofgc 2:ca3723da6668 1575 if(strstr(linha,"scheduleSet")) {
brunofgc 2:ca3723da6668 1576 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 2:ca3723da6668 1577 qtdSchedules++;
brunofgc 2:ca3723da6668 1578 estadoConfiguracao = estadoConfiguracao_scheduleSet;
brunofgc 2:ca3723da6668 1579 }
brunofgc 4:3f92979d1ffb 1580
brunofgc 5:8efd609dea7d 1581 if(strstr(linha,"scheduleExceptionsSet")) {
brunofgc 4:3f92979d1ffb 1582 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 5:8efd609dea7d 1583 qtdScheduleExceptions++;
brunofgc 4:3f92979d1ffb 1584 estadoConfiguracao = estadoConfiguracao_scheduleSet;
brunofgc 4:3f92979d1ffb 1585 }
brunofgc 2:ca3723da6668 1586
brunofgc 2:ca3723da6668 1587 linhas++;
brunofgc 2:ca3723da6668 1588 }
brunofgc 15:6d9e9cafe138 1589 printf("Contei %u linha(s), configurei %u dispositivo(s), instalei %u alarme(s), %u leitura(s) e %u schedule(s) nos dispositivo(s).\n",linhas,devices,alarmes,leituras,qtdSchedules);
brunofgc 2:ca3723da6668 1590 //Reservar memoria aqui.
brunofgc 2:ca3723da6668 1591
brunofgc 2:ca3723da6668 1592 //if(resizeArray(this->numReadings, this->numReadings+1, (char **)&this->readings,sizeof(reading))) {
brunofgc 2:ca3723da6668 1593 //(char *) malloc(sizeUnit*novo);
brunofgc 2:ca3723da6668 1594 dispositivos[0]->readings = (reading*) malloc(sizeof(reading)*leituras);
brunofgc 2:ca3723da6668 1595 dispositivos[0]->alarms = (alarm*) malloc(sizeof(alarm)*alarmes);
brunofgc 2:ca3723da6668 1596 dispositivos[0]->schedules = (schedule*) malloc(sizeof(schedule)*qtdSchedules);
brunofgc 5:8efd609dea7d 1597 dispositivos[0]->scheduleExceptions = (scheduleException*) malloc(sizeof(scheduleException)*qtdScheduleExceptions);
brunofgc 2:ca3723da6668 1598
brunofgc 2:ca3723da6668 1599 //Retornando ao inicio o arquivo
brunofgc 2:ca3723da6668 1600 rewind(devicesCfg);
brunofgc 2:ca3723da6668 1601
brunofgc 0:8c59a494a451 1602 while(fgets(linha,maxCaractereLeLinha,devicesCfg)) {
brunofgc 0:8c59a494a451 1603 if(strstr(linha,"deviceCreate\\")) {
brunofgc 0:8c59a494a451 1604 dispositivoEmConfiguracao++;
brunofgc 0:8c59a494a451 1605 //printf("Configurando dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:8c59a494a451 1606 estadoConfiguracao = estadoConfiguracao_creatingDevice;
brunofgc 0:8c59a494a451 1607 }
brunofgc 0:8c59a494a451 1608
brunofgc 0:8c59a494a451 1609 if(strstr(linha,"alarmSet")) {
brunofgc 0:8c59a494a451 1610 //printf("Criando alarme no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:8c59a494a451 1611 alarmes++;
brunofgc 0:8c59a494a451 1612 estadoConfiguracao = estadoConfiguracao_alarmSet;
brunofgc 0:8c59a494a451 1613 }
brunofgc 0:8c59a494a451 1614
brunofgc 15:6d9e9cafe138 1615 if(strstr(linha,"readingsEnd")) {
brunofgc 0:8c59a494a451 1616 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 15:6d9e9cafe138 1617 estadoConfiguracao = estadoConfiguracao_idle;
brunofgc 15:6d9e9cafe138 1618 }
brunofgc 15:6d9e9cafe138 1619
brunofgc 15:6d9e9cafe138 1620 if(estadoConfiguracao == estadoConfiguracao_readingsSet){
brunofgc 2:ca3723da6668 1621 leituras++;
brunofgc 15:6d9e9cafe138 1622 }
brunofgc 15:6d9e9cafe138 1623
brunofgc 15:6d9e9cafe138 1624
brunofgc 15:6d9e9cafe138 1625 if(strstr(linha,"readingsSet")) {
brunofgc 15:6d9e9cafe138 1626 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:8c59a494a451 1627 estadoConfiguracao = estadoConfiguracao_readingsSet;
brunofgc 0:8c59a494a451 1628 }
brunofgc 0:8c59a494a451 1629
brunofgc 4:3f92979d1ffb 1630 if(strstr(linha,"scheduleExceptionSet")) {
brunofgc 4:3f92979d1ffb 1631 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 4:3f92979d1ffb 1632 qtdScheduleExceptions++;
brunofgc 4:3f92979d1ffb 1633 estadoConfiguracao = estadoConfiguracao_scheduleExceptionSet;
brunofgc 15:6d9e9cafe138 1634 }
brunofgc 0:8c59a494a451 1635
brunofgc 0:8c59a494a451 1636 if(strstr(linha,"scheduleSet")) {
brunofgc 0:8c59a494a451 1637 //printf("Criando leituras no dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:8c59a494a451 1638 qtdSchedules++;
brunofgc 0:8c59a494a451 1639 estadoConfiguracao = estadoConfiguracao_scheduleSet;
brunofgc 5:8efd609dea7d 1640 }
brunofgc 0:8c59a494a451 1641
brunofgc 0:8c59a494a451 1642 if(strstr(linha,">")) {
brunofgc 0:8c59a494a451 1643 //printf("Fechando dispositivo de indice %u.\n",dispositivoEmConfiguracao);
brunofgc 0:8c59a494a451 1644 estadoConfiguracao = estadoConfiguracao_idle;
brunofgc 0:8c59a494a451 1645 }
brunofgc 0:8c59a494a451 1646
brunofgc 0:8c59a494a451 1647 switch(estadoConfiguracao) {
brunofgc 0:8c59a494a451 1648 case estadoConfiguracao_creatingDevice:
brunofgc 0:8c59a494a451 1649 /*if(strstr(linha,"id:")) {
brunofgc 0:8c59a494a451 1650 sscanf(linha,"id:%u",&dispositivos[dispositivoEmConfiguracao]->id);
brunofgc 0:8c59a494a451 1651 }*/
brunofgc 0:8c59a494a451 1652 break;
brunofgc 0:8c59a494a451 1653 case estadoConfiguracao_alarmSet:
brunofgc 0:8c59a494a451 1654 //Inclue linha nos alarmes do dispositivo em configuração
brunofgc 0:8c59a494a451 1655 dispositivos[dispositivoEmConfiguracao]->setAlarm(linha);
brunofgc 0:8c59a494a451 1656 break;
brunofgc 0:8c59a494a451 1657 case estadoConfiguracao_readingsSet:
brunofgc 0:8c59a494a451 1658 //Inclue linha nas leituras do dispositivo em configuração
brunofgc 0:8c59a494a451 1659 dispositivos[dispositivoEmConfiguracao]->setReading(linha);
brunofgc 0:8c59a494a451 1660 break;
brunofgc 0:8c59a494a451 1661 case estadoConfiguracao_scheduleSet:
brunofgc 4:3f92979d1ffb 1662 //Inclue linha nos agendamentos do dispositivo em configuração
brunofgc 0:8c59a494a451 1663 dispositivos[dispositivoEmConfiguracao]->setSchedule(linha);
brunofgc 4:3f92979d1ffb 1664 break;
brunofgc 4:3f92979d1ffb 1665 case estadoConfiguracao_scheduleExceptionSet:
brunofgc 4:3f92979d1ffb 1666 //Inclue linha nas excessões dos agendamentos do dispositivo em configuração
brunofgc 4:3f92979d1ffb 1667 dispositivos[dispositivoEmConfiguracao]->setScheduleException(linha);
brunofgc 0:8c59a494a451 1668 break;
brunofgc 0:8c59a494a451 1669 }
brunofgc 0:8c59a494a451 1670 }
brunofgc 2:ca3723da6668 1671
brunofgc 0:8c59a494a451 1672 return 1;
brunofgc 0:8c59a494a451 1673 }
brunofgc 0:8c59a494a451 1674
brunofgc 0:8c59a494a451 1675
brunofgc 0:8c59a494a451 1676
brunofgc 0:8c59a494a451 1677 void testaTudoDevices()
brunofgc 0:8c59a494a451 1678 {
brunofgc 0:8c59a494a451 1679 int i;
brunofgc 0:8c59a494a451 1680 int j;
brunofgc 0:8c59a494a451 1681
brunofgc 0:8c59a494a451 1682 for(i=0; i<devices; i++) {
brunofgc 0:8c59a494a451 1683 printf("Dispositivo %u tem %u alarmes sendo eles:\n",i,dispositivos[i]->numAlarms);
brunofgc 0:8c59a494a451 1684
brunofgc 0:8c59a494a451 1685 for(j=0; j<dispositivos[i]->numAlarms; j++) {
brunofgc 0:8c59a494a451 1686 printf("Alarme %u:\n",j);
brunofgc 0:8c59a494a451 1687 printf("\tId <%lu>.\n",dispositivos[i]->alarms[j].id);
brunofgc 0:8c59a494a451 1688 printf("\tSeconds <%lu>.\n",dispositivos[i]->alarms[j].seconds);
brunofgc 0:8c59a494a451 1689 printf("\tAddr %u, func %u, reg %lu.\n",dispositivos[i]->alarms[j].addrModbusRead,dispositivos[i]->alarms[j].funcModbusRead,dispositivos[i]->alarms[j].regModbusRead);
brunofgc 0:8c59a494a451 1690 if(dispositivos[i]->alarms[j].type==modBusType_float) {
brunofgc 0:8c59a494a451 1691 float value;
brunofgc 0:8c59a494a451 1692 dispositivos[i]->floatToBin(0,&value,&dispositivos[i]->alarms[j].value[0]);
brunofgc 0:8c59a494a451 1693 if(dispositivos[i]->alarms[j].max){
brunofgc 0:8c59a494a451 1694 printf("\tFloat max <%f>.\n",value);
brunofgc 0:8c59a494a451 1695 }
brunofgc 0:8c59a494a451 1696 else{printf("\tFloat min <%f>.\n",value);}
brunofgc 0:8c59a494a451 1697 }
brunofgc 0:8c59a494a451 1698
brunofgc 0:8c59a494a451 1699 if(dispositivos[i]->alarms[j].type==modBusType_uint32_t) {
brunofgc 0:8c59a494a451 1700 uint32_t value;
brunofgc 0:8c59a494a451 1701 dispositivos[i]->uint32_t_ToBin(0,&value,&dispositivos[i]->alarms[j].value[0]);
brunofgc 0:8c59a494a451 1702 if(dispositivos[i]->alarms[j].max){
brunofgc 0:8c59a494a451 1703 printf("\tuint32_t max <%lu>.\n",value);
brunofgc 0:8c59a494a451 1704 }
brunofgc 0:8c59a494a451 1705 else{printf("\tuint32_t min <%lu>.\n",value);}
brunofgc 0:8c59a494a451 1706 }
brunofgc 0:8c59a494a451 1707
brunofgc 0:8c59a494a451 1708 if(dispositivos[i]->alarms[j].type==modBusType_uint16_t) {
brunofgc 0:8c59a494a451 1709 uint16_t value;
brunofgc 0:8c59a494a451 1710 dispositivos[i]->uint16_t_ToBin(0,&value,&dispositivos[i]->alarms[j].value[0]);
brunofgc 0:8c59a494a451 1711 if(dispositivos[i]->alarms[j].max){
brunofgc 0:8c59a494a451 1712 printf("\tuint16_t max <%lu>.\n",value);
brunofgc 0:8c59a494a451 1713 }
brunofgc 0:8c59a494a451 1714 else{printf("\tuint16_t min <%lu>.\n",value);}
brunofgc 0:8c59a494a451 1715 }
brunofgc 0:8c59a494a451 1716
brunofgc 0:8c59a494a451 1717 if(dispositivos[i]->alarms[j].type==modBusType_bit) {
brunofgc 0:8c59a494a451 1718 uint8_t value;
brunofgc 0:8c59a494a451 1719 value=dispositivos[i]->alarms[j].value[0];
brunofgc 0:8c59a494a451 1720 if(dispositivos[i]->alarms[j].max){
brunofgc 0:8c59a494a451 1721 printf("\tBIT max <%lu>.\n",value);
brunofgc 0:8c59a494a451 1722 }
brunofgc 0:8c59a494a451 1723 else{printf("\tBIT min <%lu>.\n",value);}
brunofgc 0:8c59a494a451 1724 }
brunofgc 0:8c59a494a451 1725
brunofgc 0:8c59a494a451 1726 printf("\tact:%lu\n",dispositivos[i]->alarms[j].idAct);
brunofgc 0:8c59a494a451 1727 }
brunofgc 0:8c59a494a451 1728
brunofgc 4:3f92979d1ffb 1729 printf("Dispositivo %u tem %u schedules sendo eles:\n",i,dispositivos[i]->numSchedules);
brunofgc 0:8c59a494a451 1730 for(j=0; j<dispositivos[i]->numSchedules; j++) {
brunofgc 0:8c59a494a451 1731 printf("Schedule %u:\n",j);
brunofgc 0:8c59a494a451 1732 printf("\tId <%lu>.\n",dispositivos[i]->schedules[j].id);
brunofgc 0:8c59a494a451 1733 printf("\tweekday <%lu>.\n",dispositivos[i]->schedules[j].weekday);
brunofgc 0:8c59a494a451 1734 printf("\tminute <%lu>.\n",dispositivos[i]->schedules[j].minute);
brunofgc 0:8c59a494a451 1735 printf("\tidAct <%lu>.\n",dispositivos[i]->schedules[j].idAct);
brunofgc 0:8c59a494a451 1736 }
brunofgc 4:3f92979d1ffb 1737
brunofgc 4:3f92979d1ffb 1738 printf("Dispositivo %u tem %u scheduleExceptions sendo eles:\n",i,dispositivos[i]->numScheduleExceptions);
brunofgc 4:3f92979d1ffb 1739 for(j=0; j<dispositivos[i]->numScheduleExceptions; j++) {
brunofgc 4:3f92979d1ffb 1740 printf("scheduleException %u:\n",j);
brunofgc 4:3f92979d1ffb 1741 printf("\tid_schedule <%lu>.\n",dispositivos[i]->scheduleExceptions[j].id_schedule);
brunofgc 4:3f92979d1ffb 1742 printf("\ttimestamp <%lu>.\n",dispositivos[i]->scheduleExceptions[j].timestamp);
brunofgc 4:3f92979d1ffb 1743 }
brunofgc 0:8c59a494a451 1744
brunofgc 0:8c59a494a451 1745 printf("Dispositivo %u tem %u leituras sendo elas:\n",i,dispositivos[i]->numReadings);
brunofgc 0:8c59a494a451 1746 for(j=0; j<dispositivos[i]->numReadings; j++) {
brunofgc 0:8c59a494a451 1747 printf("Leitura %u:",j);
brunofgc 0:8c59a494a451 1748 switch(dispositivos[i]->readings[j].type) {
brunofgc 0:8c59a494a451 1749 case modBusType_float:
brunofgc 0:8c59a494a451 1750 printf("Tipo float ");
brunofgc 0:8c59a494a451 1751 break;
brunofgc 0:8c59a494a451 1752 case modBusType_uint32_t:
brunofgc 0:8c59a494a451 1753 printf("Tipo uint32_t ");
brunofgc 5:8efd609dea7d 1754 break;
brunofgc 0:8c59a494a451 1755 case modBusType_uint16_t:
brunofgc 0:8c59a494a451 1756 printf("Tipo uint16_t ");
brunofgc 5:8efd609dea7d 1757 break;
brunofgc 0:8c59a494a451 1758 case modBusType_uint8_t:
brunofgc 0:8c59a494a451 1759 printf("Tipo uint8_t ");
brunofgc 5:8efd609dea7d 1760 break;
brunofgc 0:8c59a494a451 1761 case modBusType_bit:
brunofgc 0:8c59a494a451 1762 printf("Tipo bool ");
brunofgc 5:8efd609dea7d 1763 break;
brunofgc 0:8c59a494a451 1764 }
brunofgc 0:8c59a494a451 1765 printf("addr %u, func %u, reg %u, numRegs %u.\n",dispositivos[i]->readings[j].addr,dispositivos[i]->readings[j].func,dispositivos[i]->readings[j].reg,dispositivos[i]->readings[j].numRegs);
brunofgc 0:8c59a494a451 1766 }
brunofgc 0:8c59a494a451 1767 }
brunofgc 0:8c59a494a451 1768 }