예제 #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
예제 #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)
예제 #3
0
파일: frame.py 프로젝트: TonyJava/flowmeter
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])
예제 #4
0
파일: test.py 프로젝트: TonyJava/flowmeter
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))