salve
sti cercando una libreria modbus rtu funzionante per esp8266 in modalita slave per scrittura multi registers (fc16) ne ho provate alcune ma non mi funzionano
grazie
salve
sti cercando una libreria modbus rtu funzionante per esp8266 in modalita slave per scrittura multi registers (fc16) ne ho provate alcune ma non mi funzionano
grazie
ciao,
se usi il classico max485 con i comandi di "invio" e "ricezione" può essere che l'ESP32 scambi tra invio e ricezione prima che tutti i byte siano usciti...metti un delay di 1-2 ms prima di fare lo scambio tra invio e ricezione...io ho risolto usando i moduli con max3485 che non necessitano dei due comandi.
che libreria hai usato?
di solito uso QUESTA
ORSO2001:
di solito uso [QUESTA](GitHub - 4-20ma/ModbusMaster: Enlighten your Arduino to be a Modbus master)
anche io uso questa per il master ma per lo slave cosa usi? il problema l'ho nello slave
uso questa GitHub - yaacov/ArduinoModbusSlave: Modbus slave library for Arduino
quando vado a compilare mi da un errore per esp8622 mi dice che non è compatibile mi da questo errore
ModbusSlave.h:132:43: error: 'SERIAL_BUFFER_SIZE' was not declared in this scope
int _serialTransmissionBufferLength = SERIAL_BUFFER_SIZE;
ok...molto probabilmente l'ESP8266 non ha difinito il buffer della seriale con quel nome...
nel file ModbusSlave.h della libreria cambia queste righe:
#if defined(SERIAL_TX_BUFFER_SIZE)
int _serialTransmissionBufferLength = SERIAL_TX_BUFFER_SIZE;
#else
int _serialTransmissionBufferLength = SERIAL_BUFFER_SIZE;
#endif
con:
#if defined(SERIAL_TX_BUFFER_SIZE)
int _serialTransmissionBufferLength = SERIAL_TX_BUFFER_SIZE;
#else
int _serialTransmissionBufferLength = 128;
#endif
l'esp8266 has 128 byte di default sia per rx che per tx
provo grazie
ho paura che la libreria non funzioni non eps32 ora dopo la modifica mi da tantissimi altri errori
alternative?
quali?
comunque ce ne sono diverse...una è QUESTA che fa sia master che slave
ORSO2001:
comunque ce ne sono diverse...una è QUESTA che fa sia master che slave
si l'ho vista anche io ma non lho capita come funziona sui comandi modbus standard read coil, write coils, ecc
come errori sono questi
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp: In member function 'void Modbus::begin(uint64_t)':
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:191:53: error: 'class Stream' has no member named 'availableForWrite'
_serialTransmissionBufferLength = _serialStream.availableForWrite();
^
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp: In member function 'bool Modbus::readRequest()':
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:544:74: error: no matching function for call to 'min(uint16_t&, int)'
length = min(length, MODBUS_MAX_BUFFER - _requestBufferLength);
^
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:544:74: note: candidates are:
In file included from c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:62:0,
from C:\Users\Simone\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:255,
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.h:20,
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:20:
c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algo.h:4226:5: note: template<class _Tp, class _Compare> _Tp std::min(std::initializer_list<_Tp>, _Compare)
min(initializer_list<_Tp> __l, _Compare __comp)
^
c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algo.h:4226:5: note: template argument deduction/substitution failed:
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:544:74: note: mismatched types 'std::initializer_list<_Tp>' and 'short unsigned int'
length = min(length, MODBUS_MAX_BUFFER - _requestBufferLength);
^
In file included from c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:62:0,
from C:\Users\Simone\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:255,
from G:\SIMONREEF CONTROLLER\ARDUINO INSTALLATO\Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.h:20,
from G:\SIMONREEF CONTROLLER\ARDUINO INSTALLATO\Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:20:
c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algo.h:4221:5: note: template<class _Tp> _Tp std::min(std::initializer_list<_Tp>)
min(initializer_list<_Tp> __l)
^
c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algo.h:4221:5: note: template argument deduction/substitution failed:
G:\SIMONREEF CONTROLLER\ARDUINO INSTALLATO\Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:544:74: note: mismatched types 'std::initializer_list<_Tp>' and 'short unsigned int'
length = min(length, MODBUS_MAX_BUFFER - _requestBufferLength);
^
In file included from c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:61:0,
from C:\Users\Simone\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:255,
from G:\SIMONREEF CONTROLLER\ARDUINO INSTALLATO\Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.h:20,
from G:\SIMONREEF CONTROLLER\ARDUINO INSTALLATO\Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:20:
c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algobase.h:239:5: note: template<class _Tp, class _Compare> const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
min(const _Tp& __a, const _Tp& __b, _Compare __comp)
^
c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algobase.h:239:5: note: template argument deduction/substitution failed:
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:544:74: note: deduced conflicting types for parameter 'const _Tp' ('short unsigned int' and 'int')
length = min(length, MODBUS_MAX_BUFFER - _requestBufferLength);
^
In file included from c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:61:0,
from C:\Users\Simone\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:255,
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.h:20,
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:20:
c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algobase.h:193:5: note: template<class _Tp> const _Tp& std::min(const _Tp&, const _Tp&)
min(const _Tp& __a, const _Tp& __b)
^
c:\users\simone\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algobase.h:193:5: note: template argument deduction/substitution failed:
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:544:74: note: deduced conflicting types for parameter 'const _Tp' ('short unsigned int' and 'int')
length = min(length, MODBUS_MAX_BUFFER - _requestBufferLength);
^
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp: In member function 'uint16_t Modbus::writeResponse()':
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:919:27: error: 'class Stream' has no member named 'availableForWrite'
_serialStream.availableForWrite(),
^
Arduino\libraries\ArduinoModbusSlave-master\src\ModbusSlave.cpp:933:27: error: 'class Stream' has no member named 'availableForWrite'
if (_serialStream.availableForWrite() < _serialTransmissionBufferLength)
^
exit status 1
Errore durante la compilazione per la scheda NodeMCU 1.0 (ESP-12E Module).
ok...facendo una veloce ricerca con San google si trovano un po' di cose su ESP8266 e la "availableForWrite"...quindi ho fatto un'altra ricerca per verificare se c'era una libreria modbus per ESP8266 ed ho trovato QUESTA.
Fa sia da master che slave...
Scusa se mi intrometto: hai guardato i video di paolo Aliverti sull'uso della libreria Modbus con arduino?
Sono risolutivi e anche ben fatti !
si li ho visti e sto gia usando arduino con modbus ma ora mi erse sul esp8266
ORSO2001:
ok...facendo una veloce ricerca con San google si trovano un po' di cose su ESP8266 e la "availableForWrite"...quindi ho fatto un'altra ricerca per verificare se c'era una libreria modbus per ESP8266 ed ho trovato QUESTA.
Fa sia da master che slave...
si ho provato anche questa ma non capisco come fare con la funzione write multi reg di modbus
birrohgt:
si li ho visti e sto gia usando arduino con modbus ma ora mi erse sul esp8266
Io uso quelle librerie su WeMos (LOLIN D1 PRO) da diversi mesi, senza problemi.
a me in fare di compilazione da errori che ho messo prima anche un esempio della libreria
come hai fatto?
birrohgt:
salvesti cercando una libreria modbus rtu funzionante per esp8266 in modalita slave per scrittura multi registers (fc16) ne ho provate alcune ma non mi funzionano
grazie
Ripartiamo dall'inizio (scusa, ero in vacanza su un'isola vicina) e dimmi se hai provato la libreria dei video di Aliverti. Poi vediamo le istruzioni o gli esempi con la libreria.
si ho usato quella libreria per arduino mega e funziona bene
ma non funziona su esp8266
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.