Lua读写plc 寄存器
我的plc 西门子s7-200 通讯协议用了ppi协议我想把gpio 状态同步到plc的m3.0-m3.3 这几个位所以我写了一下代码
_ENCRYPT_=0 --LUA脚本加密
--数据类型定义
--数据类型定义
VT_LW = 1 --变量地址
VT_RW = 2 --FLASH存储
VT_V = 10 --变量(VB/VW/VD)
VT_I = 11 --输入继电器(位)
VT_Q = 12 --输出继电器(位)
VT_AIW = 13 --模拟输入(字)
VT_AQW = 14 --模拟输出(字)
VT_S = 15 --控制继电器(位)
VT_M = 16 --辅助继电器(位)
VT_SM = 17 --特殊继电器(位)
VT_T = 18 --定时器(字)
VT_C = 19 --计数器(字)
local IO0_PE5 = 0x0405
local IO1_PE9 = 0x0409
local IO2_PE10 = 0x040A
local IO3_PD21 = 0x0315
function on_init()
gpio_set_in (IO0_PE5)
gpio_set_in (IO1_PE9)
gpio_set_in (IO2_PE10)
gpio_set_in (IO3_PD21)
end
function on_run(screen)
set_bit(VT_M, 3.0, gpio_get_value (IO0_PE5))
set_bit(VT_M, 3.1, gpio_get_value (IO1_PE9))
set_bit(VT_M, 3.2, gpio_get_value (IO2_PE10))
set_bit(VT_M, 3.3, gpio_get_value (IO3_PD21))
end
系统提示“ set-bit 的第二个参数必须是整数”,
问题来了,这里应该怎么写呢?
用set_uint16试试,第二个就填3,第三个参数用一个整数表示,这个整数的低4位和IO3_PD21、IO2_PE10、IO1_PE9、IO0_PE5对应 If后要接end 发表于 2023-10-20 13:58
用set_uint16试试,第二个就填3,第三个参数用一个整数表示,这个整数的低4位和IO3_PD21、IO2_PE10、IO1_PE ...
这样操作的话会不会影响m3 的其他位,甚至m4 也会收到影响?
set-bit 的正确用法是什么呢?
本帖最后由 If后要接end 于 2023-10-20 15:26 编辑
如果不想m3其它位修改,可以读取m3这个寄存器的数值,只改低4位的数据,最后再写回m3寄存器
脚本api中的所有地址(一般为第二个参数),都只能是整数,set_bit更多用于那些只有0/1值的寄存器(类似于modbus线圈类型),像修改某个寄存器中的某一个位,只能用set_uint/set_int来下发 If后要接end 发表于 2023-10-20 15:24
如果不想m3其它位修改,可以读取m3这个寄存器的数值,只改低4位的数据,最后再写回m3寄存器
脚本api中的所 ...
谢谢回复 ,我不太熟悉三菱的plc ,我修改了地址分配,其余的位不使用就行了。
页:
[1]