协议概述
GB/T 26875.3-2011 是一个关于城市消防远程监控系统的国家标准,具体是该系统第3部分:报警传输网络通信协议。这个标准规定了用户信息传输装置与监控中心之间通过报警传输网络进行数据传输的协议结构、数据类型及数据定义。它适用于城市消防远程监控系统中的通信协议,以确保数据传输的准确性和效率。
💡 注意
本文档测试功能范围只包含GB/T 26875.3—2011第三部分报警网络传输通讯协议。由于设备接入的复杂度较高,可以先尝试其他模拟测试文档再学习本篇文档。
协议关键信息
以下是关于GB/T 26875.3-2011的一些关键信息:
- 中文标准名称:城市消防远程监控系统 第3部分:报警传输网络通信协议
- 英文标准名称:Remote-monitoring system of urban fire protection – Part 3: Communication protocol for alarm transmission network
- 标准状态:现行
- 中国标准分类号(CCS):C81
- 国际标准分类号(ICS):13.220.20
- 发布日期:2011-07-29
- 实施日期:2011-11-01
- 发布单位:中华人民共和国国家质量监督检验检疫总局、中国国家标准化管理委员会
这个标准对于城市消防系统的远程监控和报警传输具有重要意义,它确保了消防监控系统的高效运行和信息的准确传递,对于提升城市消防安全管理水平起到了关键作用。
准备工作
NetAssist网络调试助手,是Windows平台下开发的TCP/IP网络调试工具,集TCP/UDP服务端及客户端于一体,是网络应用开发及调试工作必备的专业工具之一,可以帮助网络应用设计、开发、测试人员检查所开发的网络应用软/硬件的数据收发状况,提高开发速度,简化开发复杂度,成为TCP/UDP应用开发调试的得力助手。
模拟软件下载地址:
平台创建模拟设备
创建转换脚本
创建鉴权脚本
//输出源地址(十六进制源码)
var password = params.substr(24, 12);
/*必填:设备的访问令牌*/
out.password = password;
/*选填:设备鉴权成功后响应给设备的信息*/
out.success = "";
创建上行数据解析脚本
function Checksum(data) {
var checksum = 0;
for (var i = 0;
i < data.length;
i += 2) {
var hex = data.substr(i, 2);
checksum += parseInt(hex, 16);
}
x = checksum.toString(16);
checksum = x.substring(x.length - 2);
return checksum;
} //modbus校验和
function currentTimeToHex() {
// 获取当前时间
var now = new Date();
// 提取秒、分、时、日、月、年
var seconds = now.getSeconds();
var minutes = now.getMinutes();
var hours = now.getHours();
var day = now.getDate();
var month = now.getMonth() + 1;
// 注意:getMonth() 返回的月份是从0开始的,所以需要加1
var year = now.getFullYear() - 2000;
// 假设我们只需要从2000年开始的年份
// 将这些值转换为十六进制格式,并确保每个都是两位数
var hexSeconds = (seconds < 16 ? '0': '') + seconds.toString(16);
var hexMinutes = (minutes < 16 ? '0': '') + minutes.toString(16);
var hexHours = (hours < 16 ? '0': '') + hours.toString(16);
var hexDay = (day < 16 ? '0': '') + day.toString(16);
var hexMonth = (month < 16 ? '0': '') + month.toString(16);
var hexYear = (year < 16 ? '0': '') + year.toString(16);
// 组合成一个完整的十六进制字符串
var hexValue = hexSeconds + hexMinutes + hexHours + hexDay + hexMonth + hexYear;
return hexValue.toUpperCase();
}
function hexToBit(data, length, start, end) {
var tempD = parseInt('0x'+data.substr(start, end));
var statusD = tempD.toString(2);
for (var len = statusD.length;
len < length;
len = statusD.length) {
statusD = "0"+ statusD;
}
return statusD;
}//将应用单元数据中的信息体提取出来
//获取业务流水号
var teleData = {};
var serialNum = params.substr(4, 4);
//获取除业务流水号外的控制单元
var codeTxt = params.substr(8, 48);
//获取服务端当前时间
var time = currentTimeToHex();
//组成控制单元
var req = serialNum + codeTxt.substr(0, 4) + time + codeTxt.substr(16, 24) +
"0000" + "03";
//输出源地址(十六进制源码)
var password = params.substr(24, 12);
//生成校验和
var code = Checksum(req);
//组合确认报文
var confirm = "4040" + req + code + "2323";
//获取应用数据单元长度
var lengthD = parseInt(codeTxt.substr(20, 4), 16);
//截取应用数据单元
var data = params.substr(54, lengthD);
//获取类型标志
var type = parseInt(data.substr(0, 2), 16);
//假设类型标志作为if条件 分开取数据点
//当类型标志为用户信息传输装置操作信息
if (type == "24") {
var statusD = hexToBit(data, 8, 4, 2)
//取用户信息传输装置操作信息所有数据点
teleData.resetU = statusD[7];
teleData.silencerU = statusD[6];
teleData.warnOnU = statusD[5];
teleData.warnOffU = statusD[4];
teleData.selfInspectionU = statusD[3];
teleData.inspectU = statusD[2];
teleData.testU = statusD[1];
teleData.source = params;
// teleData.reservedU = statusD[0];
//预留
}
//返回物模型
out.datas = teleData;
out.telemetry = true;
/*必填:true表示设备上报的遥测数据,false表示命令下发的响应数据*/
//接受数据并解析后服务端返回确认指令
out.ackMsg = confirm;
💡 提示
创建转换脚本时要根据脚本的功能选定脚本类型。
鉴权脚本:TCP/UDP协议设备接入平台后确认鉴权信息并使设备正常上线的处理脚本。
上传数据解析脚本:TCP/UDP协议设备接入平台保证能够正常上线后,对设备接入数据点解析转换为物模型的处理脚本。
💡 注意
转换脚本必须“启动”才可以被调用,但必须将状态改为“禁用”才可以修改脚本。
创建产品
💡 提示
由于GB26875协议的消防设备可以直接上报平台,所以设备类型选择了直连设备。
创建物模型
💡 提示
物模型中有一个标识符为“source”,这个物模型是为了直接输出上报至平台的报文内容,方便测试,实际使用时可不添加。
💡 注意
物模型中标识符必须与上行数据解析脚本输出的内容一致。
创建设备
💡 提示
设备凭证是根据源地址的HEX值决定的,本文档源地址HEX值为2873A1FF2A3E。
模拟GB/T 26875.3—2011设备接入
使用工具连接平台
使用工具下发数据
💡 提示
本次测试下发测试数据为40400100010123250B1304182873A1FF2A3E0000000000000A00021801100023250B130418DF2323,在下发时必须选择HEX格式。