自己改写读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