读取温度超限事件(支持单独读取事件序号,事件开始时间,事件结束时间,事件发生源任意组合读取)

自己改写读3e10温度事件,读取RCSD

case 0x3E100200://0x31900200: //温度事件
{
    
    
  if(temp_over_newest!=MaxSensorNum)
       idx = temp_over_newest;
   mem_cpy(resp + pos, oad->value, 4);     
   pos += 4;
   resp[pos++] = rcsd_len;//RCSD len
   mem_cpy(resp+pos,req_oad-1,5*rcsd_len);//这里将命令帧中的RCSD拷贝到应答报文
   pos+=5*rcsd_len;
   if(MaxSensorNum == temp_over_newest)
   {
    
    
       resp[pos++] = DT_NULL;//没有超限
       resp[pos++] = DAR_OBJECT_UNAVAILABLE;
       break;
   }        
   if(0 == ds18b20_temp_event[idx].temp_over_count)
   {
    
    
       resp[pos++] = DT_NULL;//没有超限
       resp[pos++] = DAR_OBJECT_UNAVAILABLE;
       break;
   } 
   resp[pos++] = 1;//结果类型是数据
   resp[pos++] = 1;
   for(idx1=0;idx1<rcsd_len;idx1++)
   {
    
    
       if(mem_is_same(req_oad+idx1*5, "\x20\x22\x02\x00", 4))
       {
    
    
           resp[pos++] = DT_DOUBLELONGUNSIGNED;
           resp[pos++] = 0;resp[pos++] = 0;resp[pos++] = 0;resp[pos++] = ds18b20_temp_event[idx].temp_over_count;                         
       } 
       else if(mem_is_same(req_oad+idx1*5, "\x20\x1E\x02\x00", 4))
       {
    
    
           if(mem_all_is(ds18b20_temp_event[idx].temp_over_start_time[0],6,0x00))
           {
    
    
               resp[pos++] = DT_NULL;
           }
           else
           {
    
    
               resp[pos++] = DT_DATETIMES;  
               year_temp = 2000+ds18b20_temp_event[idx].temp_over_start_time[0][5];//年
               resp[pos++] = (INT8U)(year_temp>>8);//目前的年份足够了 
               resp[pos++] = (INT8U)year_temp; 
               resp[pos++] = ds18b20_temp_event[idx].temp_over_start_time[0][4];//月
               resp[pos++] = ds18b20_temp_event[idx].temp_over_start_time[0][3];//日
               resp[pos++] = ds18b20_temp_event[idx].temp_over_start_time[0][2];//时
               resp[pos++] = ds18b20_temp_event[idx].temp_over_start_time[0][1];//分
               resp[pos++] = ds18b20_temp_event[idx].temp_over_start_time[0][0];//秒  
           }                   
       }
       else if(mem_is_same(req_oad+idx1*5, "\x20\x20\x02\x00", 4))
       {
    
    
           if(mem_all_is(ds18b20_temp_event[idx].temp_over_end_time[0],6,0x00))
           {
    
    
              resp[pos++] = DT_NULL;
           }
          else
           {
    
    
              resp[pos++] = DT_DATETIMES;  
              year_temp = 2000+ds18b20_temp_event[idx].temp_over_end_time[0][5];//年
              resp[pos++] = (INT8U)(year_temp>>8);//目前的年份足够了 
              resp[pos++] = (INT8U)year_temp; 
              resp[pos++] = ds18b20_temp_event[idx].temp_over_end_time[0][4];//月
              resp[pos++] = ds18b20_temp_event[idx].temp_over_end_time[0][3];//日
              resp[pos++] = ds18b20_temp_event[idx].temp_over_end_time[0][2];//时
              resp[pos++] = ds18b20_temp_event[idx].temp_over_end_time[0][1];//分
              resp[pos++] = ds18b20_temp_event[idx].temp_over_end_time[0][0];//秒 
           }
       }
       else if(mem_is_same(req_oad+idx1*5, "\x20\x24\x02\x00", 4))
       {
    
    
               resp[pos++] = DT_TSA;
               resp[pos++] = 7;
               resp[pos++] = 5;
               mem_cpy_reverse(resp+pos,MeterList[MAX_METER_COUNT].elmt.meter_no,6);
               pos+=6;
       }
   }
 }         
 break;   

读温度事件序号数据项为3E10 0200:
没有温度超限事件产生:
[14:24:56.555]发→◇68 1F 00 43 05 01 00 00 00 00 00 02 1F 79 05 03 02 3E 10 02 00 09 01 01 00 20 22 02 00 00 D8 87 16 □
[14:24:56.678]收←◆FE FE FE FE 68 20 00 C3 05 01 00 00 00 00 00 02 4B 32 85 03 02 3E 10 02 00 01 00 20 22 02 00 00 06 00 00 11 BE 16

第一次超限事件,读取事件发生序号20 22 02 00:
[14:46:24.652]发→◇68 1F 00 43 05 01 00 00 00 00 00 02 1F 79 05 03 02 3E 10 02 00 09 01 01 00 20 22 02 00 00 D8 87 16 □
[14:46:24.758]收←◆FE FE FE FE 68 25 00 C3 05 01 00 00 00 00 00 02 8F 39 85 03 02 3E 10 02 00 01 00 20 22 02 00 01 01 06 00 00 00 01 00 00 4F 6C 16

第二次超限事件,读取事件发生序号20 22 02 00:
[14:49:58.141]发→◇68 1F 00 43 05 01 00 00 00 00 00 02 1F 79 05 03 02 3E 10 02 00 09 01 01 00 20 22 02 00 00 D8 87 16 □
[14:49:58.252]收←◆FE FE FE FE 68 25 00 C3 05 01 00 00 00 00 00 02 8F 39 85 03 02 3E 10 02 00 01 00 20 22 02 00 01 01 06 00 00 00 02 00 00 2B 83 16

读取温度事件的开始时间20 1E 02 00:
[14:58:31.747]发→◇68 1F 00 43 05 01 00 00 00 00 00 02 1F 79 05 03 02 3E 10 02 00 09 01 01 00 20 1E 02 00 00 1E 5C 16 □
[14:58:31.868]收←◆FE FE FE FE 68 28 00 C3 05 01 00 00 00 00 00 02 E1 8E 85 03 02 3E 10 02 00 01 00 20 1E 02 00 01 01 1C 07 E4 0C 04 0E 34 07 00 00 2A A2 16

读温度事件的结束时间 20 20 02 00:
[15:21:56.575]发→◇68 1F 00 43 05 01 00 00 00 00 00 02 1F 79 05 03 02 3E 10 02 00 09 01 01 00 20 20 02 00 00 AE BE 16 □
[15:21:56.690]收←◆FE FE FE FE 68 28 00 C3 05 01 00 00 00 00 00 02 E1 8E 85 03 02 3E 10 02 00 01 00 20 20 02 00 01 01 1C 07 E4 0C 04 0F 15 1C 00 00 17 90 16

猜你喜欢

转载自blog.csdn.net/luopeng12345/article/details/110479962