NMEA 2000 Shield

I replied that, but can not see my reply.

As default DallasTemperature library does everything with delays. When it sends "measure temperature" command to 1-wire bus, it then waits with delay until sensors has done temeperature measurement. For 12-bit DS18S20 that tkaes 700 ms, which means that you will not call NMEA2000.ParseMessages during that time. So you may miss some important requests from other devices and they may then drop you from the list. And when you send your temperature data to bus, they will see you and request your information again. This may lead to situation that your device will pop off/on on some MFD:s.

You can also use DallasTemperature library in async mode. Then it just sends the request and you can keep your own timer and after 700 ms start to read values. Also if you have several sensors, it is best to read them one by one on each loop round, since each read takes about 10 ms. Then you will not stop loop more that 10 ms and other tasks will be served.

If you will do lot of other things, even that delay is not good. I ended up to use DS2482-100 1-wire line driver, which does 1-wire timing for me. With that I used Teensy ic2_t3 library, which allows me asynchronous i2c communication. Finnally the code very little in total for reading temperatures.