initial
This commit is contained in:
96
Mudbus.h
Normal file
96
Mudbus.h
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
Mudbus.h - an Arduino library for a Modbus TCP slave.
|
||||
Copyright (C) 2011 Dee Wykoff
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
//#define MbDebug
|
||||
|
||||
// For Arduino 0022
|
||||
// #include "WProgram.h"
|
||||
// For Arduino 1.0
|
||||
#include "Arduino.h"
|
||||
|
||||
#include <SPI.h>
|
||||
#include <WiFi.h>
|
||||
|
||||
#ifndef Mudbus_h
|
||||
#define Mudbus_h
|
||||
|
||||
#define MbDebug
|
||||
|
||||
#define MB_N_R 125 //Max 16 bit registers for Modbus is 125
|
||||
#define MB_N_C 128 //Max coils for Modbus is 2000 - dont need that many so here is a multiple of 8
|
||||
#define MB_PORT 502
|
||||
|
||||
enum MB_FC {
|
||||
MB_FC_NONE = 0,
|
||||
MB_FC_READ_COILS = 1,
|
||||
MB_FC_READ_REGISTERS = 3,
|
||||
MB_FC_WRITE_COIL = 5,
|
||||
MB_FC_WRITE_REGISTER = 6,
|
||||
//Function codes 15 & 16 by Martin Pettersson http://siamect.com
|
||||
MB_FC_WRITE_MULTIPLE_COILS = 15,
|
||||
MB_FC_WRITE_MULTIPLE_REGISTERS = 16
|
||||
};
|
||||
|
||||
class Mudbus
|
||||
{
|
||||
public:
|
||||
Mudbus();
|
||||
void Run();
|
||||
int R[MB_N_R];
|
||||
bool C[MB_N_C];
|
||||
bool Active;
|
||||
unsigned long PreviousActivityTime;
|
||||
int Runs, Reads, Writes;
|
||||
private:
|
||||
uint8_t ByteArray[260];
|
||||
MB_FC FC;
|
||||
void SetFC(int fc);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/* Speculations on Modbus message structure:
|
||||
**********************************************
|
||||
**********Master(PC) request frames***********
|
||||
00 ID high 0
|
||||
01 ID low 1
|
||||
02 Protocol high 0
|
||||
03 Protocol low 0
|
||||
04 Message length high 0
|
||||
05 Message length low 6 (6 bytes after this)
|
||||
06 Slave number 1
|
||||
07 Function code
|
||||
08 Start address high maybe 0
|
||||
09 Start address low maybe 0
|
||||
10 Length high maybe 125 or Data high if write
|
||||
11 Length low maybe 125 or Data low if write
|
||||
**********************************************
|
||||
**********Slave(Arduino) response frames******
|
||||
00 ID high echo / 0
|
||||
01 ID low echo / slave ID 1
|
||||
02 Protocol high echo
|
||||
03 Protocol low echo
|
||||
04 Message length high echo
|
||||
05 Message length low num bytes after this
|
||||
06 Slave number echo
|
||||
07 Function code echo
|
||||
08 Start address high num bytes of data
|
||||
09 Data high
|
||||
10 Data low
|
||||
**********************************************
|
||||
*/
|
Reference in New Issue
Block a user