Exemplo n.º 1
0
def __cal_flow_rate(frame):
    """
    获取瞬时流量
    :param frame:
    :return:
    """
    field = data_field.find_flow_rate_field()
    if len(frame) <= field.end_address:
        return None
    flow_rate = math.calculate_double(
        frame[field.begin_address:field.end_address + 1])
    return flow_rate
Exemplo n.º 2
0
def __cal_total_flow(frame):
    int_field = data_field.find_total_flow_int_field()
    float_field = data_field.find_total_flow_float_field()
    res = 0.0
    if len(frame) > int_field.end_address:
        res += math.byte_arr_convert_int(
            frame[int_field.begin_address:int_field.end_address + 1])
    if len(frame) > float_field.end_address:
        res += math.calculate_double(
            frame[float_field.begin_address:float_field.end_address + 1])

    return float(res)
Exemplo n.º 3
0
def get_field_val(frame, opr_type):
    """
    获取域值
    :param frame:
    :param opr_type:
    :return:
    """
    # 数据域在数组中开始的索引
    __DATA_FIELD_BEGIN_INDEX = 4
    # 数据域在数组中结束的索引
    __DATA_FIELD_END_INDEX = 6
    if opr_type == Operator.RECHARGE:
        return math.byte_arr_convert_int(
            frame[__DATA_FIELD_BEGIN_INDEX:__DATA_FIELD_END_INDEX])
    elif opr_type == Operator.SET_FLOW_RATIO:
        return math.calculate_double(
            frame[__DATA_FIELD_BEGIN_INDEX:__DATA_FIELD_END_INDEX])
    elif opr_type == Operator.SET_METER_ADDRESS:
        return math.byte_arr_convert_int(
            frame[__DATA_FIELD_BEGIN_INDEX:__DATA_FIELD_END_INDEX])
Exemplo n.º 4
0
import struct
from flowmeter.common.api import math

x = [int('01', 16), int('17', 16), int('00', 16), int('00', 16)]
print("%.300lf" % math.calculate_double(x))