Comments (14)
No, you can add a Modbus::setSlaveID
function to update the unitID
private var [1] [2].
[1] https://github.com/yaacov/ArduinoModbusSlave/blob/master/src/ModbusSlave.cpp#L43
[2] https://github.com/yaacov/ArduinoModbusSlave/blob/master/src/ModbusSlave.h#L93
from arduinomodbusslave.
p.s
a pull request is welcome :-)
from arduinomodbusslave.
Hello. You do not understand me ... :( I would like to change the value of SLAVE_ID during program operation
from arduinomodbusslave.
This is not the fault of the library, but the lack of my knowledge of arduino ..
from arduinomodbusslave.
I would like the program to read the SLAVE_ID from the EEPROM memory and then run the Modbus slave (SLAVE_ID, CTRL_PIN); How can I run Modbus slave (SLAVE_ID, CTRL_PIN) in Void Setup or Void Loop?
from arduinomodbusslave.
No, the slave-id is set in the constructor [1]
Once it is set, it can not be changed. If you add a new method to the Modbus
class [2] that update the private unitID
var [3], you will be able to change the unit id (that was set by SLAVE_ID in the constructor) while program is running ( e.g. inside loop or setup)
[1] https://github.com/yaacov/ArduinoModbusSlave/blob/master/examples/simple/simple.ino#L38
[2] https://github.com/yaacov/ArduinoModbusSlave/blob/master/src/ModbusSlave.h#L73
[3] https://github.com/yaacov/ArduinoModbusSlave/blob/master/src/ModbusSlave.h#L93
an example of such a method:
/**
* Set Unit ID of modbus object.
*
* @param unitID the modbus slave id.
*/
void Modbus::setUnitID(uint8_t _unitID)
{
// set modbus slave unit id
unitID = _unitID;
}
from arduinomodbusslave.
Changing CTRL_PIN is more tricky :-) , the easiest way is to create a new modbus object with a new Serial stream [1] and a new ctrl pin.
Check carefully that you must get the ctrl_pin at runtime, it may get a little interesting if you have little experience with arduino.
[1] https://github.com/yaacov/ArduinoModbusSlave/blob/master/src/ModbusSlave.cpp#L39
from arduinomodbusslave.
In ModbusSlave.h i change:
`class Modbus {
public:
Modbus(uint8_t unitID, int ctrlPin);
Modbus(Stream &serial, uint8_t unitID, int ctrlPin);
void begin(unsigned long boud);
int poll();
int readCoilFromBuffer(int offset);
uint16_t readRegisterFromBuffer(int offset);
void writeCoilToBuffer(int offset, int state);
void writeRegisterToBuffer(int offset, uint16_t value);
uint8_t writeStringToBuffer(int offset, uint8_t *str, uint8_t length);
CallBackFunc cbVector[CB_MAX];
void Modbus::setUnitID(uint8_t _unitID)
{
// set modbus slave unit id
unitID = _unitID;
}
private:
Stream &serial;
uint32_t timeout;
uint32_t last_receive_time;
uint16_t calcCRC(uint8_t *buf, int length);
int ctrlPin = -1;
uint8_t unitID;
uint8_t lengthIn;
uint8_t bufIn[MAX_BUFFER];
uint8_t bufOut[MAX_BUFFER];
};
#endif
`
This is ok?
from arduinomodbusslave.
it's nicer to add the function in the xxx.c
file, and only the header void setUnitID(uint8_t _unitID);
in the xxx.h
file
from arduinomodbusslave.
`
#define CTRL_PIN 4
#define BAUDRATE 9600
#define SLAVE_ID 5
Modbus slave(SLAVE_ID, CTRL_PIN);
void setup()
{
SLAVE_ID = 12; //how i can change? This is no good.. :(
.
.
.
}
`
from arduinomodbusslave.
any ideas?
from arduinomodbusslave.
once you have the setUnitID
method header defined in the .h
and body defined in the .c
file you can call it slave.setUnitID(12)
from arduinomodbusslave.
Thank you very much.
Everything works :)
Happy New Year!
from arduinomodbusslave.
Happy New Year!
Happy New Year 🎉 🎈
from arduinomodbusslave.
Related Issues (20)
- ModBusSlave delivers bytes instead of words on FC03 How to fix ? HOT 4
- Strange behiavor on slave using write single register HOT 9
- Stuck when calling flush() in begin() when using Serial1 in Arduino MKR(Zero) HOT 2
- Not working with I2C communication HOT 9
- Enable / disable communication HOT 2
- Arduino Mudbus RTU for MASTER to read/write for multi slave ?
- change Slave_ID in void setup() HOT 2
- Put data in a specific address HOT 1
- using a modbus master simulator software with this library HOT 10
- Exception Response , Illegal Data Address HOT 1
- linux modpoll HOT 1
- Change SLAVE ADDRESS during void setup HOT 1
- Hello how can i read data from 40001 HOT 1
- hi i am getting modbus poll pc application timeout error Could you please help me HOT 1
- Modbus Slave RP2 HOT 2
- 怎么设置 数据位 停止位
- Arduino Pro Micro
- Create new release HOT 4
- ESP32 Support HOT 8
- Character silent interval issue and Buffer overrun HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from arduinomodbusslave.