@@ -129,7 +129,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Bin
129129 int max_pointspkt = PKTDIG_MAXPOINTS;
130130
131131 PrintHeaderInfo (info);
132- NoDataCntTime = 0 ; // mantém link vivo
132+ NoDataCntTime = 0 ; // mantém link vivo
133133
134134 // monta buffer de mensagem para OSHMI no formato I104M
135135 t_msgsupsq msg;
@@ -161,7 +161,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Bin
161161 pair.value .time << " RTU:" << msg.sec << std::endl;
162162
163163 count++;
164- if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
164+ if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
165165 {
166166 msg.numpoints = count % max_pointspkt;
167167 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (digital_notime_seq));
@@ -208,7 +208,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Bin
208208 pair.value .time << " RTU:" << msg.sec << std::endl;
209209
210210 count++;
211- if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
211+ if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
212212 {
213213 msg.numpoints = count % max_pointspkt;
214214 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (digital_w_time7_seq));
@@ -229,7 +229,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Dou
229229 int max_pointspkt = PKTDIG_MAXPOINTS;
230230
231231 PrintHeaderInfo (info);
232- NoDataCntTime = 0 ; // mantém link vivo
232+ NoDataCntTime = 0 ; // mantém link vivo
233233
234234 // monta buffer de mensagem para OSHMI no formato I104M
235235 t_msgsupsq msg;
@@ -261,7 +261,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Dou
261261 pair.value .time << " RTU:" << msg.sec << std::endl;
262262
263263 count++;
264- if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
264+ if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
265265 {
266266 msg.numpoints = count % max_pointspkt;
267267 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (digital_notime_seq));
@@ -308,7 +308,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Dou
308308 pair.value .time << " RTU:" << msg.sec << std::endl;
309309
310310 count++;
311- if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
311+ if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
312312 {
313313 msg.numpoints = count % max_pointspkt;
314314 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (digital_w_time7_seq));
@@ -329,7 +329,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Ana
329329 int packet_size;
330330
331331 PrintHeaderInfo (info);
332- NoDataCntTime = 0 ; // mantém link vivo
332+ NoDataCntTime = 0 ; // mantém link vivo
333333
334334 // monta buffer de mensagem para OSHMI no formato I104M
335335 t_msgsupsq msg;
@@ -340,46 +340,93 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Ana
340340
341341 int count = 0 ;
342342
343- msg.tipo = 13 ;
344- msg.taminfo = sizeof (flutuante_seq); // value size for the type (not counting the 4 byte address)
345- values.ForeachItem ([&](const Indexed<Analog>& pair)
346- {
347- // acerta endereco do ponto
348- unsigned int * paddr = (unsigned int *)(msg.info + (count % PKTANA_MAXPOINTS) * (sizeof (int ) + sizeof (flutuante_seq)));
349- *paddr = pair.index + OFFSET_ANALOG; // considera offset para o grupo
350-
351- // valor e qualidade
352- flutuante_seq * obj = (flutuante_seq *)(paddr + 1 );
353- obj->fr = (float )pair.value .value ;
354- obj->qds = xlatequalif (pair.value .flags .value );
355-
356- std::cout << " [" << pair.index << " ] : " <<
357- pair.value .value << " : " <<
358- static_cast <int >(pair.value .flags .value ) << " : " <<
359- pair.value .time << " RTU:" << msg.sec << std::endl;
360-
361- count++;
343+ if (info.gv != GroupVariation::Group32Var3 && info.gv != GroupVariation::Group32Var4
344+ && info.gv != GroupVariation::Group32Var7 && info.gv != GroupVariation::Group32Var8)
345+ { // without time
346+ msg.tipo = 13 ; // float without time
347+ msg.taminfo = sizeof (flutuante_seq); // value size for the type (not counting the 4 byte address)
348+ values.ForeachItem ([&](const Indexed<Analog>& pair) {
349+ // acerta endereco do ponto
350+ unsigned int * paddr
351+ = (unsigned int *)(msg.info + (count % PKTANA_MAXPOINTS) * (sizeof (int ) + sizeof (flutuante_seq)));
352+ *paddr = pair.index + OFFSET_ANALOG; // considera offset para o grupo
353+
354+ // valor e qualidade
355+ flutuante_seq* obj = (flutuante_seq*)(paddr + 1 );
356+ obj->fr = (float )pair.value .value ;
357+ obj->qds = xlatequalif (pair.value .flags .value );
358+
359+ std::cout << " [" << pair.index << " ] : " << pair.value .value << " : "
360+ << static_cast <int >(pair.value .flags .value ) << " RTU:" << msg.sec
361+ << std::endl;
362+
363+ count++;
364+
365+ if (!((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
366+ {
367+ msg.numpoints = count % PKTANA_MAXPOINTS;
368+ packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (flutuante_seq));
369+ SendOSHMI (&msg, packet_size);
370+ }
371+ });
362372
363- if ( !((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
364- {
365- msg.numpoints = count % PKTANA_MAXPOINTS;
366- packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (flutuante_seq));
367- SendOSHMI (&msg, packet_size);
368- }
373+ msg.numpoints = count % PKTANA_MAXPOINTS;
374+ packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (flutuante_seq));
375+ SendOSHMI (&msg, packet_size);
376+ }
377+ else
378+ { // with time
379+ msg.tipo = 36 ; // float with time
380+ msg.taminfo = sizeof (flutuante_w_time7_seq); // value size for the type (not counting the 4 byte address)
381+ values.ForeachItem ([&](const Indexed<Analog>& pair) {
382+ // acerta endereco do ponto
383+ unsigned int * paddr
384+ = (unsigned int *)(msg.info
385+ + (count % PKTANA_MAXPOINTS) * (sizeof (int ) + sizeof (flutuante_w_time7_seq)));
386+ *paddr = pair.index + OFFSET_ANALOG; // considera offset para o grupo
387+
388+ // valor e qualidade
389+ flutuante_w_time7_seq* obj = (flutuante_w_time7_seq*)(paddr + 1 );
390+ obj->fr = (float )pair.value .value ;
391+ obj->qds = xlatequalif (pair.value .flags .value );
392+
393+ time_t tmi = pair.value .time / 1000 ;
394+ struct tm * unxtm = localtime (&tmi);
395+
396+ obj->ano = unxtm->tm_year % 100 ;
397+ obj->mes = unxtm->tm_mon + 1 ;
398+ obj->dia = unxtm->tm_mday ;
399+ obj->hora = unxtm->tm_hour ;
400+ obj->min = unxtm->tm_min ;
401+ obj->ms = (unsigned short )(unxtm->tm_sec * 1000 + pair.value .time % 1000 );
402+
403+ std::cout << " [" << pair.index << " ] : " << pair.value .value << " : "
404+ << static_cast <int >(pair.value .flags .value ) << " : " << pair.value .time << msg.sec << " RTU:" << msg.sec
405+ << std::endl;
406+
407+ count++;
408+
409+ if (!((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
410+ {
411+ msg.numpoints = count % PKTANA_MAXPOINTS;
412+ packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (flutuante_w_time7_seq));
413+ SendOSHMI (&msg, packet_size);
414+ }
415+ });
369416
370- });
417+ msg.numpoints = count % PKTANA_MAXPOINTS;
418+ packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (flutuante_w_time7_seq));
419+ SendOSHMI (&msg, packet_size);
420+ }
371421
372- msg.numpoints = count % PKTANA_MAXPOINTS;
373- packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (flutuante_seq));
374- SendOSHMI (&msg, packet_size);
375422}
376423
377424void MySOEHandler::Process (const HeaderInfo& info, const ICollection<Indexed<Counter>>& values)
378425{
379426 int packet_size;
380427
381428 PrintHeaderInfo (info);
382- NoDataCntTime = 0 ; // mantém link vivo
429+ NoDataCntTime = 0 ; // mantém link vivo
383430
384431 // monta buffer de mensagem para OSHMI no formato I104M
385432 t_msgsupsq msg;
@@ -410,7 +457,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Cou
410457
411458 count++;
412459
413- if (!((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
460+ if (!((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
414461 {
415462 msg.numpoints = count % PKTANA_MAXPOINTS;
416463 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (integrated_seq));
@@ -429,7 +476,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Fro
429476 int packet_size;
430477
431478 PrintHeaderInfo (info);
432- NoDataCntTime = 0 ; // mantém link vivo
479+ NoDataCntTime = 0 ; // mantém link vivo
433480
434481 // monta buffer de mensagem para OSHMI no formato I104M
435482 t_msgsupsq msg;
@@ -460,7 +507,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Fro
460507
461508 count++;
462509
463- if (!((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
510+ if (!((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
464511 {
465512 msg.numpoints = count % PKTANA_MAXPOINTS;
466513 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (flutuante_seq));
@@ -480,7 +527,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Bin
480527 int max_pointspkt = PKTDIG_MAXPOINTS;
481528
482529 PrintHeaderInfo (info);
483- NoDataCntTime = 0 ; // mantém link vivo
530+ NoDataCntTime = 0 ; // mantém link vivo
484531
485532 // monta buffer de mensagem para OSHMI no formato I104M
486533 t_msgsupsq msg;
@@ -512,7 +559,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Bin
512559 pair.value .time << " RTU:" << msg.sec << std::endl;
513560
514561 count++;
515- if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
562+ if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
516563 {
517564 msg.numpoints = count % max_pointspkt;
518565 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (digital_notime_seq));
@@ -559,7 +606,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Bin
559606 pair.value .time << " RTU:" << msg.sec << std::endl;
560607
561608 count++;
562- if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
609+ if (!((count + 1 ) % max_pointspkt)) // se a próxima é do próximo pacote, manda agora
563610 {
564611 msg.numpoints = count % max_pointspkt;
565612 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (digital_w_time7_seq));
@@ -579,7 +626,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Ana
579626 int packet_size;
580627
581628 PrintHeaderInfo (info);
582- NoDataCntTime = 0 ; // mantém link vivo
629+ NoDataCntTime = 0 ; // mantém link vivo
583630
584631 // monta buffer de mensagem para OSHMI no formato I104M
585632 t_msgsupsq msg;
@@ -610,7 +657,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Ana
610657
611658 count++;
612659
613- if (!((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
660+ if (!((count + 1 ) % PKTANA_MAXPOINTS)) // se a próxima é do próximo pacote, manda agora
614661 {
615662 msg.numpoints = count % PKTANA_MAXPOINTS;
616663 packet_size = sizeof (int ) * 7 + msg.numpoints * (sizeof (int ) + sizeof (flutuante_seq));
@@ -627,7 +674,7 @@ void MySOEHandler::Process(const HeaderInfo& info, const ICollection<Indexed<Ana
627674void MySOEHandler::Process (const HeaderInfo& info, const ICollection<Indexed<OctetString>>& values)
628675{
629676 this ->PrintHeaderInfo (info);
630- NoDataCntTime = 0 ; // mantém link vivo
677+ NoDataCntTime = 0 ; // mantém link vivo
631678
632679 values.ForeachItem ([&](const Indexed<OctetString>& pair)
633680 {
0 commit comments