Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/etactica/lua-libmodbus
lua bindings to libmodbus
https://github.com/etactica/lua-libmodbus
libmodbus lua lua-bindings lua-libmodbus modbus
Last synced: 5 days ago
JSON representation
lua bindings to libmodbus
- Host: GitHub
- URL: https://github.com/etactica/lua-libmodbus
- Owner: etactica
- License: mit
- Created: 2016-04-27T12:47:03.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2022-12-02T11:53:39.000Z (about 2 years ago)
- Last Synced: 2024-06-19T10:11:55.658Z (7 months ago)
- Topics: libmodbus, lua, lua-bindings, lua-libmodbus, modbus
- Language: C
- Homepage:
- Size: 96.7 KB
- Stars: 28
- Watchers: 9
- Forks: 27
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: changelog
- License: LICENSE
Awesome Lists containing this project
README
lua-libmodbus
=============Lua bindings to [libmodbus](http://www.libmodbus.org/)
Parameters are mostly as per libmodbus documentation, but values are returned
directly, in tables, rather than in pointers and return codes. Instead of
a return code, you would get a lua style "nil, error_msg" return pair.Of particular relevance to modbus, is that tables are addressed with lua
style 1 based counting, but converted to zero based internally. ie:```
res = dev:read_registers(0x2000, 2)
print(#res) -- prints 2
print(res[1]) - prints register address 0x2000, _not_ 0x2001
```[API documentation](http://etactica.github.io/lua-libmodbus/) (Generated from last release)
Status
------* Client bindings for RTU/TCP and almost all operations.
* Some helpers for working with 16/32bit signed/unsigned and floats in multiple registers
(API is not necessarily nailed down, comments welcome)
* Server side limited to receive and reply exception.
Needs thoughts on how to handle the mapping objects.
* Compatible with both 3.0.x and 3.1.x but you must run with the version you compiled with.Compile
-------
You need Lua and libmodbus development packages (headers and libs) to
build lua-libmodbus.Compile with
make
You can override the pkg-config package name to set a specific Lua version.
For example:make LUAPKG=lua-5.1
Example usage
-------------See demo.lua and other sample files.
Here is a simple example printing out 10 registers at 0x2000,
then writing 5 registers back to that address```Lua
mb = require("libmodbus")
local dev = mb.new_tcp_pi("192.168.255.74", 1502)
local base_address = 0x2000
dev:connect()
local regs, err = dev:read_registers(base_address, 10)
if not regs then error("read failed: " .. err) end
for r,v in ipairs(regs) do
print(string.format("register (offset %d) %d: %d (%#x): %#x (%d)",
r, r, r + base_address - 1, r + base_address -1, v, v))
end
```Another example writing registers instead
```Lua
mb = require("libmodbus")
local dev = mb.new_tcp_pi("192.168.255.74", 1502)
dev:connect()-- will autoround 32.98 to 32. no magic support for writing floats yet :|
-- numbers are cast to uint16_t internally.
local res, err = dev:write_registers(0x2000, { 0xabcd, 32.98, 0xfffe, 0xabcd, -1 })
if not res then print(err) end
```Testing
-------
Some spec files for use with busted are provided. Some of them expect to have
real hardware to talk to, so you may wish to disable them.```
busted --exclude-tags=real
```