97精品国产精品公司,久久www免费人成看片中文,天天谢天天干,日韩精品无码专区资源站

首頁 - 關于研博 - 技術筆記 - 環(huán)保HJ212-2017協(xié)議介紹開發(fā)
環(huán)保HJ212-2017協(xié)議介紹開發(fā)
2025.01.03

協(xié)議介紹

  為了豐富研博工業(yè)物聯網統(tǒng)一接入系統(tǒng)(stew-ot)接入場景,需要對環(huán)保行業(yè)協(xié)議的報文做出解碼接入。HJ212的通訊包的組成是由ASCII碼 (漢字除外,采用UTF-8碼,8位,1字節(jié))字符組成的。

通訊協(xié)議數據結構如下:

通訊包結構組成如下:

  其中,數據段是整個通訊的核心數據,數據段是由字段名稱=,字段內容三部分組成,具體的組成結構如下:

更多關于HJ212-2017的內容可點擊查看。

 

協(xié)議解析開發(fā)

  本次協(xié)議解析基于研博工業(yè)物聯網統(tǒng)一接入系統(tǒng)(stew-ot)協(xié)議擴展規(guī)范開發(fā)。示例只針對HJ212-2017協(xié)議的數據解碼,不涉及對該類設備的控制,也就沒有對應的編碼解析。

新建類com.yanboot.iot.protocol.hj212.tcp.HJ212ProtocolCodec,根據SDK包開發(fā)規(guī)范完成協(xié)議報文的解析工作。

  • 實現com.yanboot.iot.sdk.protocol.ProtocolCodec接口,重寫support方法,指定協(xié)議的唯一標識、名稱、特性等內容。

@Override
public ProtocolSupport support() {
return new ProtocolSupport(TransportProtocol.TCP)
.id("HJ212-2017")
.name("環(huán)保HJ212-2017協(xié)議")
.description("環(huán)境污染物采集儀器傳輸協(xié)議")
.feature(new ProtocolFeature().keepOnline(true).keepOnlineTimeoutSeconds(1800));
}
  • 實現com.yanboot.iot.sdk.protocol.ProtocolCodec接口的decode方法,完成協(xié)議的解碼工作。

private static final String PACKAGE_HEAD = "##";
private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
@Override
public void decode(OperatorSupplier supplier, DeviceSession deviceSession, ProtocolMessage<?> message, MessageExporter<DeviceMessage<?>> messageExporter) {
TcpProtocolMessage tcpProtocolMessage = (TcpProtocolMessage) message;
ByteBuf payload = tcpProtocolMessage.payload();
//解析協(xié)議
processPayload(payload, messageExporter);
}

private void processPayload(ByteBuf payload, MessageExporter<DeviceMessage<?>> messageExporter) {
String packageHead = payload.readCharSequence(2, CharsetUtil.US_ASCII).toString();
//判斷包頭是否符合包尾規(guī)范,不符合退出后續(xù)校驗解析
if (!PACKAGE_HEAD.equals(packageHead)) {
return;
}
int dataLen = Integer.parseInt(payload.readCharSequence(4, Charset.defaultCharset()).toString());
String dataSegments = payload.readCharSequence(dataLen, Charset.defaultCharset()).toString();
int checkCrc = Integer.parseInt(CRC16_Checkout(dataSegments, dataLen), 16);
int crc = Integer.parseInt(payload.readCharSequence(4, Charset.defaultCharset()).toString(), 16);
//校驗crc是否正確,不正確退出后續(xù)解析
if (checkCrc != crc) {
log.error("crc錯誤,執(zhí)行結束。");
return;
}
//解析數據段
JSONObject jsonData = JSONObject.parseObject("{\"" + dataSegments.replaceFirst("CP=", "")
.replaceAll("&&", "")
.replaceAll("=", "\":\"")
.replaceAll(",", "\",\"")
.replaceAll(";", "\",\"") + "\"}");
String deviceId = jsonData.getString("MN");
long timestamp = LocalDateTime.parse(jsonData.getString("QN"), dtf).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
//將數據封裝成設備消息并發(fā)送到研博工業(yè)物聯網統(tǒng)一接入系統(tǒng)(stew-ot)
messageExporter.export(new ReportPropertyMessage().deviceId(deviceId).properties(jsonData).timestamp(timestamp));
}

