1. AprusX Lua S7配置说明

1.1. 概述

1.1.1. 文档说明

文档概述AprusX Lua S7协议相关配置说明,AprusX Lua包含两个文件,aprus.lua和config.lua。AprusX Lua通过S7协议获取西门子S7系列数据,通过配置config.lua即可实现数据采集,aprus.lua中请勿进行操作;此文档主要介绍config.lua内容。

此文档目的为让相关人员清楚如何通过对脚本的配置实现对应协议的数据采集,详细介绍lua端config.lua的相关内容,如遇到新的需求或者处理不当的地方联系相关负责人。

1.1.2. 适用对象

本文档的目的读者是所有通过适配器对西门子S7系列PLC(S7协议)进行数据采集的人员。

1.1.3. 术语和缩略词

序号 术语名称 其它名称 术语说明
1 Aprus Advanced Programmable Remote Utility Server 高级可编程远程数据适配终端
2 S7 SIMATIC S7 西门子S7系列PLC

1.1.4. 参考资料

[1].《西门子以太网通讯》

[2].《西门子S7C以太网协议解析》

[3].《HslCommunicationDemo》

[4].《昆仑通态HMI屏编程软件》

1.2. 背景介绍

此文档只针对S7协议;针对AprusX S7的编写需要做一个大概的描述:

(1). AprusX在数据获取时,分为两部分,数据采集(CollrReg)和数据上报(CollpReg),为什么要分开呢,主要是由于提升采集效率而设定,数据采集过程中尽可能的把能连续采集的一次采集回来。

注意:S7协议在数据采集的时候是以字节(BYTE)进行采集。

(2). 数据上报是将已经采集的数据进行必要的数据处理,然后上报到云端。

1.3. 配置说明

1.3.1. config.lua简介

Config.lua由5大部分组成,ipmode、inet_addr、netmask、luaver、devinfo;分别来介绍这5大部分的功能:

序号 模块 说明 备注
1 ipmode IP获取方式 默认Manual,不更改
2 Inet_addr AprusX IP 与对接的设备保持相同网段,且同网段内IP不能重复
3 netmask 子网掩码 默认255.255.255.0,一般不修改,除非相同网段内没有足够的IP
4 luaver 脚本版本号 每次变更脚本都需更新版本,一边区分不同版本的区别
5 devinfo 设备类型 对接的设备类型

示例:

AprusX={
    ipmode="Manual",
    inet_addr="192.168.1.234",
    netmask="255.255.255.0",
    luaver="MAX.LUA.V030300.R",
    devinfo="S7-200SMART",
},

1.3.2. Ipmode:ip获取方式

Ipmode="Manual",

Ipmode为AprusX的ip获取方式,默认为Manual,手动模式,人为填写AprusX的ip。

1.3.3. Inet_addr:AprusX Ip

Inet_addr="192.168.1.234",

Inet_addr为AprusX的ip,手动填写ip,注意,这里为对接设备的ip,需要同设备保持在相同的网段内,否则无法对接设备。

1.3.4. netmask:子网掩码

netmask="255.255.255.0",

Netmask为子网掩码,默认为255.255.255.0,与客户保持一直,一般情况下均为255.255.255.0不变。

1.3.5. devinfo:设备类型

devinfo="S7-200SMART",

Devinfo设置设备类型,不同的适配器对接的设备类型不同,比如对接西门子S7-200-SMART,对接西门子S7-300等等,由于对接的设备类型不同,因此为了方便使用,知道对接的是哪一个客户的哪类型设备,我们设定了设备类型。

1.3.6. luaver:脚本版本

luaver = "MAprus.L.V220.R",

Luaver设置当前脚本的版本号,每次更新都需要更改并向上增加版本号;版本号在增加过程中,只需要修改主/子/阶段版本号即可,其他无需修改,主/子/阶段版本号不能为0,一般情况下如果只更新config.lua的配置无需更新主/子版本号,只要修改阶段版本号就行,版本号一定是要像上叠加,这样才能保证之前的版本有备份,才能自动升级。

