00001 /* 00002 * File: modbus.h 00003 * 00004 * Notes: This file includes a number of defines and structures for generating 00005 * modbus messages. Note that the structures are packed. 00006 * 00007 * Author: Mark Rivers 00008 */ 00009 00010 #ifndef MODBUS_H 00011 #define MODBUS_H 00012 00013 /* Modbus function codes */ 00014 #define MODBUS_READ_COILS 0x01 00015 #define MODBUS_READ_DISCRETE_INPUTS 0x02 00016 #define MODBUS_READ_HOLDING_REGISTERS 0x03 00017 #define MODBUS_READ_INPUT_REGISTERS 0x04 00018 #define MODBUS_WRITE_SINGLE_COIL 0x05 00019 #define MODBUS_WRITE_SINGLE_REGISTER 0x06 00020 #define MODBUS_WRITE_MULTIPLE_COILS 0x0F 00021 #define MODBUS_WRITE_MULTIPLE_REGISTERS 0x10 00022 00023 #define MODBUS_EXCEPTION_FCN 0x80 00024 00025 #define MAX_MODBUS_FRAME_SIZE 600 /* Buffer size for input and output packets. 00026 * 513 (max for ASCII serial) should be enough, 00027 * but we are being safe. */ 00028 00029 00030 /* Pack all structures defined here on 1-byte boundaries */ 00031 #pragma pack(1) 00032 00033 /* All Modbus messages over TCP/IP are preceeded by the MBAP header */ 00034 00035 typedef struct modbusMBAPHeader_str 00036 { 00037 unsigned short transactId; 00038 unsigned short protocolType; 00039 unsigned short cmdLength; 00040 } modbusMBAPHeader; 00041 00042 00043 /*---------------------------------------------*/ 00044 /* structure definitions for Modbus requests */ 00045 /*---------------------------------------------*/ 00046 00047 typedef struct modbusReadRequest_str 00048 { 00049 unsigned char slave; 00050 unsigned char fcode; 00051 unsigned short startReg; 00052 unsigned short numRead; 00053 } modbusReadRequest; 00054 00055 typedef struct modbusReadResponse_str 00056 { 00057 unsigned char fcode; 00058 unsigned char byteCount; 00059 unsigned char data[1]; 00060 } modbusReadResponse; 00061 00062 typedef struct modbusWriteSingleRequest_str 00063 { 00064 unsigned char slave; 00065 unsigned char fcode; 00066 unsigned short startReg; 00067 unsigned short data; 00068 } modbusWriteSingleRequest; 00069 00070 00071 typedef struct modbusWriteSingleResponse_str 00072 { 00073 unsigned char fcode; 00074 unsigned short startReg; 00075 unsigned short data; 00076 } modbusWriteSingleResponse; 00077 00078 typedef struct modbusWriteMultipleRequest_str 00079 { 00080 unsigned char slave; 00081 unsigned char fcode; 00082 unsigned short startReg; 00083 unsigned short numOutput; 00084 unsigned char byteCount; 00085 unsigned char data[1]; 00086 } modbusWriteMultipleRequest; 00087 00088 00089 typedef struct modbusWriteMultipleResponse_str 00090 { 00091 unsigned char fcode; 00092 unsigned short startReg; 00093 unsigned short numOutput; 00094 } modbusWriteMultipleResponse; 00095 00096 typedef struct modbusExceptionResponse_str 00097 { 00098 unsigned char fcode; 00099 unsigned char exception; 00100 } modbusExceptionResponse; 00101 00102 /* Revert to packing that was in effect when compilation started */ 00103 #pragma pack() 00104 00105 #endif