連続 32 ビット レジスタ(M 変数)の値を読み取って DINT に変換するか、DINT データを連続 32 ビットレジスタ(M 変数) に保存できます。
次の JBI と lua コードを使用します:
-- author:chenliao@elibot.cn
-- 20220708
NOP
SET I000 528
// M変数の読み取り開始位置設定
SET D002 -1987
//割り付けるデータDINTを設定する SET B000 =2 //B000 =2,D002 の値を mstartbit から始まる 32 ビットデータの数値に変換します。
TIMER T=1 S
WAIT B000 = 0
SET I000 528
//M変数の読み取り開始位置設定
SET B000 1
//B000 =1,mstartbitから始まる32bitデータをDINTに変換してD001に格納
TIMER T=1 S
WAIT B000 = 0
END
function M32bitToDint(startbit)
local mout = 0
local mbit = 0
for i = 32, 1, -1 do
mbit = get_robot_io_status("M" .. (startbit + i - 1))
mout = mout | mbit
mout = mout<<1
end
mout = mout>>1
mout = string.pack("I", mout)
return string.unpack("i", mout)
end
function DintToM32(data, startbit)
local mout = 0
mout = string.pack("i", data)
mout = string.unpack("I", mout)
for i = 1, 32, 1 do
if (mout & 1) > 0 then
set_robot_io_status("M" .. (startbit+i-1), 1)
else
set_robot_io_status("M" .. (startbit+i-1), 0)
end
mout = mout >> 1
end
end
sleep(0.3)
local startbit
--I000 格納開始ビット
local D001
-- M_startbit から始まる 32 ビットを読み取り、DINT データに変換して D001 に格納します。
-- D002データ(32bit DINT)をM_startbitから32bitに格納します。
-- B000 =1 ,get data from m_startbit -- m_startbit_32 and transfer to dint, set data to D001
-- B000 =2 ,get data from D002 , and store data in m_startbit -- m_startbit_32
while true do
B000 = get_global_variable("B000")
if (B000 == 1) then
--Read M_startbit to M_startbit+32 and transfer to DINT
--set result in D001
startbit = get_global_variable("I000")
D001 = M32bitToDint(startbit)
set_global_variable("D001", D001)
set_global_variable("B000", 0)
end
if (B000 == 2) then
--Set D002(32bit DINT) to M_startbit to M_startbit+32(ttl 32bit)
startbit = get_global_variable("I000")
D002 = get_global_variable("D002")
DintToM32(D002, startbit)
set_global_variable("B000", 0)
end
sleep(0.5)
end