ModbusTCP Light This version utilize lwIP library with the minimal implementation of Modbus TCP. Error processing hasn\\\'t been implemented yet.

Dependencies:   mbed lwip

Committer:
paleskyjp
Date:
Fri Mar 16 08:38:12 2012 +0000
Revision:
1:59cee932f289
Parent:
0:8ee5ec4bcec2

        

Who changed what in which revision?

UserRevisionLine numberNew 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