LUA语言与西门子PLC通过S7通信交互数据(一、准备工作&lua函数简介&S7协议库常用函数简介)

准备工作
1、下载S7协议库(下载
在这里插入图片描述
S7最新协议库是1.4.2,下载1.4.1即可。
2、下载lua文件库(下载
在这里插入图片描述
为了防止兼容性问题,下载这个版本即可。
3、安装VS软件
本例子使用的是VS2010,其他版本也可。
4、安装lua环境( 下载)
百度搜索:LuaForWindows_v5.1.4-46,这个版本要对应下载的lua源文件库
lua栈操作函数简介:
1、先简单说明下lua的栈:
Lua交互的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。
在Lua中,Lua堆栈就是一个struct,堆栈索引可以使用正数从栈底索引,也可以使用负数从栈顶索引,这样做的好处是,-1永远表示栈顶,1永远表示栈底,如图所示:
在这里插入图片描述
2、lua函数(读取单个数据或字符串):
luaL_checkint(L,-1) //检查栈顶是不是一个数,并转换为int
luaL_checkinteger(L,-1) //检查栈顶是不是一个数,并转为integer
luaL_checklong(L,-1) //检查栈顶是不是一个数,并转为long
luaL_checklstring(L,-1) //检查栈顶是不是一个字符串
luaL_checknumber(L,-1) //检查栈顶是不是一个数
3、lua函数(写入单个数据或字符串):
lua_pushboolean(L,-1) //从栈顶压入一个bool值
lua_pushinteger(L,-1) //从栈顶压入一个int
lua_pushnil(L,-1) //从栈顶压入nil值
lua_pushnumber(L,-1) //从栈顶压入lua_Number(double)值
lua_pushstring(L,-1) //从栈顶压入一个string
4、lua函数对数组的读写
lua_settop(L, 0) //从栈顶压入一个bool值
lua_getglobal(L,“array”) //把lua文件内的“array”数组加载到栈内
lua_rawgeti (L, index, key) //把数组key索引的数据,放置到栈顶位置
void lua_rawseti (L, index,key) //把栈顶位置的数据,放置到数组key索引的位置,并弹出栈顶的数据
index参数的含义是:读写数组时指明数组在栈内的位置,key参数的含义是:对数组的索引。
注意:1、数组在lua中是数据类型一样的table
2、lua的table索引是从1开始的。
S7协议库常用函数简介:
1、int Cli_ConnectTo(S7Object Client, const char *Address,int Rack, int Slot)
建立与PLC的连接,Client是自定义数据类型,使用时直接定义即可,如S7Object Client;
Address是PLC的地址,比如“192.168.1.10”;
Rack是PLC机架号,为0既可;
Slot是PLC的插槽号,为0即可。
多说一句,机架号与插槽号,这个是西门子PLC编程软件组态时自动生成的,可以在PLC组态中查看,具体见下图:
在这里插入图片描述
2、int Cli_ReadArea(S7Object Client, int Area, int DBNumber, int Start,int Amount, int WordLen, void *pUsrData) //从PLC读取内部区域数据
int Cli_WriteArea( S7Object Client, int Area, int DBNumber, int Start,int Amount, int WordLen, void *pUsrData); //写入数据到PLC内部区域
读取区域数据,在西门子PLC中,常见的区域有:I区域,Q区域,M区域,DB区域。其中I区域表示输入,即写PLC内的I0.0、I1.0、IB01等;其中:Q区域表示输出,即PLC内的Q0.0、Q1.0、QB01等;M区域表示辅助输入输出,即PLC内的M0.0、M1.0、MB10等;DB区域数据区域,可以在内部自由定义数据,见下图;
在这里插入图片描述
参数解释:
Client是自定义数据类型,使用时直接定义即可,如S7Object Client;
Area指明要写入到PLC的那个区域,如图所示:在这里插入图片描述
DBNumber表示DB区域的块编号,非DB区域为0即可;
Start表示从哪里开始写入或读取,比如读写M100.1就设置成100,如果是DB区域时表示偏移量;
Amount写入多少个数据;
int WordLen,见下图:
在这里插入图片描述
*pUsrData根据WordLen,定义一段数组既可,其中要注意的是如果进行位读写,定义成一个字。
3、
int Cli_DBRead( S7Object Client, int DBNumber, int Start, int Size,void *pUsrData); //按字节读取DB区域
int Cli_DBWrite( S7Object Client, int DBNumber, int Start, int Size,void *pUsrData);//按字节写入DB区域
参数解释:
Client是自定义数据类型,使用时直接定义即可,如S7Object Client;
DBNumber表示DB区域的块编号;
Start表示从DB区域哪里开始写入或读取;
Amount写入多少个字节;
pUsrData定义一段字节数组既可,数组长度要>=Amount
总结:
1、S7协议库的详细说明,可以参考snap7-full-1.4.1.zip压缩包内的:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201214160440538.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NrbzEyMzQ=,size_16,color_FFFFFF,t_70
2、以上对系统要搭建的lua环境与协议库常用的函数做了简要说明。下节开始,将详细说明lua协议库与S7协议库如何移植,移植后如何处理编译错误。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值