984 lines
26 KiB
C
984 lines
26 KiB
C
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
*
|
|||
|
|
* ģ<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>01Hָ<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>02Hָ<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>03Hָ<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>04Hָ<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>05Hָ<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>06Hָ<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>10Hָ<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>01Hָ<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>02Hָ<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>04Hָ<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>05Hָ<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>06Hָ<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>03Hָ<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>10Hָ<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)
|
|||
|
|
{
|
|||
|
|
/*
|
|||
|
|
10Hָ<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>01Hָ<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>02Hָ<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>03Hָ<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>04Hָ<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>05Hָ<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>06Hָ<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>10Hָ<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) *********************************/
|
|||
|
|
|