1.3.7. S7:Device: S7设备信息

Device={
    Ip="192.168.1.102",
    Port="102",
    type="s7-1200",
},

S7设备信息区分三个部分:

序号 模块 说明
1 Ip s7设备的IP地址
2 Port: s7设备的端口
3 type: s7设备的类型 s7-1200
s7-1500
s7-300
s7-400
s7-200

1.3.8. Node节点信息

Node={
    collect={
        {reg="DB", dbnum=1, addr=0, len=200},
    },
    variable={
        {reg="DB",dbnum=1,addr=100,len=30,dtype="bytes",pMode={1,5},dStyle={"L102"}, dOffset={},dExt={}},
    },
}

1.3.8.1. collect:采集配置

Collect设置采集配置,采集配置主要有几个参数构成,需要注意的是S7协议采集时都是通过字节(BYTE)去采集。

collect={
    {reg="DB", dbnum=1, addr=0, len=100},
    {reg="M",  addr=0, len=100},
    {reg="I",  addr=0, len=100},
    {reg="Q",  addr=0, len=100},
    {reg="T",  addr=0, len=100},
    {reg="C",  addr=0, len=100},
}
采集配置 参数 说明 备注
CollrReg reg 寄存器类型 M I Q T C DB(V)
addr 寄存器类型的地址(起始地址)
abnum DB块区 DB块区只有在对DB数据采集的时候才会有,数据可能保存在不同的DB块区,但对S7-200-SMART来说只有一个DB块区,即DB1块区
len 寄存器从起始地址开始一共采集的数量

注意:西门子S7-200-SMART在提供点表的时候有所不同,西门子S7-200-SMART在提供点表的时候不会提供DB块DB寄存器,而是提供V寄存器,实际上有一个对应关系的,即:VDB1,V寄存器对应DB1块区。

举例:

  • a. I寄存器

I0.0,I0.1, I0.3,I1.0,I1.2,可以看出需要获取I寄存器的0地址和I寄存器的1地址,那么可以这样写:{rType="I",rAddr=0,rLen=2},

  • b. V寄存器

VW0,VW2,VW4,VW6,VW8,VW10,可以看出需要获取寄存器V从0地址开始到11地址的数据,那么可以这样写:{rType="DB",dbNum=1,rAddr=0,rLen=12},

V寄存器对应DB1块区,所以rType为DB,dbNum为1。

那这个看起来并不是连续的为什么可以这样写呢,实际上时连续的,V时代表寄存器,W代表数据类型WORD(两个BYTE),VW0就是VB1和VB1。

1.3.8.2. variable:上报配置

Variable设置上报配置,上报配置时需要把采集到的数据处理成最终实际使用的数据,包括数据处理逻辑,上报逻辑,数据分类等等;由于采集时都是按照字节(BYTE)采集,所以在数据处理的时候要需要注意。

注意:上报配置设置的地址,一定是在采集配置里面有的,否则数据不准确。

s7上报配置
Image - s7上报配置

1.3.8.3. 附件一

附件一
Image - 附件一

1.3.8.4. 附件二

附件一
Image - 附件一

注意:

  1. 如果无偏移,那么参数1,参数2的数据全部设为0,即
dOffset={\{0,0\},\{0,0\}}
  1. 如果只有单层偏移,那么只需要设置参数1即可,假如一个参数需要*10,即
dOffset={\{"\*",10\},\{0,0\}}
  1. 如果有双层偏移,那么需要设置参数1,参数2,加入一个参数需要*10,然后在+10,即
dOffset={\{"\*",10\},\{"+",10\}}

1.3.9. Apurs配置

说明:function start() 为主流程入口函数

1.3.9.1. user 全局通用/配置类

