This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Write in a Single Bit of a Word
#1
Hello Everyone,
I have to write a single bit of a register with a boolean value.
Can you help me with a script?
In the attachment you can find the register that I have to use.
For example I have to command the Bit0



Thank you so much at all!

Luigi
Reply
#2
See this: https://forum.logicmachine.net/showthrea...9#pid15619
Reply
#3
(14.02.2020, 12:10)admin Wrote: See this: https://forum.logicmachine.net/showthrea...9#pid15619

Thanks for your reply, but I'm a beginner in this things.
Why I have to calculate the value of 3 object together? The post that you send me is good for 1 object also?
Thank you so much for your patience
Reply
#4
Example can be changed to accept any number of input objects.
If you want to convert boolean value to a number you can do this via an event script (1/1/2 is output object):
Code:
123
value = event.getvalue() out = value and 1 or 0 grp.write('1/1/2', out)
Reply
#5
(14.02.2020, 12:15)admin Wrote: Example can be changed to accept any number of input objects.
If you want to convert boolean value to a number you can do this via an event script (1/1/2 is output object):
Code:
123
value = event.getvalue() out = value and 1 or 0 grp.write('1/1/2', out)

Sorry, I explain all my situation so I can understand all better.
I have created a script that read all the bit of a register (in this case the register 1280):
Code:
1234567891011121314151617181920212223242526272829303132333435363738
require("user.GetBit") local value local Status local Byte        -- Matrice di valori --- Modbus --- mb = require('mbproxy').new() mb:setslave(1) -- Lettura variabili —— Status= mb:readregisters(1280) ---- Byte --log (Status) if Status ~= nil then   Byte = {getbit(Status, 0),     getbit(Status, 1),     getbit(Status, 2),     getbit(Status, 3),     getbit(Status, 4),     getbit(Status, 5),     getbit(Status, 6),     getbit(Status, 7),     getbit(Status, 8),     getbit(Status, 9),     getbit(Status, 10),     getbit(Status, 11),     getbit(Status, 12),     getbit(Status, 13),     getbit(Status, 14),     getbit(Status, 15)   }   log (Status)     for i=0, 16, 1 do       grp.update ('Stato.reg.1280_Bit' .. i ,Byte[i+1])   end end mb:close()
so at my address 32/1/1 there is the boolean value of the Bit0 of the register 1280.
Now I have to command the Bit0 of the register n°1280 with a boolean value.
Can you please write me all the script, so I can write it for the other commands.
Thank you very much and sorry for bothering you.
Reply
#6
Read this thread https://forum.logicmachine.net/showthrea...5#pid11915
This should explain you all what Admin has in mind.
------------------------------
Ctrl+F5
Reply
#7
Thank you very much both!

So this script is correct if I wanna set Bit0 of register 1280 to 0 when 32/1/1's value is 1
Code:
123456789101112131415161718192021
function setbit(value, bitnr)   local mask = bit.lshift(1, bitnr)   return bit.bor(value, mask) end value = 0 if grp.getvalue('32/1/1') then   value = setbit(value, 0) end log(value) mb = require('mbproxy').new() mb:setslave(1) -- set register at address 1000 to 123 mb:writeregisters(1280, 0) mb:close()
And another question the 123 near the code below what value is??
Code:
1
-- set register at address 1000 to 123
Reply
#8
This line is just the comment 123 is the value you write. in line 18 instead of 0 you should have value
------------------------------
Ctrl+F5
Reply
#9
Now I have to set bit 3 of register 1280 to 1

This is the right code?
Code:
12345678910111213141516
require("user.SetBit") mb = require('mbproxy').new() mb:setslave(1) value = 1 if grp.getvalue('32/1/29') then   value = setbit(value, 3) end log(value) mb:writeregisters(1280, value) mb:close()
Thanks
Reply


Forum Jump: