optical/NxFuncs/modbus/modbus_tcp.h

455 lines
16 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#ifndef __MODBUS_TCP_H__
#define __MODBUS_TCP_H__
#include "config.h"
/*
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
__________________________________________________
| Modbus ADU |
|------------------------------------------------|
| MBAP | PDU |
|---------------------------------|--------------|
| <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><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>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<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><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>TCP<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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһʹ<EFBFBD><EFBFBD>0x00<EFBFBD><EFBFBD>0x01<EFBFBD><EFBFBD>
Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD>ֽڣ<EFBFBD><EFBFBD><EFBFBD>MODBUS Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD>Ϊ0x00<EFBFBD><EFBFBD>0x00
<EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>2<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><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>š<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>MODBUS MODBUS+<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>DZ<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>MODBUS<EFBFBD><EFBFBD>վ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>MODBUS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>MODBUS+<EFBFBD><EFBFBD>MODBUS<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>MODBUS<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>DZ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
Ŀ<EFBFBD><EFBFBD>IP<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><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>ַΪ1<EFBFBD><EFBFBD>247<EFBFBD><EFBFBD>10<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ0<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> TCP/IP <EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַѰַMODBUS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>MODBUS<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õġ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>ֵ0xFF<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>TCP/IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>MODBUS<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><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>IP<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><EFBFBD>IP<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>MODBUD PDU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>0xFF<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ<EFBFBD><EFBFBD>
ע<EFBFBD><EFBFBD>0Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MODBUS/TCP<EFBFBD>ֱ<EFBFBD><EFBFBD>ͨ<EFBFBD>š<EFBFBD>
MODBUS <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>PDU<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>׼ MODBUS RTU ȥ<EFBFBD><EFBFBD>CRCУ<EFBFBD><EFBFBD> <EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
*/
//------------------------------------------------------------------
#define LEN_MBAP 7
#define MAX_RD_REG_NUMS 125
#define MAX_WR_REG_NUMS 123
#define MAX_MBDAT MAX_RD_REG_NUMS
#define MAX_LEN_PDU (1+MAX_MBDAT*2)
#define MAX_RD_BIT_NUMS (MAX_RD_REG_NUMS*16)
#define MAX_WR_BIT_NUMS (MAX_WR_REG_NUMS*16)
#define LEN_ERR_ANSWER (LEN_MBAP + 2)
//------------------------------------------------------------------
typedef union
{
u8 datbuff[LEN_MBAP+MAX_LEN_PDU]; // dat buff <20><>ʽ
struct
{
// MBAP
u8 mbap[LEN_MBAP];
// MODBUS PDU
u8 pdu[MAX_LEN_PDU]; // <20><><EFBFBD><EFBFBD>
} __attribute__ ((packed)) mbappdu; // ͨ<>÷<EFBFBD>ʽ
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // <20><><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 data[MAX_MBDAT]; // <20><><EFBFBD><EFBFBD>
} __attribute__ ((packed)) normal; // ͨ<>÷<EFBFBD>ʽ
// <20><><EFBFBD><EFBFBD>Ȧ(<28><>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) 0x01 <20><><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x02
/*
<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>2000 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PDU <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-16 Ϊ0-15<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= ON <EFBFBD><EFBFBD>0= OFF<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<EFBFBD>LSB<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><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><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>
*/
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x01 <20><> 0x02
u16 bitBegAddr; // λ<><CEBB>ʼ<EFBFBD><CABC>ַ 0x0000<30><30>0xFFFF
u16 bitsNum; // λ<><CEBB><EFBFBD><EFBFBD> 1<><31>2000<30><30>0x7D0<44><30>
} __attribute__ ((packed)) readBitsStatusRequest; // <20><>ȡλ<C8A1><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 acmd; // <20><>ȷӦ<C8B7><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x01 <20><> 0x02
u8 bytes; // <20>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD> N = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/8<><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ô N=N+1
u8 bitsStatus[MAX_RD_BIT_NUMS/8]; // λ״̬,
} __attribute__ ((packed)) readBitsStatusAnswer; // <20><>ȡλ<C8A1><CEBB>Ӧ<EFBFBD><D3A6>
// <20><><EFBFBD><EFBFBD><EFBFBD>ּĴ<D6BC><C4B4><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>) 0x03 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> 0x04
/*
<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>PDU˵<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-16 Ϊ0-15<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><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>
*/
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x03 <20><> 0x04
u16 begAddr; // <20><>ʼ<EFBFBD><CABC>ַ (MSB) 0x0000<30><30>0xFFFF
u16 regsNum; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (MSB) 1<><31>125<32><35>0x7D<37><44>
} __attribute__ ((packed)) readRegisterRequest; // <20><>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 acmd; // <20><>ȷӦ<C8B7><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x03 <20><> 0x04
u8 bytes; // <20>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD> 2xN NΪ<4E><CEAA><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 regsValue[MAX_RD_REG_NUMS]; // <20><>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD>ں<EFBFBD> (MSB)
} __attribute__ ((packed)) readRegisterAnswer; // <20><>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ 0x05
/*
<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>ʹ<EFBFBD>øù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪON <EFBFBD><EFBFBD>OFF<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еij<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ON/OFF״̬<EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵFF 00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪON<EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ00 00 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪOFF<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>PDU˵<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 Ϊ0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧֵ<EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ON/OFF ״̬<EFBFBD><EFBFBD>
ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ0XFF00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȦΪON<EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ0X0000<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȦΪOFF<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>
*/
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x05
u16 bitBegAddr; // <20><>ʼ<EFBFBD><CABC>ַ 0x0000<30><30>0xFFFF
u8 bitValue; // λ<><CEBB>ֵ 0x00 <20><> 0xFF
} __attribute__ ((packed)) writeBitRequest; // дλ<D0B4><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 acmd; // <20><>ȷӦ<C8B7><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x05
u8 bitStatus; // λ<><CEBB>״̬ 0x00 <20><> 0xFF
} __attribute__ ((packed)) writeBitAnswer; // дλ<D0B4><CEBB>Ӧ<EFBFBD><D3A6>
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> 0x06
/*
<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>PDU ˵<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 Ϊ0<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>
*/
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x06
u16 regBegAddr; // <20><>ʼ<EFBFBD><CABC>ַ 0x0000<30><30>0xFFFF
u16 regValue; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ 0x0000 <20><> 0xFFFF
} __attribute__ ((packed)) writeRegisterRequest; // дλ<D0B4><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 acmd; // <20><>ȷӦ<C8B7><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x06
u16 regValue; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ 0x0000 <20><> 0xFFFF
} __attribute__ ((packed)) writeRegisterAnswer; // дλ<D0B4><CEBB>Ӧ<EFBFBD><D3A6>
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ 0x0F
/*
<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>ȦΪON <EFBFBD><EFBFBD>OFF<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PDU˵<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 Ϊ0<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>ON/OFF ״̬<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>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪON<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪOFF<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>
*/
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x05
u16 bitBegAddr; // <20><>ʼλ<CABC><CEBB>ַ 0x0000<30><30>0xFFFF
u16 bitsNum; // λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x0001<30><31>0x07B0<42><30>2000<30><30>
u8 bytes; // <20>ֽ<EFBFBD><D6BD><EFBFBD> N = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/8<><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ôN=N+1
u8 bitsArray[MAX_WR_BIT_NUMS/8]; // λ<><CEBB>ֵ<EFBFBD><D6B5>λ<EFBFBD><CEBB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>LSB
} __attribute__ ((packed)) writeBitArrayRequest; // дλ<D0B4><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 acmd; // <20><>ȷӦ<C8B7><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x05
u16 bitBegAddr; // <20><>ʼλ<CABC><CEBB>ַ 0x0000<30><30>0xFFFF
u16 bitsNum; // λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x0001<30><31>0x07B0<42><30>2000<30><30>
} __attribute__ ((packed)) writeBitArrayAnswer; // дλ<D0B4><CEBB>Ӧ<EFBFBD><D3A6>
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> 0x10
/*
<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>Լ120 <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><EFBFBD>ַ<EFBFBD>ͱ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x10
u16 regBegAddr; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>ַ 0x0000<30><30>0xFFFF
u16 regsNum; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x0001<30><31>0x007B<37><42>123<32><33>
u8 bytes; // <20>ֽ<EFBFBD><D6BD><EFBFBD> N = <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * 2
u16 regsArray[MAX_WR_REG_NUMS]; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>MSB
} __attribute__ ((packed)) writeRegArrayRequest; // дλ<D0B4><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 acmd; // <20><>ȷӦ<C8B7><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x05
u16 regBegAddr; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>ַ 0x0000<30><30>0xFFFF
u16 regsNum; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x0001<30><31>0x007B<37><42>123<32><33>
} __attribute__ ((packed)) writeRegArrayAnswer; // дλ<D0B4><CEBB>Ӧ<EFBFBD><D3A6>
/*
<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
// <20><>ȡ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD> 0x65
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 begAddr; // <20><>ʼ<EFBFBD><CABC>ַ
u16 subAddr; // <20>ӵ<EFBFBD>ַ
} __attribute__ ((packed)) readSubRegRequest; // <20>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 bytes; // <20>ֽ<EFBFBD><D6BD><EFBFBD> N = <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * 2
u16 subRegsArray[MAX_RD_REG_NUMS]; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>MSB
} __attribute__ ((packed)) readSubRegAnswer; // <20>Ӳ<EFBFBD><D3B2><EFBFBD>Ӧ<EFBFBD><D3A6>
// д<><D0B4><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD> 0x69
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 acmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x69
u16 regBegAddr; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>ַ 0x0000<30><30>0xFFFF
u16 subAddr; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ӵ<EFBFBD>ַ
u8 bytes; // <20>ֽ<EFBFBD><D6BD><EFBFBD> N = <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * 2
u16 subRegsArray[MAX_RD_REG_NUMS]; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>MSB ʵ<>ʼĴ<CABC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> N = (len - 6) / 2
} __attribute__ ((packed)) writeSubRegRequest; // <20>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 cmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 regBegAddr; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>ַ 0x0000<30><30>0xFFFF
u16 subAddr; // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ӵ<EFBFBD>ַ
} __attribute__ ((packed)) writeSubRegAnswer; // <20>Ӳ<EFBFBD><D3B2><EFBFBD>Ӧ<EFBFBD><D3A6>
struct
{
// MBAP
u16 transId; // <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>/<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>
u16 protId; // Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>MODBUS Э<><D0AD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>Ϊ0x00<30><30>0x00
u16 len; // ֡<><D6A1><EFBFBD>ȡ<EFBFBD>
u8 unitId; // <20><>Ԫ<EFBFBD><D4AA>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
// MODBUS PDU
u8 acmd; // <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+0x80
u8 errCode; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} __attribute__ ((packed)) answerError; // <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
} ModbusTcpADU;
/*
// MODBUS<55><53><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><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><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> | I/Oϵͳ<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> | 16<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | ֻ<EFBFBD><EFBFBD> | I/Oϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|-----------|-----------|-----------|---------------------------|
| <EFBFBD><EFBFBD><EFBFBD>ּĴ<EFBFBD><EFBFBD><EFBFBD> | 16<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><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|
*/
// MODBUS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define READ_COIL_STATUS 0x01 // <20><>ȡ<EFBFBD><C8A1>Ȧ״̬<D7B4><CCAC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ<EFBFBD><C8A6>
#define READ_INPUT_STATUS 0x02 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD>
#define READ_HOLDING_REGISTER 0x03 // <20><><EFBFBD><EFBFBD><EFBFBD>ּĴ<D6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
#define READ_INPUT_REGISTER 0x04 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
#define WRITE_SINGLE_COIL 0x05 // д<><D0B4><EFBFBD><EFBFBD>Ȧ<EFBFBD><C8A6><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ<EFBFBD><C8A6>
#define WRITE_SINGLE_REGISTER 0x06 // д<><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
#define WRITE_MULTIPLE_COIL 0x0F // д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ<EFBFBD><C8A6><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ<EFBFBD><C8A6>
#define WRITE_MULTIPLE_REGISTER 0x10 // д<><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
#define READ_FILE_RECORD 0x14 // <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ʣ<EFBFBD>
#define WRITE_FILE_RECORD 0x15 // д<>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ʣ<EFBFBD>
#define WRITE_MASK_REGISTER 0x16 // <20><><EFBFBD><EFBFBD>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
#define RW_MULTIPLE_REGISTER 0x17 // <20><><><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
#define READ_FILE_RECORD_SUBCODE 0x06 // <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ʣ<EFBFBD>
#define WRITE_FILE_RECORD_SUBCODE 0x06 // д<>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ʣ<EFBFBD>
// <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define READ_REGISTER_SUBPARA 0x65 // <20><>ȡ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
#define WRITE_REGISTER_SUBPARA 0x69 // д<><D0B4><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
// MODBUS TCP <20><EFBFBD><ECB3A3>
#define MODBUS_TCP_ERR01 0x01 // <20>Ƿ<EFBFBD><C7B7>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽⹦<CBBD><E2B9A6><EFBFBD><EFBFBD>
#define MODBUS_TCP_ERR02 0x02 // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>
#define MODBUS_TCP_ERR03 0x03 // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>
#define MODBUS_TCP_ERR04 0x04 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ִ<EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MODBUS_TCP_ERR05 0x05 // ȷ<><C8B7>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Գ<EFBFBD><D4B3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD>յ<EFBFBD>ȷ<EFBFBD>ϡ<EFBFBD>
#define MODBUS_TCP_ERR06 0x06 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>æ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>MODBUS<55><53><EFBFBD><EFBFBD>PDU<44><55><EFBFBD>ͻ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ͺ<EFBFBD>ʱ<EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MODBUS_TCP_ERR0A 0x0A // <20><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>, <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ġ<EFBFBD>
#define MODBUS_TCP_ERR0B 0x0B // <20><><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>, Ŀ<><C4BF><EFBFBD>豸û<E8B1B8><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECB3A3>Ϣ<EFBFBD><CFA2>
//------------------------------------------------------------------
//------------------------------------------------------------------
#ifndef MAX_MODBUS_TCP_NODE
#define MAX_MODBUS_TCP_NODE 0
#endif
//------------------------------------------------------------------
void InitModbusTcp(void);
void ModbusTcpServerRun(void);
// <20><><EFBFBD><EFBFBD>: д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
int ModbusTcpWriteRegs(int nidx, u16 addr, u16 * regAry, u16 nums);
u16 SwapHighLow(u16 data);
//------------------------------------------------------------------
#endif