Lazserial nebo synaser (součást synapse) jsou podle mě to nejlepší. Myslím, že mi víc vyhovoval právě ten synaser, ale už si nepamatuju na podrobnosti. Ve svých projektech používám oboje, asi podle toho, co bylo zrovna při ruce.
To je napojení na fyzickou vrstvu. Pak je potřeba něco udělat s tím protokolem. To jsem řešil celkem nedávno (přes RS232) a tehdy jsem se zaseknul na tom, že neumím počítat CRC-16, které je právě součástí těch zpráv (což od zařízení ho přinejhorším můžu ignorovat, ale ono se musí poslat i v dotazu). Teda moje hrátky byly v matlabu (tam se tyhle věci trochu líp ladí, tím, že to je prakticky interpreter), ale přenést to do lazarusu neni zase tak těžké. Takže jsem našel funkci na výpočet všech možných CRC (já jsem si myslel, že CRC8, 16, 32, 64 atd. je jednoznačné určení, ale ono tam je několik parametrů) mj. i něčeho, co je označené jako CRC-modbus, což by mělo být ono, ale zatím jsem to reálně nezkoušel.
To jestli přenos probíhá po TCP/IP, GPIB, Visa, USB, RS232 nebo čemkoliv jiném by nemělo udělat takový rozdíl, vždy něco posíláte a něco dostáváte. To se ideálně jen liší jak otevřít vstup a pak se s tím pracuje úplně stejně (ono to ale tak ideální je málokdy).
Nějaké knihovny přímo pro modbus jsou dostupné pro arduino (zase přepsat z toho céčka by to neměl být takový problém), to byl plán B (totiž vlatně původně plán A protože jsem je našel dřív, až pak mě napadlo hledat přímo funkci pro matlab). Pro lazarus jsem nějak ani nezkoušel hledat, počítám spíš s tím arduinem, až si s tím přestanu hrát v Matlabu.