EV-Embedded-Control-System/middlewares/modbushost/modbus_host.c

984 lines
26 KiB
C
Raw Normal View History

/*
*********************************************************************************************************
*
* ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : MODSBUSͨ<EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : modbus_host.c
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> : V1.4
* ˵ <EFBFBD><EFBFBD> : MODBUSЭ<EFBFBD><EFBFBD>
*
* Copyright (C), 2020-2030, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> www.armfly.com
*
*********************************************************************************************************
*/
#include "bsp.h"
#include "modbus_host.h"
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
#define TIMEOUT 1000 /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>, <20><>λms */
#define NUM 1 /* ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD> */
/*
Baud rate Bit rate Bit time Character time 3.5 character times
2400 2400 bits/s 417 us 4.6 ms 16 ms
4800 4800 bits/s 208 us 2.3 ms 8.0 ms
9600 9600 bits/s 104 us 1.2 ms 4.0 ms
19200 19200 bits/s 52 us 573 us 2.0 ms
38400 38400 bits/s 26 us 286 us 1.75 ms(1.0 ms)
115200 115200 bit/s 8.7 us 95 us 1.75 ms(0.33 ms) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD>Ϊ1750us
*/
typedef struct
{
uint32_t Bps;
uint32_t usTimeOut;
}MODBUSBPS_T;
const MODBUSBPS_T ModbusBaudRate[] =
{
{2400, 16000}, /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2400bps, 3.5<EFBFBD>ַ<EFBFBD><EFBFBD>ӳ<EFBFBD>ʱ<EFBFBD><EFBFBD>16000us */
{4800, 8000},
{9600, 4000},
{19200, 2000},
{38400, 1750},
{115200, 1750},
{128000, 1750},
{230400, 1750},
};
MODH_T g_tModH = {0};
uint8_t g_modh_timeout = 0;
VAR_T g_tVar;
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_RxTimeOut(void);
static void MODH_AnalyzeApp(void);
static void MODH_Read_01H(void);
static void MODH_Read_02H(void);
static void MODH_Read_03H(void);
static void MODH_Read_04H(void);
static void MODH_Read_05H(void);
static void MODH_Read_06H(void);
static void MODH_Read_10H(void);
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_SendPacket
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD> COM1<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _buf : <EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* _len : <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_SendPacket(uint8_t *_buf, uint16_t _len)
{
RS485_SendBuf(_buf, _len);
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_SendAckWithCRC
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>,<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>CRC.
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD>ޡ<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_SendAckWithCRC(void)
{
uint16_t crc;
crc = CRC16_Modbus(g_tModH.TxBuf, g_tModH.TxCount);
g_tModH.TxBuf[g_tModH.TxCount++] = crc >> 8;
g_tModH.TxBuf[g_tModH.TxCount++] = crc;
MODH_SendPacket(g_tModH.TxBuf, g_tModH.TxCount);
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_AnalyzeApp
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ò<EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_AnalyzeApp(void)
{
switch (g_tModH.RxBuf[1]) /* <20><>2<EFBFBD><32><EFBFBD>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
{
case 0x01: /* <20><>ȡ<EFBFBD><C8A1>Ȧ״̬ */
MODH_Read_01H();
break;
case 0x02: /* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬ */
MODH_Read_02H();
break;
case 0x03: /* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ּĴ<D6BC><C4B4><EFBFBD> <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּĴ<D6BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>õ<EFBFBD>ǰ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ֵ */
MODH_Read_03H();
break;
case 0x04: /* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> */
MODH_Read_04H();
break;
case 0x05: /* ǿ<>Ƶ<EFBFBD><C6B5><EFBFBD>Ȧ */
MODH_Read_05H();
break;
case 0x06: /* д<><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> */
MODH_Read_06H();
break;
case 0x10: /* д<><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> */
MODH_Read_10H();
break;
default:
break;
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Send01H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>01<EFBFBD><EFBFBD><EFBFBD>ѯ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _addr : <EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ַ
* _reg : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* _num : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Send01H(uint8_t _addr, uint16_t _reg, uint16_t _num)
{
g_tModH.TxCount = 0;
g_tModH.TxBuf[g_tModH.TxCount++] = _addr; /* <20><>վ<EFBFBD><D5BE>ַ */
g_tModH.TxBuf[g_tModH.TxCount++] = 0x01; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
MODH_SendAckWithCRC(); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Զ<EFBFBD><D4B6><EFBFBD>CRC */
g_tModH.fAck01H = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־ */
g_tModH.RegNum = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.Reg01H = _reg; /* <20><><EFBFBD><EFBFBD>01Hָ<48><D6B8><EFBFBD>еļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>з<EFBFBD><D0B7><EFBFBD> */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Send02H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>02<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _addr : <EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ַ
* _reg : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* _num : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Send02H(uint8_t _addr, uint16_t _reg, uint16_t _num)
{
g_tModH.TxCount = 0;
g_tModH.TxBuf[g_tModH.TxCount++] = _addr; /* <20><>վ<EFBFBD><D5BE>ַ */
g_tModH.TxBuf[g_tModH.TxCount++] = 0x02; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
MODH_SendAckWithCRC(); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Զ<EFBFBD><D4B6><EFBFBD>CRC */
g_tModH.fAck02H = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־ */
g_tModH.RegNum = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.Reg02H = _reg; /* <20><><EFBFBD><EFBFBD>02Hָ<48><D6B8><EFBFBD>еļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>з<EFBFBD><D0B7><EFBFBD> */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Send03H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>03<EFBFBD><EFBFBD><EFBFBD>ѯ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּĴ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _addr : <EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ַ
* _reg : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* _num : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Send03H(uint8_t _addr, uint16_t _reg, uint16_t _num)
{
g_tModH.TxCount = 0;
g_tModH.TxBuf[g_tModH.TxCount++] = _addr; /* <20><>վ<EFBFBD><D5BE>ַ */
g_tModH.TxBuf[g_tModH.TxCount++] = 0x03; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
MODH_SendAckWithCRC(); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Զ<EFBFBD><D4B6><EFBFBD>CRC */
g_tModH.fAck03H = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־ */
g_tModH.RegNum = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.Reg03H = _reg; /* <20><><EFBFBD><EFBFBD>03Hָ<48><D6B8><EFBFBD>еļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>з<EFBFBD><D0B7><EFBFBD> */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Send04H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>04<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _addr : <EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ַ
* _reg : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* _num : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Send04H(uint8_t _addr, uint16_t _reg, uint16_t _num)
{
g_tModH.TxCount = 0;
g_tModH.TxBuf[g_tModH.TxCount++] = _addr; /* <20><>վ<EFBFBD><D5BE>ַ */
g_tModH.TxBuf[g_tModH.TxCount++] = 0x04; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
MODH_SendAckWithCRC(); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Զ<EFBFBD><D4B6><EFBFBD>CRC */
g_tModH.fAck04H = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־ */
g_tModH.RegNum = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.Reg04H = _reg; /* <20><><EFBFBD><EFBFBD>04Hָ<48><D6B8><EFBFBD>еļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>з<EFBFBD><D0B7><EFBFBD> */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Send05H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>05<EFBFBD>дǿ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>Ȧ
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _addr : <EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ַ
* _reg : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* _value : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ֵ,2<EFBFBD>ֽ<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Send05H(uint8_t _addr, uint16_t _reg, uint16_t _value)
{
g_tModH.TxCount = 0;
g_tModH.TxBuf[g_tModH.TxCount++] = _addr; /* <20><>վ<EFBFBD><D5BE>ַ */
g_tModH.TxBuf[g_tModH.TxCount++] = 0x05; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _value >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _value; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ <20><><EFBFBD>ֽ<EFBFBD> */
MODH_SendAckWithCRC(); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Զ<EFBFBD><D4B6><EFBFBD>CRC */
g_tModH.fAck05H = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ӻ<EFBFBD><D3BB><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ϊ1 */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Send06H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>06<EFBFBD>д1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּĴ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _addr : <EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ַ
* _reg : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* _value : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ֵ,2<EFBFBD>ֽ<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Send06H(uint8_t _addr, uint16_t _reg, uint16_t _value)
{
g_tModH.TxCount = 0;
g_tModH.TxBuf[g_tModH.TxCount++] = _addr; /* <20><>վ<EFBFBD><D5BE>ַ */
g_tModH.TxBuf[g_tModH.TxCount++] = 0x06; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _value >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _value; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ <20><><EFBFBD>ֽ<EFBFBD> */
MODH_SendAckWithCRC(); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Զ<EFBFBD><D4B6><EFBFBD>CRC */
g_tModH.fAck06H = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ӻ<EFBFBD><D3BB><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ϊ1 */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Send10H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּĴ<EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>23<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: _addr : <EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ַ
* _reg : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* _num : <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n (ÿ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>) ֵ<EFBFBD><EFBFBD>
* _buf : n<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 2 * n
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Send10H(uint8_t _addr, uint16_t _reg, uint8_t _num, uint8_t *_buf)
{
uint16_t i;
g_tModH.TxCount = 0;
g_tModH.TxBuf[g_tModH.TxCount++] = _addr; /* <20><>վ<EFBFBD><D5BE>ַ */
g_tModH.TxBuf[g_tModH.TxCount++] = 0x10; /* <20><>վ<EFBFBD><D5BE>ַ */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num >> 8; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = _num; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD> */
g_tModH.TxBuf[g_tModH.TxCount++] = 2 * _num; /* <20><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> */
for (i = 0; i < 2 * _num; i++)
{
if (g_tModH.TxCount > H_RX_BUF_SIZE - 3)
{
return; /* <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>ֱ<EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
}
g_tModH.TxBuf[g_tModH.TxCount++] = _buf[i]; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
}
MODH_SendAckWithCRC(); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>Զ<EFBFBD><D4B6><EFBFBD>CRC */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_ReciveNew
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>ʱ<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>һ<EFBFBD>α<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 1 <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_ReciveNew(uint8_t _data)
{
/*
3.5<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTUģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪRTUģʽû<EFBFBD>п<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>֮<EFBFBD><EFBFBD>ֻ<EFBFBD>ܿ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>Modbus<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ͬ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ͷ
*/
uint8_t i;
/* <20><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ȡ<EFBFBD><C8A1>Ҫ<EFBFBD>ӳٵ<D3B3>ʱ<EFBFBD><CAB1> */
for(i = 0; i < (sizeof(ModbusBaudRate)/sizeof(ModbusBaudRate[0])); i++)
{
if(HBAUD485 == ModbusBaudRate[i].Bps)
{
break;
}
}
/* Ӳ<><D3B2><EFBFBD><EFBFBD>ʱ<EFBFBD>жϣ<D0B6>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>1<EFBFBD><31><EFBFBD><EFBFBD>MODBUS<55>ӻ<EFBFBD>, <20><>ʱ<EFBFBD><CAB1>2<EFBFBD><32><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>*/
bsp_StartHardTimer(2, ModbusBaudRate[i].usTimeOut, (void *)MODH_RxTimeOut);
if (g_tModH.RxCount < H_RX_BUF_SIZE)
{
g_tModH.RxBuf[g_tModH.RxCount++] = _data;
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_RxTimeOut
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>3.5<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD> g_rtu_timeout = 1; ֪ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_RxTimeOut(void)
{
g_modh_timeout = 1;
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Poll
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD>տ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>. 1ms <EFBFBD><EFBFBD>Ӧʱ<EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 0 <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<EFBFBD><EFBFBD>ʾ<EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Poll(void)
{
uint16_t crc1;
if (g_modh_timeout == 0) /* <20><><EFBFBD><EFBFBD>3.5<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>MODH_RxTimeOut()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD> g_rtu_timeout = 1 */
{
/* û<>г<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ա<EFBFBD><D5A1><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> g_tModH.RxCount */
return ;
}
/* <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
05 06 00 88 04 57 3B70 (8 <EFBFBD>ֽ<EFBFBD>)
05 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>վ<EFBFBD><EFBFBD>
06 : ָ<EFBFBD><EFBFBD>
00 88 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
04 57 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,,,ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1111.<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ǰ,
3B70 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> CRC <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>05<EFBFBD><EFBFBD> 57<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>
*/
g_modh_timeout = 0;
/* <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>4<EFBFBD><34><EFBFBD>ֽھ<D6BD><DABE><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>󣬵<EFBFBD>ַ<EFBFBD><D6B7>8bit<69><74><>8bit<69><74>+<2B><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>16bit<69><74> */
if (g_tModH.RxCount < 4)
{
goto err_ret;
}
/* <20><><EFBFBD><EFBFBD>CRCУ<43><D0A3><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>CRC16ֵһ<D6B5><D2BB><EFBFBD><EFBFBD>CRC16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD> */
crc1 = CRC16_Modbus(g_tModH.RxBuf, g_tModH.RxCount);
if (crc1 != 0)
{
goto err_ret;
}
/* <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ò<EFBFBD>Э<EFBFBD><D0AD> */
MODH_AnalyzeApp();
err_ret:
g_tModH.RxCount = 0; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>֡ͬ<D6A1><CDAC> */
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Read_01H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>01<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ȧ״̬<EFBFBD><EFBFBD>bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_Read_01H(void)
{
uint8_t bytes;
uint8_t *p;
if (g_tModH.RxCount > 0)
{
bytes = g_tModH.RxBuf[2]; /* <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> <20>ֽ<EFBFBD><D6BD><EFBFBD> */
switch (g_tModH.Reg01H)
{
case REG_D01:
if (bytes == 1)
{
p = &g_tModH.RxBuf[3];
g_tVar.D01 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tVar.D02 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tVar.D03 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tVar.D04 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tModH.fAck01H = 1;
}
break;
}
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Read_02H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>02<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_Read_02H(void)
{
uint8_t bytes;
uint8_t *p;
if (g_tModH.RxCount > 0)
{
bytes = g_tModH.RxBuf[2]; /* <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> <20>ֽ<EFBFBD><D6BD><EFBFBD> */
switch (g_tModH.Reg02H)
{
case REG_T01:
if (bytes == 6)
{
p = &g_tModH.RxBuf[3];
g_tVar.T01 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tVar.T02 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tVar.T03 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tModH.fAck02H = 1;
}
break;
}
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Read_04H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>04<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_Read_04H(void)
{
uint8_t bytes;
uint8_t *p;
if (g_tModH.RxCount > 0)
{
bytes = g_tModH.RxBuf[2]; /* <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> <20>ֽ<EFBFBD><D6BD><EFBFBD> */
switch (g_tModH.Reg04H)
{
case REG_A01:
if (bytes == 2)
{
p = &g_tModH.RxBuf[3];
g_tVar.A01 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tModH.fAck04H = 1;
}
break;
}
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Read_05H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>05<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ״̬<EFBFBD><EFBFBD>bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_Read_05H(void)
{
if (g_tModH.RxCount > 0)
{
if (g_tModH.RxBuf[0] == SlaveAddr)
{
g_tModH.fAck05H = 1; /* <20><><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><D3A6> */
}
};
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Read_06H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>06<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
static void MODH_Read_06H(void)
{
if (g_tModH.RxCount > 0)
{
if (g_tModH.RxBuf[0] == SlaveAddr)
{
g_tModH.fAck06H = 1; /* <20><><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><D3A6> */
}
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Read_03H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>03<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ּĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Read_03H(void)
{
uint8_t bytes;
uint8_t *p;
if (g_tModH.RxCount > 0)
{
bytes = g_tModH.RxBuf[2]; /* <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> <20>ֽ<EFBFBD><D6BD><EFBFBD> */
switch (g_tModH.Reg03H)
{
case REG_P01:
if (bytes == 4)
{
p = &g_tModH.RxBuf[3];
g_tVar.P01 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tVar.P02 = BEBufToUint16(p); p += 2; /* <20>Ĵ<EFBFBD><C4B4><EFBFBD> */
g_tModH.fAck03H = 1;
}
break;
}
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_Read_10H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
*********************************************************************************************************
*/
void MODH_Read_10H(void)
{
/*
10<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>:
<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD>ַ 11
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10
<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> 00
<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> 01
<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> 00
<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> 02
CRCУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> 12
CRCУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> 98
*/
if (g_tModH.RxCount > 0)
{
if (g_tModH.RxBuf[0] == SlaveAddr)
{
g_tModH.fAck10H = 1; /* <20><><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><D3A6> */
}
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_ReadParam_01H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>01<EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󣬵ȴ<EFBFBD><EFBFBD>ӻ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 1 <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0 <EFBFBD><EFBFBD>ʾʧ<EFBFBD>ܣ<EFBFBD>ͨ<EFBFBD>ų<EFBFBD>ʱ<EFBFBD>򱻾ܾ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
uint8_t MODH_ReadParam_01H(uint16_t _reg, uint16_t _num)
{
int32_t time1;
uint8_t i;
for (i = 0; i < NUM; i++)
{
MODH_Send01H (SlaveAddr, _reg, _num); /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
time1 = bsp_GetRunTime(); /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1> */
while (1) /* <20>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>,<2C><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>break */
{
bsp_Idle();
if (bsp_CheckRunTime(time1) > TIMEOUT)
{
break; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
if (g_tModH.fAck01H > 0)
{
break; /* <20><><EFBFBD>յ<EFBFBD>Ӧ<EFBFBD><D3A6> */
}
}
if (g_tModH.fAck01H > 0)
{
break; /* ѭ<><D1AD>NUM<55>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>breakѭ<6B><D1AD> */
}
}
if (g_tModH.fAck01H == 0)
{
return 0;
}
else
{
return 1; /* 01H <20><><EFBFBD>ɹ<EFBFBD> */
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_ReadParam_02H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>02<EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󣬵ȴ<EFBFBD><EFBFBD>ӻ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 1 <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0 <EFBFBD><EFBFBD>ʾʧ<EFBFBD>ܣ<EFBFBD>ͨ<EFBFBD>ų<EFBFBD>ʱ<EFBFBD>򱻾ܾ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
uint8_t MODH_ReadParam_02H(uint16_t _reg, uint16_t _num)
{
int32_t time1;
uint8_t i;
for (i = 0; i < NUM; i++)
{
MODH_Send02H (SlaveAddr, _reg, _num);
time1 = bsp_GetRunTime(); /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1> */
while (1)
{
bsp_Idle();
if (bsp_CheckRunTime(time1) > TIMEOUT)
{
break; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
if (g_tModH.fAck02H > 0)
{
break;
}
}
if (g_tModH.fAck02H > 0)
{
break;
}
}
if (g_tModH.fAck02H == 0)
{
return 0;
}
else
{
return 1; /* 02H <20><><EFBFBD>ɹ<EFBFBD> */
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_ReadParam_03H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>03<EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󣬵ȴ<EFBFBD><EFBFBD>ӻ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 1 <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0 <EFBFBD><EFBFBD>ʾʧ<EFBFBD>ܣ<EFBFBD>ͨ<EFBFBD>ų<EFBFBD>ʱ<EFBFBD>򱻾ܾ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
uint8_t MODH_ReadParam_03H(uint16_t _reg, uint16_t _num)
{
int32_t time1;
uint8_t i;
for (i = 0; i < NUM; i++)
{
MODH_Send03H (SlaveAddr, _reg, _num);
time1 = bsp_GetRunTime(); /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1> */
while (1)
{
bsp_Idle();
if (bsp_CheckRunTime(time1) > TIMEOUT)
{
break; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
if (g_tModH.fAck03H > 0)
{
break;
}
}
if (g_tModH.fAck03H > 0)
{
break;
}
}
if (g_tModH.fAck03H == 0)
{
return 0; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
else
{
return 1; /* д<><D0B4>03H<33><48><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> */
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_ReadParam_04H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>04<EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󣬵ȴ<EFBFBD><EFBFBD>ӻ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 1 <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0 <EFBFBD><EFBFBD>ʾʧ<EFBFBD>ܣ<EFBFBD>ͨ<EFBFBD>ų<EFBFBD>ʱ<EFBFBD>򱻾ܾ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
uint8_t MODH_ReadParam_04H(uint16_t _reg, uint16_t _num)
{
int32_t time1;
uint8_t i;
for (i = 0; i < NUM; i++)
{
MODH_Send04H (SlaveAddr, _reg, _num);
time1 = bsp_GetRunTime(); /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1> */
while (1)
{
bsp_Idle();
if (bsp_CheckRunTime(time1) > TIMEOUT)
{
break; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
if (g_tModH.fAck04H > 0)
{
break;
}
}
if (g_tModH.fAck04H > 0)
{
break;
}
}
if (g_tModH.fAck04H == 0)
{
return 0; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
else
{
return 1; /* 04H <20><><EFBFBD>ɹ<EFBFBD> */
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_WriteParam_05H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>05<EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󣬵ȴ<EFBFBD><EFBFBD>ӻ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 1 <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0 <EFBFBD><EFBFBD>ʾʧ<EFBFBD>ܣ<EFBFBD>ͨ<EFBFBD>ų<EFBFBD>ʱ<EFBFBD>򱻾ܾ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
uint8_t MODH_WriteParam_05H(uint16_t _reg, uint16_t _value)
{
int32_t time1;
uint8_t i;
for (i = 0; i < NUM; i++)
{
MODH_Send05H (SlaveAddr, _reg, _value);
time1 = bsp_GetRunTime(); /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1> */
while (1)
{
bsp_Idle();
/* <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> TIMEOUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>쳣 */
if (bsp_CheckRunTime(time1) > TIMEOUT)
{
break; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
if (g_tModH.fAck05H > 0)
{
break;
}
}
if (g_tModH.fAck05H > 0)
{
break;
}
}
if (g_tModH.fAck05H == 0)
{
return 0; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
else
{
return 1; /* 05H д<>ɹ<EFBFBD> */
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_WriteParam_06H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>06<EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󣬵ȴ<EFBFBD><EFBFBD>ӻ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD>NUM<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 1 <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0 <EFBFBD><EFBFBD>ʾʧ<EFBFBD>ܣ<EFBFBD>ͨ<EFBFBD>ų<EFBFBD>ʱ<EFBFBD>򱻾ܾ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
uint8_t MODH_WriteParam_06H(uint16_t _reg, uint16_t _value)
{
int32_t time1;
uint8_t i;
for (i = 0; i < NUM; i++)
{
MODH_Send06H (SlaveAddr, _reg, _value);
time1 = bsp_GetRunTime(); /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1> */
while (1)
{
bsp_Idle();
if (bsp_CheckRunTime(time1) > TIMEOUT)
{
break;
}
if (g_tModH.fAck06H > 0)
{
break;
}
}
if (g_tModH.fAck06H > 0)
{
break;
}
}
if (g_tModH.fAck06H == 0)
{
return 0; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
else
{
return 1; /* д<><D0B4>06H<36><48><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> */
}
}
/*
*********************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: MODH_WriteParam_10H
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󣬵ȴ<EFBFBD><EFBFBD>ӻ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD>NUM<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: 1 <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>0 <EFBFBD><EFBFBD>ʾʧ<EFBFBD>ܣ<EFBFBD>ͨ<EFBFBD>ų<EFBFBD>ʱ<EFBFBD>򱻾ܾ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************************************************************
*/
uint8_t MODH_WriteParam_10H(uint16_t _reg, uint8_t _num, uint8_t *_buf)
{
int32_t time1;
uint8_t i;
for (i = 0; i < NUM; i++)
{
MODH_Send10H(SlaveAddr, _reg, _num, _buf);
time1 = bsp_GetRunTime(); /* <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>͵<EFBFBD>ʱ<EFBFBD><CAB1> */
while (1)
{
bsp_Idle();
if (bsp_CheckRunTime(time1) > TIMEOUT)
{
break;
}
if (g_tModH.fAck10H > 0)
{
break;
}
}
if (g_tModH.fAck10H > 0)
{
break;
}
}
if (g_tModH.fAck10H == 0)
{
return 0; /* ͨ<>ų<EFBFBD>ʱ<EFBFBD><CAB1> */
}
else
{
return 1; /* д<><D0B4>10H<30><48><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> */
}
}
/***************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> www.armfly.com (END OF FILE) *********************************/