455 lines
16 KiB
C
455 lines
16 KiB
C
|
|
|
|||
|
|
#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
|
|||
|
|
|
|||
|
|
|