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
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)
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])
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))