mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-12-23 21:01:25 +01:00
updating
This commit is contained in:
parent
5a4b87846c
commit
5c40577703
@ -486,13 +486,16 @@ ModbusRTUMasterError ModbusRTUMaster::_translateCommError(ModbusRTUCommError com
|
||||
* Modbus implementation
|
||||
************************************************************/
|
||||
|
||||
|
||||
// Constructor for Modbus
|
||||
Modbus::Modbus(uint8_t busNo, HardwareSerial serial, unsigned long baud, uint16_t cycleTimeMS, int8_t transmitEnablePin) {
|
||||
_busNo = busNo;
|
||||
Modbus::Modbus(uint8_t busNo, HardwareSerial serial, unsigned long baud, uint16_t cycleTimeMS, int8_t _dePin) {
|
||||
|
||||
//serial.write("\002\004",2);
|
||||
ModbusRTUMaster _modbusmaster(serial, _dePin);
|
||||
_baud = baud;
|
||||
_serialD = &serial;
|
||||
_busNo = busNo;
|
||||
_cycleTime = cycleTimeMS * 1000UL; // convert from milliseconds to microseconds.
|
||||
_transmitEnablePin = transmitEnablePin;
|
||||
//if (_transmitEnablePin != VPIN_NONE) {
|
||||
//pinMode(_transmitEnablePin, OUTPUT);
|
||||
//ArduinoPins::fastWriteDigital(_transmitEnablePin, 0); // transmitter initially off
|
||||
@ -502,8 +505,9 @@ Modbus::Modbus(uint8_t busNo, HardwareSerial serial, unsigned long baud, uint16_
|
||||
//_modbusmaster.begin(baud);
|
||||
//DIAG(F("ModbusInit: %d %d"), _transmitEnablePin, _baud);
|
||||
// Add device to HAL device chain
|
||||
serial.begin(baud, SERIAL_8N1);
|
||||
IODevice::addDevice(this);
|
||||
|
||||
_modbusmaster.begin(baud, SERIAL_8N1);
|
||||
// Add bus to CMRIbus chain.
|
||||
_nextBus = _busList;
|
||||
_busList = this;
|
||||
@ -516,7 +520,6 @@ Modbus::Modbus(uint8_t busNo, HardwareSerial serial, unsigned long baud, uint16_
|
||||
// process any response data received.
|
||||
// When the slot time has finished, move on to the next device.
|
||||
void Modbus::_loop(unsigned long currentMicros) {
|
||||
|
||||
_currentMicros = currentMicros;
|
||||
|
||||
if (_currentNode == NULL) {
|
||||
@ -532,16 +535,18 @@ void Modbus::_loop(unsigned long currentMicros) {
|
||||
|
||||
uint8_t error;
|
||||
//error = _modbusmaster->writeMultipleHoldingRegisters(_currentNode->getNodeID(), 0, (uint16_t*) _currentNode->holdingRegisters, _currentNode->getNumHoldingRegisters());
|
||||
DIAG(F("ModbusHR: %d %d %d %s"), _currentNode->getNodeID(), 0, _currentNode->getNumHoldingRegisters(), errorStrings[error]);
|
||||
DIAG(F("ModbusHR: T%d F%d N%d %s"), _currentNode->getNodeID(), 0, _currentNode->getNumHoldingRegisters(), errorStrings[error]);
|
||||
|
||||
//error = _modbusmaster->writeMultipleCoils(_currentNode->getNodeID(), 0, (char*) _currentNode->coils, _currentNode->getNumCoils());
|
||||
error = _modbusmaster->writeMultipleCoils(_currentNode->getNodeID(), 0, (char*) _currentNode->coils, _currentNode->getNumCoils());
|
||||
DIAG(F("ModbusMC: T%d F%d N%d %s"), _currentNode->getNodeID(), 0, _currentNode->getNumCoils(), errorStrings[error]);
|
||||
|
||||
error = _modbusmaster->readDiscreteInputs(_currentNode->getNodeID(), 0, (char*) _currentNode->discreteInputs, _currentNode->getNumDiscreteInputs());
|
||||
//error = _modbusmaster->readDiscreteInputs(_currentNode->getNodeID(), 0, (char*) _currentNode->discreteInputs, _currentNode->getNumDiscreteInputs());
|
||||
DIAG(F("ModbusDI: T%d F%d N%d %s"), _currentNode->getNodeID(), 0, _currentNode->getNumDiscreteInputs(), errorStrings[error]);
|
||||
|
||||
//error = _modbusmaster->readInputRegisters(_currentNode->getNodeID(), 0, (uint16_t*) _currentNode->inputRegisters, _currentNode->getNumInputRegisters());
|
||||
DIAG(F("ModbusIR: %d %d %d %s"), _currentNode->getNodeID(), 0, _currentNode->getNumInputRegisters(), errorStrings[error]);
|
||||
DIAG(F("ModbusIR: T%d F%d N%d %s"), _currentNode->getNodeID(), 0, _currentNode->getNumInputRegisters(), errorStrings[error]);
|
||||
|
||||
|
||||
_currentNode = _currentNode->getNext();
|
||||
//delayUntil(_currentMicros + _cycleTime * 1000UL);
|
||||
}
|
||||
|
30
IO_Modbus.h
30
IO_Modbus.h
@ -199,10 +199,10 @@ public:
|
||||
if (checkNoOverlap(firstVpin, nPins)) new Modbusnode(firstVpin, nPins, busNo, nodeID, numCoils, numDiscreteInputs, numHoldingRegisters, numInputRegisters);
|
||||
}
|
||||
Modbusnode(VPIN firstVpin, int nPins, uint8_t busNo, uint8_t nodeID, uint8_t numCoils, uint8_t numDiscreteInputs, uint8_t numHoldingRegisters, uint8_t numInputRegisters);
|
||||
char *coils[100];
|
||||
char *discreteInputs[100];
|
||||
uint16_t *holdingRegisters[100];
|
||||
uint16_t *inputRegisters[100];
|
||||
char *coils[1968];
|
||||
char *discreteInputs[2000];
|
||||
uint16_t *holdingRegisters[123];
|
||||
uint16_t *inputRegisters[125];
|
||||
|
||||
uint8_t getNodeID() {
|
||||
return _nodeID;
|
||||
@ -304,7 +304,6 @@ private:
|
||||
uint8_t _busNo;
|
||||
|
||||
unsigned long _baud;
|
||||
int8_t _transmitEnablePin;
|
||||
Modbusnode *_nodeListStart = NULL, *_nodeListEnd = NULL;
|
||||
Modbusnode *_currentNode = NULL;
|
||||
|
||||
@ -319,20 +318,21 @@ private:
|
||||
unsigned long _byteTransmitTime; // time in us for transmission of one byte
|
||||
|
||||
static Modbus *_busList; // linked list of defined bus instances
|
||||
|
||||
|
||||
public:
|
||||
static void create(uint8_t busNo, HardwareSerial& serial, unsigned long baud, uint16_t cycleTimeMS=500, int8_t transmitEnablePin=0) {
|
||||
new Modbus(busNo, serial, baud, cycleTimeMS, transmitEnablePin);
|
||||
static void create(uint8_t busNo, HardwareSerial& serial, unsigned long baud, uint16_t cycleTimeMS=500, int8_t _dePin=0) {
|
||||
new Modbus(busNo, serial, baud, cycleTimeMS, _dePin);
|
||||
}
|
||||
HardwareSerial *_serialD;
|
||||
HardwareSerial *_serialD = nullptr;
|
||||
ModbusRTUMaster *_modbusmaster;
|
||||
|
||||
|
||||
// Device-specific initialisation
|
||||
void _begin() override {
|
||||
ModbusRTUMaster _modbusmaster(*_serialD, _transmitEnablePin, -1);
|
||||
_serialD->begin(_baud, SERIAL_8N1);
|
||||
//ModbusRTUMaster _modbusmaster(*_serialD, _transmitEnablePin, -1);
|
||||
|
||||
|
||||
//_serialD->println("test");
|
||||
_modbusmaster.begin(_baud, SERIAL_8N1);
|
||||
|
||||
#if defined(DIAG_IO)
|
||||
_display();
|
||||
#endif
|
||||
@ -343,7 +343,7 @@ public:
|
||||
|
||||
// Display information about the device
|
||||
void _display() override {
|
||||
DIAG(F("Modbus Configured on %d Vpins:%d-%d %S"), _transmitEnablePin, _firstVpin, _firstVpin+_nPins-1,
|
||||
DIAG(F("Modbus Configured on Vpins:%d-%d %S"), _firstVpin, _firstVpin+_nPins-1,
|
||||
_deviceState == DEVSTATE_FAILED ? F("OFFLINE") : F("OK"));
|
||||
}
|
||||
|
||||
@ -368,7 +368,7 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
Modbus(uint8_t busNo, HardwareSerial serial, unsigned long baud, uint16_t cycleTimeMS, int8_t transmitEnablePin);
|
||||
Modbus(uint8_t busNo, HardwareSerial serial, unsigned long baud, uint16_t cycleTimeMS, int8_t _dePin);
|
||||
|
||||
public:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user