水文传输规约 SL651的相关经验

水文传输规约SL651 的编解码是有一些难度的,可能因为协议经历了较长时间的发展,并且多方参与经手,为了扩展性等。加上在各省落地的时候,因为理解的不一致,基于此协议又做了一些自定义或者扩展。

下面分享一些我们在开发和维护的过程中遇到的一些问题。

一、图片传输

有四种传输方式,M1 M2 M3 M4。对于多包分片传输,比如 FN38(读取设备固态数据),FN36(图片传输),使用了不同的分片传输方式(M3、M4),设备端不维护状态,所以服务器端需要做好分片重组等逻辑,FN36 还支持分片重发请求。

具体的报文交互流程如下:

```
1
7E7E100012340086123436041C1602B0010003250405115043F0F02504051150F1F1001234008648F3F3FFD8FFE10FFE4578696600004D4D002A000000080006011200030000000100010000011A00050000000100000056011B0005000000010000005E01280003000000010002000002130003000000010001000087690004000000010000006600000000000000480000000100000048000000010007900000070000000430323231910100070000000401020300A00000070000000430313030A00100030000000100010000A00200040000000100000140A003000400000001000000F0A406000300000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173476

........

42
7E7E10001234008612343604031602B02AAD75ADDD2C525EDDA4255C22C4C8E238FEE8C4D2028D9C00AE554FD93F121BF675F82DF0CADFC45AF6A569A65B18DA4B0BC99E5B8BAB995949FDD853F68B82C483B13807B2E38F8ABE1E7C57D1355F0B1F08CB30B5D7D9B2FE69DB2DEC117CDBCE7E6778F29B94F0170548C151F957FB7BF8C7584F8BD369101961CE9B6205D464388565DE08407F88B7255720F195F4FD47C3ACAF0D8BCB673C4C139ECDDBA5AFA7FC03F31E3BAD88599E1B0182FDDC52FF00C0A577EF3FC97923F52FC11F191B59F87ADF127C6B7E74CD2F4E91A4437521863B89F6800DBA8086E63DA70B80CBB8632CC38E2FC35FB52FC30F1659DB7877C3969770DFDFB39DB796D259CD315E5A684390EEB1F180071F78F39AC6F1EFC3CB0F8A7F0D628AE5FEC7773DBDB436774B33EE0EE889B1C4870809C2203F264F4C572BE0CFD992C7F67AD5344F137C5C920F177896CA667B69228D63874F5202A08D19F12491A921652A91460B08E35C935F82D0AB4A542A5E6E2B656FCB63FA3E386CAD53552BEB5BA455925A74F2F3FC0FAABC2FE12F175D6B70EB5E2F8DA2B60AE5A197396236842C3700A588FBBD860E3D7D0753F10E8CA6EEC2EE0905960B45B10379078541BD4673CF19E1718200E2BF20FE3A787BE207C47FDA26C6CEF3C217DE248846F6D631DAC9E6DBD9B3BED32CE8678420D8FE679A17CB608D1B306112B7DEBF0D2D75DF85BE1683C33E29D46DB5AF13E956524D3BB46EA9B1B718511D9B964207EF1B2580E8B9CD7A70CC2AE1F0B4E6AADFCBB791E3E6FC138692F6B171739EF18AE9FD69B23DEBC3B6336ABE237D25DD6684152B046A7CD6562769701C15DD8C1503191D457A0F8CBE196A5A4E8DFDBD0A24B6C0EE9EDE2047950FF7BF8B72AF3BC64ED5EE6BF2ABF625FDA2BE2B78AFC79A8EBDAD6B6979752DAB5D3D9C36C12180CD281E539CE48C7CBE5991A58F1F31DD835F7EFED09FB7BF81BE0EF83ECE5F0FE9CD79E29D4A091E1B09FF00756B66911D8D3DCCDC7EE73F7553F79274F9002C3F7DE0AC82B62684B198D9EBB452D124B4F99FCEDE29E1A593E64B26C2C17BAA2E4FAB6D6DF20D67C63A45959C3A6013798C048F14389155070ACC4108100C1DA31B87038CD5C54D37529121825DA87FD5E1D547201DC7AE00E80018CF1D89AFCE1F077C7BBAF89B60F2F8ABCAB8D4595A5761E5DBC72B1C3CAF0C4AD858972AA065B0BD7B16F78F00DCEBBE2DD2E6F11DD6A779E1A5597C987518A6585E52490EB6CADB92403A0678CA2FFB47728FC871BC7789C2E653C3D75EEA765E497F99FA64BC2CA52CBE9D68FBB2693D7ADD2FBAC7DEBA178634390B35B5B7DA1D3736F7607923F8BE6FBC7B29E7038C62B064D03C3504EF81B5A43F32A6D8B1B9790D8EDC73927A62BC7FC4DF1753C3491A8BDF345CEC8BC890061E8D2025B2385F998F5CF18AF917BD34
43
7E7E10001234008612343603721602B02B6742F88DE2FBAF10FDBB598AD6F8C170D11934E2C15C33B0846149CB71B71B588CFB71E9E13C48A2EBFB1946D1EE788FC25C74B092C441DDAE9FD591F65EA1A6695F6C7B5B6911767DF67906D2DD147CC483EB81CE3B0AF02F899E21D121F36D21D3E1D56EA76DAAF75B3F76463FD54403018FE1CFCC3EB5EA728BE5F0F5A788354B0FECC9DE13989985CA213FC0590042FB783F7806EF9008E77C7FE08D475343E25F0C4083C9B76F3ED76B79AECBF3623C31421FB71EE48AF76A71C61956F629FCFA1F22B81F11EC7DAB5F23E784D17C6F2C326A3736F1DB5A97474F99103326190A85387208DE7D0F1EA2B857D475D5B93A7EA8BE55BA3BCB9DD959249060BBFCC3716EC7E6DBD715ED5A3F8CFC27E2ED774BF015B6AD731DF5D67ECF65F66770E186EC9D995DA36F2FD0639C0E9EABE28F0FFC3CF0FE9F65A06BF1B4B717930FB39449250D24871B323E45EE704738C03C0AF4733E22A74A29CA679D9770EE2AAD4E48C36EEAC7C77FD89A65D6A90788F5ED22CE5658B6C6EC88CD807680180EC338C11F4CF34CBAF0FF00846E09BBD1ED634BB195711A950557F7815B7B1381ED8EDCF6AFAC3C2FE10F1678E35D5F0AE9B185522488FCCC5238E26552F825B66DE06D523278EB5EA3E38FD951FC1720BFF0934FAC5B6D02488154B8083973B13687190496EA3DC0CD7A197D6AD5A8FB5A6B9A2BB1E462E30C35654711A4BB1F9BB3585D6AC7CDD7D96DD77E31F3EDDC7A0D8BB46403CFDECFE54DB4F054B04C61D02212297F95B0CB1160718657C9555E78EBEB5F6778DB4ED0743D157C4BA85BFD96DE2654DF300C5119FA841CFE3C0EF8AAB6171E16F139897C3B743508C1586465619195048249182578C11D38C56183CC6159FBA7A78EC2D6C3C39A51B1F3CCDF0DEFA6B64B582132104217D84AB7CC433672385031C57207C287C3C2EA3D4D22CC0498A552542F3C956279057A2E0F3DEBF4367B1D360B669A65F2D88195C8D8B8E06D1C607F3AF2CF1278617C477F1069C49F673875914A92C0330F24004392071CF1FA0F5EBD6A1875CD39257D11E1E16962312DC6946F6EC7C351F84619E39279A15688F676604AB71F280464FF002AC88F49B6B38E4B3D3D3CA0C701003B476E066BEC95B1D0351FB459C7132CF1BC6B1EDE7C9561B4071C1DC5B3D32540E462ADDEF8134DF01E9D36AAB653DFDD4B1854760988D88203AE0F3EE781DABA217BAE538A751753FFD903A0F9

```