// CRC16校驗函數
private static String CRC16_Checkout(String src, int len) {
int crc = 0x0000FFFF;
short tc;
char sbit;
for (int i = 0; i < len; i++) {
tc = (short) (crc >>> 8);
crc = ((tc ^ src.charAt(i)) & 0x00FF);
for (int r = 0; r < 8; r++) {
sbit = (char) (crc & 0x01);
crc >>>= 1;
if (sbit != 0)
crc = (crc ^ 0xA001) & 0x0000FFFF;
}
}
String str = Integer.toHexString(crc);
if (str.length() == 3) {
return "0" + str.toUpperCase();
} else if (str.length() == 2) {
return "00" + str.toUpperCase();
}else if (str.length() == 1) {
return "000" + str.toUpperCase();
}
return str.toUpperCase();
}

 

協(xié)議上傳使用

  • 通過maven clean package完成協(xié)議的打包,將打包完成的協(xié)議包上傳到研博工業(yè)物聯網統(tǒng)一接入系統(tǒng)。

  • 創(chuàng)建組件實例并啟動。

  • 創(chuàng)建產品、管理物模型、接入組件。

  • 管理設備,并發(fā)送HJ212-2017報文樣例,查看具體詳情

try (Socket socket = new Socket(TcpCommon.address(),TcpCommon.serverPort());OutputStream 
outputStream = socket.getOutputStream();){// 
發(fā)送數據給服務器
String message = "##0141QN=20210331101308609;ST=21;CN=2011;PW=123456;MN=010000A8900016F000169DC0;Flag=4;CP=&&DataTime=20210331101308;a01002-Rtd=12.69;a01002-Flag=N&&9E81";
outputStream.write(message.getBytes());
} catch (IOException e) {
throw new RuntimeException(e);
???????}

  至此,HJ212-2017報文解析結束,通過研博工業(yè)物聯網統(tǒng)一接入系統(tǒng)(stew-ot)可以查看設備上報的具體監(jiān)測值。

獲取相關資料
下載地址將會發(fā)送至您填寫的郵箱
相關新聞
水文SL651協(xié)議解析
2025-01-17
JT/T808 協(xié)議解析
2025-01-10
基于CentOS7系統(tǒng)初步搭建hadoop
2024-12-16
  • 在線客服
  • 電話咨詢
  • 微信
  • 短視頻
  • 丁香五月婷婷国产精品| 欧美激情国产日韩从后面| 亚洲色图欧美色| 99精品久久久中文字幕不卡| 亚洲日韩激情无码一区二区三区| 精品三级精品我要看黄色| 色丁香五月在线视频| 久久国语露脸国产精品| 色综合久久天天综合| 国产亚洲丁香五月在线| 婷婷五月天久久| 2022国产成人丝袜精品视频 | 99久久精品国产片| 日韩电影免费在线| 久久永久免费人妻精品直播| 国内黄色看片| 欧美A级V片在线网站| 亚美激情一区| 中文无码一区二日韩| 国产+无码+激情| 麻豆人妻中文字幕乱码在线| 亚洲AV永久无码嘿嘿嘿被手指玩 | 亚洲无线观看码| 麻豆天天| 狠狠色狠狠色综合伊人| 久久久Y视频| 免费无码国产一区| 99热99re8国产在线播放| 乱小说视频区| 国产AV一区二区三区无码野战| 日韩精品一区二区三区丰满 | 国产AV一区最新精品麻豆| 不卡一区| 中文字幕高清免费日韩视频在线| 尼勒克县| 自摸免费网址| 91人妻无码成人精品一区91| 久久免费看黄A级毛片女| 天天操网站| 精品少妇久久久久久| 免费va国产在线观看|