modbus readDiscreteInputs

Hi

I’m sorry about this I’m fairly new to Lua

What is the format of the return value from readDiscreteInputs()?

local vals = mb:readDiscreteInputs(11,00,32)
printf("modbus value: %s ",  vals)

Any hints on how to extract the bit data?

Thanks in advance

Ted

Hi Ted,

The value is most likely returned in a numeric format that you can manipulate to extract or examine individual bits.

Keep in mind that Lua provides variable “coercion”. In other words, because you are asking to print it as a string “%s” Lua simply does the conversion and prints the result in ASCII. I think if you perform bitwise or logical math on the same variable you will get the results you desire.

Tanda

Hi Tanda

Thanks you are correct = the following works:

local mb = modbus.new("/dev/ttyS0")
	
	-- Read 32 modbus digital inputs
	local vals = mb:readDiscreteInputs(11,00,32)
	-- Print the values
	if(vals) then
		for offset = 1,(32/8) do
			value = string.byte(vals,offset)
			printf("modbus value: 0x%x",  value)
			
		end
	else
		print("No modbus device found")
	end

Thank you both for your answer.

You may find the module ‘pack’ useful to manipulate binary data, especially when dealing with various element size and endianness coming from the device.
You can find the documentation of this module there : developer.sierrawireless.com/en/ … F_API.aspx

(The initial question of this threads indicates the modbus module doc has room for improvements, I’ve noted that point :wink: ).