#include "mf.h" /* *发送:[硬件地址][03][起始地址高][起始地址低][总寄存器数高][总寄存器数低][CRC低][CRC高] *返回:[硬件地址][03][字节数][寄存器0高][寄存器0低][寄存器1高][寄存器1低][寄存器n高][寄存器n低][CRC低][CRC高] */ void read_mf(uint8_t local_addr, uint16_t start_addr, uint16_t read_len) { uint8_t tx_buf[20] = {0},tx_len = 0; uint16_t CRC_Num = 0; tx_buf[tx_len ++] = local_addr; tx_buf[tx_len ++] = Read_Hold; tx_buf[tx_len ++] = (uint8_t)(start_addr >> 8); tx_buf[tx_len ++] = (uint8_t)(start_addr & 0xFF); tx_buf[tx_len ++] = (uint8_t)(read_len >> 8); tx_buf[tx_len ++] = (uint8_t)(read_len & 0xFF); CRC_Num = ModbusCRC16(tx_buf,tx_len); tx_buf[tx_len ++] = (uint8_t)(CRC_Num & 0xFF); tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); usart6_send(tx_buf,tx_len); } /* *发送:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高] *返回:[硬件地址][06][寄存器地址高][寄存器地址低][寄存器值高][寄存器值低][CRC低][CRC高] */ void write_mf(uint8_t local_addr, uint16_t reg_addr, uint16_t write_data) { uint8_t tx_buf[20] = {0},tx_len = 0; uint16_t CRC_Num = 0; tx_buf[tx_len ++] = local_addr; tx_buf[tx_len ++] = Write_Single; tx_buf[tx_len ++] = (uint8_t)(reg_addr >> 8); tx_buf[tx_len ++] = (uint8_t)(reg_addr & 0xFF); tx_buf[tx_len ++] = (uint8_t)(write_data >> 8); tx_buf[tx_len ++] = (uint8_t)(write_data & 0xFF); CRC_Num = ModbusCRC16(tx_buf,tx_len); tx_buf[tx_len ++] = (uint8_t)(CRC_Num & 0xFF); tx_buf[tx_len ++] = (uint8_t)(CRC_Num >> 8); usart6_send(tx_buf,tx_len); } //读mf4700瞬时流量 void read_mf4700_flow(void) { read_mf(MF4700_ADDR,MF4700_Ins_Flow_Addr,2); } //读mf5600瞬时流量 void read_mf5000_flow(void) { read_mf(MF5000_ADDR,MF5000_Ins_Flow_Addr,2); } //mf4700自动校零 void mf4700_zero(void) { write_mf(MF4700_ADDR,MF4700_Auto_Zero_Addr,General_Data); } //mf5600自动校零 void mf5000_zero(void) { write_mf(MF5000_ADDR,MF5000_Auto_Zero_Addr,General_Data); }