HJ212-Client模拟器

HJ212-Client模拟器

仓库地址:https://gitee.com/ll0_0ll/HJ212-Pack
HJ212协议认识:https://blog.csdn.net/lblmlms/article/details/108276232
HJ212-Client模拟器:https://blog.csdn.net/lblmlms/article/details/130139619
HJ212-Pack HJ212协议组包实现:https://blog.csdn.net/lblmlms/article/details/130139688

思路

  1. 组包固定字段
  2. 组包变量字段
  3. CRC校验
  4. 完成整包组合
  5. 建立TCP连接
  6. 定时变化变量
  7. 定时发送报文

实现


from glob import glob
from pickle import TRUE
import time
import socket

ST = "77"
CN = "2011"
PW = "123456"
MN = "MN1234567890ABCD"
FLAG = "4"
TCP_IP = "127.0.0.1"
TCP_PORT = 30024
TCP_KEEPALIVE = 60
TCP_UPLOAD_PERIOD = 60

DATA_LIST = ["va1","va2","va3","Fb1","Fb2","Fb3"]
VALUE = 0

def get_qn():
    timestamp=time.time()
    local_time = time.localtime(timestamp)
    data_head = time.strftime("%Y%m%d%H%M%S", local_time)
    data_secs = (timestamp - int(timestamp)) * 1000
    dt_ms = "%s%03d" % (data_head, data_secs)
    return dt_ms

def get_datetime():
    timestamp=time.time()
    local_time = time.localtime(timestamp)
    str_time = time.strftime("%Y%m%d%H%M%S", local_time)
    return str_time

def encode_header():
    qn = "QN="+get_qn()
    packet=qn+";"
    st = "ST="+ST
    packet=packet+st+";"
    cn = "CN="+CN
    packet=packet+cn+";"
    pw = "PW="+PW
    packet=packet+pw+";"
    mn = "MN="+MN
    packet=packet+mn+";"
    flag = "Flag="+FLAG
    packet=packet+flag+";"
    cp = "CP=&&"
    packet=packet+cp
    return packet

def crc16(text):
    data = bytearray(text, encoding='utf-8')
    crc = 0xffff
    dxs = 0xa001
    for i in range(len(data)):
        hibyte = crc >> 8
        crc = hibyte ^ data[i]
        for j in range(8):
            sbit = crc & 0x0001
            crc = crc >> 1
            if sbit == 1:
                crc ^= dxs
    return hex(crc)[2:].zfill(4).upper()

def hj212_encode():
    header_packet = encode_header()
    datatime = "DataTime="+get_datetime()+";"
    data_packet = datatime
    for data in DATA_LIST:
        data_line = data+"-Rtd="+str(VALUE)+","
        data_line = data_line+data+"-Flag=N;"
        data_packet += data_line
    data_packet = data_packet.strip(';')+"&&"
    total_data = header_packet+data_packet
    data_crc = crc16(total_data)
    data_len = str(len(total_data)+6).zfill(4)
    packet = "##"+data_len+total_data+data_crc+"\r\n"
    print(packet)
    return packet

def value_change():
    global VALUE
    print("VALUE = %d" %VALUE)
    VALUE = VALUE + 1
    if VALUE>100:
        VALUE = 0
    
def tcp_connect():
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
    tcp_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, TCP_KEEPALIVE)
    tcp_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 10)
    tcp_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3)
    tcp_socket.connect((TCP_IP,TCP_PORT))
    print(tcp_socket)
    return tcp_socket

def tcp_disconnect(socket):
    socket.close()


if __name__ == '__main__':
    with tcp_connect() as sock:
        while TRUE:
            pack = hj212_encode()
            sock.send(pack.encode("utf8"))
            value_change()
            time.sleep(TCP_UPLOAD_PERIOD)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
HJ212是国家环境监测标准协议的客户端,它使用规范的通信协议与环境监测设备进行数据交互。HJ212协议规定了客户端与设备之间的数据传输格式及通信方式,用于监测大气、水、土壤等环境参数。 hj212-client是基于HJ212协议开发的客户端软件。它可以通过与监测设备连接,实时接收监测数据,并将数据进行解析和处理,以便用户进行分析和展示。hj212-client具有简洁易用的界面,可以快速实现与监测设备的通信,并提供实时数据监测和历史数据回放等功能。 hj212-client具备以下主要功能: 1. 与监测设备建立连接:通过HJ212协议与监测设备进行通信,确保数据传输的可靠性和高效性; 2. 实时数据监测:实时接收并显示监测设备上传的环境参数,如温度、湿度、浓度等,可以进行实时监测和报警; 3. 历史数据回放:可以回放历史数据,了解环境参数的变化趋势,进行数据分析和比对; 4. 数据解析和处理:对接收到的数据进行解析和处理,提取关键信息,进行计算和转换,使数据更易于理解和使用; 5. 用户权限管理:具有用户权限管理功能,可以设置不同用户的访问权限,确保数据安全性; 6. 数据报表和图表展示:可以生成各种形式的数据报表和图表,直观地呈现监测数据,便于用户进行分析和决策。 总之,hj212-client是一款功能强大、易于使用的客户端软件,可以有效地与监测设备进行数据交互,满足用户对环境监测数据处理和展示的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tangYi0_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值