ModbusTCP Light This version utilize lwIP library with the minimal implementation of Modbus TCP. Error processing hasn\\\'t been implemented yet.
mbtcp.h@1:59cee932f289, 2012-03-16 (annotated)
- Committer:
- paleskyjp
- Date:
- Fri Mar 16 08:38:12 2012 +0000
- Revision:
- 1:59cee932f289
- Parent:
- 0:8ee5ec4bcec2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
paleskyjp | 0:8ee5ec4bcec2 | 1 | /* |
paleskyjp | 0:8ee5ec4bcec2 | 2 | * FreeModbus Libary: BARE Port |
paleskyjp | 0:8ee5ec4bcec2 | 3 | * Copyright (C) 2006 Christian Walter <wolti@sil.at> |
paleskyjp | 0:8ee5ec4bcec2 | 4 | * |
paleskyjp | 0:8ee5ec4bcec2 | 5 | * This library is free software; you can redistribute it and/or |
paleskyjp | 0:8ee5ec4bcec2 | 6 | * modify it under the terms of the GNU Lesser General Public |
paleskyjp | 0:8ee5ec4bcec2 | 7 | * License as published by the Free Software Foundation; either |
paleskyjp | 0:8ee5ec4bcec2 | 8 | * version 2.1 of the License, or (at your option) any later version. |
paleskyjp | 0:8ee5ec4bcec2 | 9 | * |
paleskyjp | 0:8ee5ec4bcec2 | 10 | * This library is distributed in the hope that it will be useful, |
paleskyjp | 0:8ee5ec4bcec2 | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
paleskyjp | 0:8ee5ec4bcec2 | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
paleskyjp | 0:8ee5ec4bcec2 | 13 | * Lesser General Public License for more details. |
paleskyjp | 0:8ee5ec4bcec2 | 14 | * |
paleskyjp | 0:8ee5ec4bcec2 | 15 | * You should have received a copy of the GNU Lesser General Public |
paleskyjp | 0:8ee5ec4bcec2 | 16 | * License along with this library; if not, write to the Free Software |
paleskyjp | 0:8ee5ec4bcec2 | 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
paleskyjp | 0:8ee5ec4bcec2 | 18 | * |
paleskyjp | 0:8ee5ec4bcec2 | 19 | * File: $Id: port.h,v 1.1 2006/08/22 21:35:13 wolti Exp $ |
paleskyjp | 0:8ee5ec4bcec2 | 20 | * |
paleskyjp | 0:8ee5ec4bcec2 | 21 | * modified by Yuji Hosogaya 3-16-2012 |
paleskyjp | 0:8ee5ec4bcec2 | 22 | * |
paleskyjp | 0:8ee5ec4bcec2 | 23 | * Originally this file was porttcp.c, then combined with other files |
paleskyjp | 0:8ee5ec4bcec2 | 24 | * in order to make a light version of Modbus TCP. |
paleskyjp | 0:8ee5ec4bcec2 | 25 | */ |
paleskyjp | 0:8ee5ec4bcec2 | 26 | |
paleskyjp | 0:8ee5ec4bcec2 | 27 | #ifndef __MB_TCP__ |
paleskyjp | 0:8ee5ec4bcec2 | 28 | #define __MB_TCP__ |
paleskyjp | 0:8ee5ec4bcec2 | 29 | |
paleskyjp | 0:8ee5ec4bcec2 | 30 | #include "mbed.h" |
paleskyjp | 0:8ee5ec4bcec2 | 31 | |
paleskyjp | 0:8ee5ec4bcec2 | 32 | #include "lwip/opt.h" |
paleskyjp | 0:8ee5ec4bcec2 | 33 | #include "lwip/stats.h" |
paleskyjp | 0:8ee5ec4bcec2 | 34 | #include "lwip/sys.h" |
paleskyjp | 0:8ee5ec4bcec2 | 35 | #include "lwip/pbuf.h" |
paleskyjp | 0:8ee5ec4bcec2 | 36 | #include "lwip/udp.h" |
paleskyjp | 0:8ee5ec4bcec2 | 37 | #include "lwip/tcp.h" |
paleskyjp | 0:8ee5ec4bcec2 | 38 | #include "lwip/dns.h" |
paleskyjp | 0:8ee5ec4bcec2 | 39 | #include "lwip/dhcp.h" |
paleskyjp | 0:8ee5ec4bcec2 | 40 | #include "lwip/init.h" |
paleskyjp | 0:8ee5ec4bcec2 | 41 | #include "lwip/netif.h" |
paleskyjp | 0:8ee5ec4bcec2 | 42 | #include "netif/etharp.h" |
paleskyjp | 0:8ee5ec4bcec2 | 43 | #include "netif/loopif.h" |
paleskyjp | 0:8ee5ec4bcec2 | 44 | |
paleskyjp | 0:8ee5ec4bcec2 | 45 | #include "device.h" |
paleskyjp | 0:8ee5ec4bcec2 | 46 | |
paleskyjp | 0:8ee5ec4bcec2 | 47 | typedef unsigned char BOOL; |
paleskyjp | 0:8ee5ec4bcec2 | 48 | |
paleskyjp | 0:8ee5ec4bcec2 | 49 | typedef unsigned char UCHAR; |
paleskyjp | 0:8ee5ec4bcec2 | 50 | typedef char CHAR; |
paleskyjp | 0:8ee5ec4bcec2 | 51 | |
paleskyjp | 0:8ee5ec4bcec2 | 52 | typedef unsigned short USHORT; |
paleskyjp | 0:8ee5ec4bcec2 | 53 | typedef short SHORT; |
paleskyjp | 0:8ee5ec4bcec2 | 54 | |
paleskyjp | 0:8ee5ec4bcec2 | 55 | typedef unsigned long ULONG; |
paleskyjp | 0:8ee5ec4bcec2 | 56 | typedef long LONG; |
paleskyjp | 0:8ee5ec4bcec2 | 57 | |
paleskyjp | 0:8ee5ec4bcec2 | 58 | |
paleskyjp | 0:8ee5ec4bcec2 | 59 | /*! \ingroup modbus |
paleskyjp | 0:8ee5ec4bcec2 | 60 | * \brief Errorcodes used by all function in the protocol stack. |
paleskyjp | 0:8ee5ec4bcec2 | 61 | */ |
paleskyjp | 0:8ee5ec4bcec2 | 62 | typedef enum |
paleskyjp | 0:8ee5ec4bcec2 | 63 | { |
paleskyjp | 0:8ee5ec4bcec2 | 64 | MB_ENOERR, /*!< no error. */ |
paleskyjp | 0:8ee5ec4bcec2 | 65 | MB_ENOREG, /*!< illegal register address. */ |
paleskyjp | 0:8ee5ec4bcec2 | 66 | MB_EINVAL, /*!< illegal argument. */ |
paleskyjp | 0:8ee5ec4bcec2 | 67 | MB_EPORTERR, /*!< porting layer error. */ |
paleskyjp | 0:8ee5ec4bcec2 | 68 | MB_ENORES, /*!< insufficient resources. */ |
paleskyjp | 0:8ee5ec4bcec2 | 69 | MB_EIO, /*!< I/O error. */ |
paleskyjp | 0:8ee5ec4bcec2 | 70 | MB_EILLSTATE, /*!< protocol stack in illegal state. */ |
paleskyjp | 0:8ee5ec4bcec2 | 71 | MB_ETIMEDOUT /*!< timeout error occurred. */ |
paleskyjp | 0:8ee5ec4bcec2 | 72 | } eMBErrorCode; |
paleskyjp | 0:8ee5ec4bcec2 | 73 | |
paleskyjp | 0:8ee5ec4bcec2 | 74 | typedef enum |
paleskyjp | 0:8ee5ec4bcec2 | 75 | { |
paleskyjp | 0:8ee5ec4bcec2 | 76 | MB_REG_READ, /*!< Read register values and pass to protocol stack. */ |
paleskyjp | 0:8ee5ec4bcec2 | 77 | MB_REG_WRITE /*!< Update register values. */ |
paleskyjp | 0:8ee5ec4bcec2 | 78 | } eMBRegisterMode; |
paleskyjp | 0:8ee5ec4bcec2 | 79 | |
paleskyjp | 0:8ee5ec4bcec2 | 80 | #ifndef TRUE |
paleskyjp | 0:8ee5ec4bcec2 | 81 | #define TRUE 1 |
paleskyjp | 0:8ee5ec4bcec2 | 82 | #endif |
paleskyjp | 0:8ee5ec4bcec2 | 83 | |
paleskyjp | 0:8ee5ec4bcec2 | 84 | #ifndef FALSE |
paleskyjp | 0:8ee5ec4bcec2 | 85 | #define FALSE 0 |
paleskyjp | 0:8ee5ec4bcec2 | 86 | #endif |
paleskyjp | 0:8ee5ec4bcec2 | 87 | |
paleskyjp | 0:8ee5ec4bcec2 | 88 | typedef struct _MB_STRUCT{ |
paleskyjp | 0:8ee5ec4bcec2 | 89 | UCHAR TID_H; |
paleskyjp | 0:8ee5ec4bcec2 | 90 | UCHAR TID_L; |
paleskyjp | 0:8ee5ec4bcec2 | 91 | UCHAR PID_H; |
paleskyjp | 0:8ee5ec4bcec2 | 92 | UCHAR PID_L; |
paleskyjp | 0:8ee5ec4bcec2 | 93 | UCHAR LEN_H; |
paleskyjp | 0:8ee5ec4bcec2 | 94 | UCHAR LEN_L; |
paleskyjp | 0:8ee5ec4bcec2 | 95 | UCHAR UID; |
paleskyjp | 0:8ee5ec4bcec2 | 96 | UCHAR FUNC; |
paleskyjp | 0:8ee5ec4bcec2 | 97 | UCHAR DATA; |
paleskyjp | 0:8ee5ec4bcec2 | 98 | }MB_STRUCT; |
paleskyjp | 0:8ee5ec4bcec2 | 99 | |
paleskyjp | 0:8ee5ec4bcec2 | 100 | typedef struct _MB_RIR_REQ{ |
paleskyjp | 0:8ee5ec4bcec2 | 101 | UCHAR ADDR_H; |
paleskyjp | 0:8ee5ec4bcec2 | 102 | UCHAR ADDR_L; |
paleskyjp | 0:8ee5ec4bcec2 | 103 | UCHAR LEN_H; |
paleskyjp | 0:8ee5ec4bcec2 | 104 | UCHAR LEN_L; |
paleskyjp | 0:8ee5ec4bcec2 | 105 | UCHAR DATA[1000]; |
paleskyjp | 0:8ee5ec4bcec2 | 106 | }MB_WORD_REQ; |
paleskyjp | 0:8ee5ec4bcec2 | 107 | |
paleskyjp | 0:8ee5ec4bcec2 | 108 | typedef struct _MB_RIR_RES{ |
paleskyjp | 0:8ee5ec4bcec2 | 109 | UCHAR BYTES; |
paleskyjp | 0:8ee5ec4bcec2 | 110 | UCHAR DATA; |
paleskyjp | 0:8ee5ec4bcec2 | 111 | }MB_WORD_RES; |
paleskyjp | 0:8ee5ec4bcec2 | 112 | |
paleskyjp | 0:8ee5ec4bcec2 | 113 | #define TO_USHORT(H,L) ((USHORT)(H<<8)|(USHORT)L) |
paleskyjp | 0:8ee5ec4bcec2 | 114 | #define GET_TID(p) (TO_USHORT(p->TID_H,p->TID_L)) |
paleskyjp | 0:8ee5ec4bcec2 | 115 | #define GET_PID(p) (TO_USHORT(p->PID_H,p->PID_L)) |
paleskyjp | 0:8ee5ec4bcec2 | 116 | #define GET_LEN(p) (TO_USHORT(p->LEN_H,p->LEN_L)) |
paleskyjp | 0:8ee5ec4bcec2 | 117 | #define GET_UID(p) (p->UID) |
paleskyjp | 0:8ee5ec4bcec2 | 118 | #define GET_FUNC(p) (p->FUNC) |
paleskyjp | 0:8ee5ec4bcec2 | 119 | #define GET_DATA_PTR(p) (&p->DATA) |
paleskyjp | 0:8ee5ec4bcec2 | 120 | |
paleskyjp | 0:8ee5ec4bcec2 | 121 | |
paleskyjp | 0:8ee5ec4bcec2 | 122 | #define SET_TID(p,W) p->TID_H=(W)>>8;p->TID_L=(W)&0xFF; |
paleskyjp | 0:8ee5ec4bcec2 | 123 | #define SET_PID(p,W) p->PID_H=(W)>>8;p->PID_L=(W)&0xFF; |
paleskyjp | 0:8ee5ec4bcec2 | 124 | #define SET_LEN(p,W) p->LEN_H=(W)>>8;p->LEN_L=(W)&0xFF; |
paleskyjp | 0:8ee5ec4bcec2 | 125 | #define SET_UID(p,B) p->UID_H=B; |
paleskyjp | 0:8ee5ec4bcec2 | 126 | #define SET_FUNC(p,B) p->FUNC=B; |
paleskyjp | 0:8ee5ec4bcec2 | 127 | |
paleskyjp | 0:8ee5ec4bcec2 | 128 | #define FC_RD_COILS 0x01 |
paleskyjp | 0:8ee5ec4bcec2 | 129 | #define FC_RD_DISC_INPUTS 0x02 |
paleskyjp | 0:8ee5ec4bcec2 | 130 | #define FC_RD_HOLDING_REGS 0x03 |
paleskyjp | 0:8ee5ec4bcec2 | 131 | #define FC_RD_INPUT_REGS 0x04 |
paleskyjp | 0:8ee5ec4bcec2 | 132 | #define FC_WR_SINGLE_COIL 0x05 |
paleskyjp | 0:8ee5ec4bcec2 | 133 | #define FC_WR_SINGLE_REG 0x06 |
paleskyjp | 0:8ee5ec4bcec2 | 134 | #define FC_WR_MULTI_COILS 0x0F |
paleskyjp | 0:8ee5ec4bcec2 | 135 | #define FC_WR_MULTI_REGS 0x10 |
paleskyjp | 0:8ee5ec4bcec2 | 136 | #define FC_RD_WR_MULTI_REGS 0x17 |
paleskyjp | 0:8ee5ec4bcec2 | 137 | |
paleskyjp | 0:8ee5ec4bcec2 | 138 | void mb_init(); |
paleskyjp | 0:8ee5ec4bcec2 | 139 | |
paleskyjp | 0:8ee5ec4bcec2 | 140 | eMBErrorCode eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs ); |
paleskyjp | 0:8ee5ec4bcec2 | 141 | eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode ); |
paleskyjp | 0:8ee5ec4bcec2 | 142 | eMBErrorCode eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode ); |
paleskyjp | 0:8ee5ec4bcec2 | 143 | eMBErrorCode eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete ); |
paleskyjp | 0:8ee5ec4bcec2 | 144 | |
paleskyjp | 0:8ee5ec4bcec2 | 145 | #endif |