发布时间: 2026-01-30

EC读取32位M变量


1.简介

对连续32位M变量,可以读取连续32bit M变量并转成对用DINT,或者将DINT数据存储到连续32bit M变量

2.操作流程

2.1变量定义

变量名称

I000

B0000

D1

D2

变量意义

M变量起始

地址

=1,M转化D

=2,D转化M

读取M的值

的存放入D1

把D2的值写入M寄存器

2.2JBI和LUA代码

使用如下JBI和lua:码:

2.3JBI代码

NOP
//D变量的值转化M的值
SET I000 528
SET D002 1987
SET B000 2
TIMER T=1 S
WAIT B000 = 0
//M变量的值转化D的值
SET I000 528
SET B000 1
TIMER T=1 S
WAIT B000 = 0
END

2.4LUA代码

sleep(1)
--32位M变量转成DINT数据
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

--DINT数据转成32位M变量
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
local D001
local D002
local B000
while true do
        B000 = get_global_variable("B000")
        if (B000 == 1) then
            startbit = get_global_variable("I000")
            D001 = M32bitToDint(startbit)
            set_global_variable("D001", D001)
            set_global_variable("B000", 0)
        end
if (B000 == 2) then
            startbit = get_global_variable("I000")
            D002 = get_global_variable("D002")
            DintToM32(D002, startbit)
            set_global_variable("B000", 0)
        end
        sleep(0.5)
end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

提交反馈