广州大彩串口屏论坛_大彩开发者交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1043|回复: 4

Lua读写plc 寄存器

[复制链接]

2

主题

4

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2023-10-20 13:31:52 | 显示全部楼层 |阅读模式
我的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 的第二个参数必须是整数”,

问题来了,这里应该怎么写呢?
回复

使用道具 举报

2

主题

1253

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12543
发表于 2023-10-20 13:58:14 | 显示全部楼层
用set_uint16试试,第二个就填3,第三个参数用一个整数表示,这个整数的低4位和IO3_PD21、IO2_PE10、IO1_PE9、IO0_PE5对应
Easy doesn't enter into Grown-up life
成年人的生活里面没有“容易”二字
回复

使用道具 举报

2

主题

4

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2023-10-20 14:48:38 | 显示全部楼层
If后要接end 发表于 2023-10-20 13:58
用set_uint16试试,第二个就填3,第三个参数用一个整数表示,这个整数的低4位和IO3_PD21、IO2_PE10、IO1_PE ...

这样操作的话会不会影响m3 的其他位,甚至m4 也会收到影响?
set-bit 的正确用法是什么呢?

回复

使用道具 举报

2

主题

1253

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12543
发表于 2023-10-20 15:24:52 | 显示全部楼层
本帖最后由 If后要接end 于 2023-10-20 15:26 编辑

如果不想m3其它位修改,可以读取m3这个寄存器的数值,只改低4位的数据,最后再写回m3寄存器

脚本api中的所有地址(一般为第二个参数),都只能是整数,set_bit更多用于那些只有0/1值的寄存器(类似于modbus线圈类型),像修改某个寄存器中的某一个位,只能用set_uint/set_int来下发

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Easy doesn't enter into Grown-up life
成年人的生活里面没有“容易”二字
回复

使用道具 举报

2

主题

4

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2023-10-21 14:06:53 | 显示全部楼层
If后要接end 发表于 2023-10-20 15:24
如果不想m3其它位修改,可以读取m3这个寄存器的数值,只改低4位的数据,最后再写回m3寄存器

脚本api中的所 ...

谢谢回复 ,我不太熟悉三菱的plc ,我修改了地址分配,其余的位不使用就行了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|广州大彩串口屏论坛_大彩开发者交流论坛

GMT+8, 2024-5-2 02:40 , Processed in 0.049932 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表