debevv / nanoMODBUS

A compact MODBUS RTU/TCP C library for embedded/microcontrollers
MIT License
234 stars 47 forks source link

Timing #29

Open AliMoal opened 1 year ago

AliMoal commented 1 year ago

how this library handles 1.5 or 3.5 character times according to Modbus over Serial Line document?

debevv commented 1 year ago

Hi, basically it doesn't. It behaves similarly to libmodbus (https://github.com/stephane/libmodbus/commit/a11805cbfda23da36aed84bca3c5edc1413d664c and https://github.com/stephane/libmodbus/issues/18). We addressed this some time ago with another user in this issue.
I thought about implementing it at the time, but it would make the library more complex both internally and for the user. Also in my experience I never found a device honoring those timings, so having the library not rely on them makes it definitely more robust.
Would you mind explaining me your use case?

AliMoal commented 1 year ago

Actually, I want to use this library to communicate with PLC devices, I don't have any idea this lack of timing may cause problem or not.

AliMoal commented 1 year ago

As I see in here, libmodbus library handles those timings.

debevv commented 1 year ago

Sorry, can you point me to the exact line? Because I can't find it in the linked file.
By the way, if those PLC devices do follow the spec about the timings, there are two cases:

AliMoal commented 1 year ago

I guess line 1277. Could you show me how to implement Write() function? I'll use this library and see there is any problem or not.

debevv commented 1 year ago

Yeah after reading my previous message again I realized that the t1,5 in the spec is not mandatory inter-character spacing but instead a timeout, so you really don't need any particular handling in your write() function.
The only things you should implement are the waits before requests and responses, to simulate inter-frame spacing