#ifndef __MODBUS_H #define __MODBUS_H #include "ucos_ii.h" /*接收数组大小*/ #define MODBUS_RX_BUF_SIZE 256 /*发送数组大小*/ #define MODBUS_TX_BUF_SIZE 256 /*modbus通信波特率*/ #define MODBUS_USART_BAUDRATE 115200 /*从机地址*/ #define SLAVE_ADDRES 0x01 /*错误码*/ #define ERR_FUNC 0x01 #define ERR_OPE_ADDRES 0x02 #define ERR_DATA 0x03 #define ERR_SLAVE 0x04 #define ERR_CRC 0x1F #define ERR_SLAVE_ADDRES 0x2F /*modbus帧结构*/ typedef struct Modbus_Frame { uint8_t slaveAddres; /*从机地址*/ uint8_t func; /*功能码*/ uint16_t opeAddres; /*操作地址*/ uint16_t opeNum; /*操作数量*/ uint8_t wNum; /*写入字节数*/ uint8_t wData[256]; /*写入数据*/ uint16_t crc; /*CRC校验码*/ }MODBUS_FRAME; /*接收到数据帧信号量*/ extern OS_EVENT *ModbusReceived; uint8_t ModbusErrReply(uint8_t func, uint8_t err); uint16_t Crc16(const uint8_t *data, uint16_t length); void AddCrc16(uint8_t *data, uint16_t length); int8_t ChcekCrc16(uint16_t recCrc16, uint8_t *data, uint16_t length); uint8_t ModbusReadCoils(uint16_t addres, uint16_t num); uint8_t ModbusWriteCoils(uint16_t addres, uint16_t num, uint8_t *data); uint8_t ModbusReadRegs(uint16_t addres, uint16_t num); uint8_t ModbusWriteRegs(uint16_t addres, uint16_t num, uint8_t *data); uint8_t ModbusWriteReg(uint16_t addres, uint8_t *data); uint8_t ModbusWriteCoil(uint16_t addres, uint8_t *data); uint8_t ModbusExtReadOdd(uint16_t num); void ModbusSend(uint8_t *txBuf, uint16_t len); #endif