二、读取固态数据

三、参数配置

四、表达负数

五、协议扩展

基于 SL651扩展的振弦式传感器采集数据上报。

```

原始报文:

7E7E010075685531123432008002060E250405115538F1F1007568553148F0F02504051155FF312200000000FF322200000000FF332200216689FF342200000000FF352200000000FF362200000000FF372200000000FF382200000000FF411A001383FF4222FF004100FF431A001837FF441A001355FF451A001448FF461A001375FF471A001767FF481A00140503504B

解析结果:
SSN : 0075685531
FN : 0x32
LEN : 128
STX : 02
---------------------------
SN : 0x060e
F1 F1 007568553148 测站编码
F0 F0 2504051155 观测时间
FF31 22 00000000
FF32 22 00000000
FF33 22 00216689
FF34 22 00000000
FF35 22 00000000
FF36 22 00000000
FF37 22 00000000
FF38 22 00000000
FF41 1A 001383
FF42 22 FF004100
FF43 1A 001837
FF44 1A 001355
FF45 1A 001448
FF46 1A 001375
FF47 1A 001767
FF48 1A 001405
---------------------------
END : 0x03 ETX 报文结束
CRC : 0x504b

```

### 解析水文SL651报文格式 #### 报文结构概述 水文通信规约SL651规定了用于水利智能网关的数据上报格式。该规约适用于雨量计、流量计、水位计等多种传感器设备的数据传输报文由多个字段组成,每个字段具有特定含义和长度。 #### 基本报文格式 一个典型的SL651报文遵循如下基本结构: - **起始符**:0x68 (表示报文开始)[^1] - **地址域**:2字节,标识发送方或接收方的身份 - **控制码**:1字节,指示操作类型(如读取、写入) - **数据区长度**:1字节,指出后续数据部分的总长度 - **数据区**:可变长度,包含实际测量值或其他信息 - **校验码**:1字节,通常采用纵向冗余校验(LRC) - **结束符**:0x16 (表示报文结束) #### 数据区解析 对于具体的应用场景,例如降雨量报告,数据区内可能包含以下内容: ```plaintext | 序号 | 字节数 | 含义 | |------|--------|----------------| | 1 | 2 | 测站编号 | | 2 | 4 | 时间戳 | | 3 | 2 | 雨量累计值 | ``` 每条记录按照上述表格中的顺序排列,并且各字段之间无分隔符。需要注意的是,某些情况下可能会存在扩展字段来适应特殊需求。 #### Python代码示例 为了更好地理解这一过程,下面给出一段Python代码片段展示如何解析简单的SL651报文: ```python def parse_sl651(message): if message.startswith(b'\x68') and message.endswith(b'\x16'): address = int.from_bytes(message[1:3], byteorder='big') control_code = message[3] data_length = message[4] data_section = message[5:-1][:data_length] # 这里可以进一步处理data_section, 如解包成具体的数值 lrc_calculated = sum(data_section[:-1]) % 256 lrc_received = data_section[-1] if lrc_calculated == lrc_received: return { "address": address, "control_code": control_code, "data": list(data_section), "validity": True } else: return {"error": "LRC check failed"} else: return {"error": "Invalid start or end marker"} # 使用方法 raw_message = b'\x68\x0A\xFF\x0B\x0C...\x16' # 替换为真实的十六进制字符串 result = parse_sl651(raw_message) print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值