1.3.9.1.1. 本机网络配置方法
user.ipconfig(config.AprusX.ipmode, config.AprusX.inet_addr,config.AprusX.netmask)
1.3.9.1.2. 消息捕获方法
msg = user.waitmsg()
  • msg.from:消息来源
    • mqtt-sys 来自mqtt系统消息
    • mqtt-msg 来自mqtt数据消息
    • Modbus 来自Modbus管理器消息
    • modubs 来自modbus管理器消息
    • opcua 来自opcua管理器消息
    • mitsufx 来自mitsufx管理器的消息
  • msg.session: 消息会话对象

以下为 msg.from为 Modbus modbus opcua mitsufx通用

  • msg.code:消息号
  • msg.style_L:变量名称
  • msg.val_L:变量值
  • msg.style_E:事件变量名称
  • msg.val_E:事件变量值
  • msg.z:条件改变标志位

以下为 msg.from为 mqtt时使用

  • msg.topic:mqtt话题
  • msg.payload:mqtt消息数据

以下为 msg.from为 mqtt-sys时使用

  • msg.code:mqtt事件(0: mqtt断开,1: mqtt 连接)
1.3.9.1.3. 设置lua版本信息
    user.setluaver(luaver)
1.3.9.1.4. 设置设备信息
user.setdevinfo(devinfo)

1.3.9.2. mqtt对象方法

1.3.9.2.1. 创建mqtt对象实例
mqttobj = mqtt.new()
1.3.9.2.2. 配置mqtt连接信息 (选填)
mqtt.config(mqttobj, "mqtt_1", "192.168.1.159", "1883")
  • param 1 实例
  • param 2 实例id
  • param 3 mqtt服务器ip
  • param 4 mqtt 服务器端口

注:此配置选填 如果不填 则通过gards 服务器自动指定

1.3.9.2.3. 话题订阅
mqtt.subscribe(mqttobj, "p2p")
1.3.9.2.4. 发布消息
mqtt.publish (mqttobj, reserve, topic, payload)

reserve: 预留参数 必须有 可填nil

1.3.9.2.5. mqtt运行
mqtt.run(mqttobj)

备注:支持多实例,最大可创建3个mqtt对象

1.3.9.3. s7 对象方法

1.3.9.3.1. 创建s7对象实例
S7obj = s7.new()
1.3.9.3.2. S7对象配置
s7.config(s7obj, type, Ip, Port)
  • param 1 实例
  • param 2 s7设备类型
  • param 3 s7设备ip
  • param 4 s7设备port
1.3.9.3.3. s7 添加采集节点
s7.add_collectnode(s7obj, reg, dbnum, addr, len)
  • param 1 实例
  • param 2 寄存器类型
  • param 3 db块编号(当reg类型为db时有效 但此字段必须有)
  • param 4 寄存器地址
  • param 5 采集长度
1.3.9.3.4. S7 添加变量节点
s7.add_varnode(s7obj, reg, dbnum, addr, dtype, dBit, len, pMode, dStyle,dOffset, dExt)
  • param 1 实例
  • param 2 寄存器操类型
  • param 3 db块编号(当reg类型为db时有效 但此字段必须有)
  • param 4 寄存器地址
  • param 5 变量类型
  • param 6 位偏移 (只有当数据类型为bit时有效 但此字段必须有)
  • param 7 变量长度 (只有当数据类型为bytes时有效 但此字段必须有)
  • param 8 采集上报模式
  • param 9 采集上报名称
  • param 10 数据补偿计算
  • param 11 改变上报条件限制
1.3.9.3.5. s7变量节点写入数据
S7.write(s7obj, style, val)
  • param 1 实例
  • param 2 变量名称
  • param 3 变量值
1.3.9.3.6. s7 实例启动
S7.run(s7obj)
1.3.9.3.7. s7 实例暂停运行
S7.stop(s7obj)

备注 :支持多实例模式,最大可创建16个s7对象

© Mixlinker all right reserved,powered by Gitbook文件修订时间: 2022-03-10 10:36:38

results matching ""

    No results matching ""

    results matching ""

      No results matching ""