【PLC学习六】PLC编程必备技能——数字量输出与输入映射
文章目录
前言
毕业之前,在学校训练各类编程技能时,仅仅关注了程序本身,并未关注软件程序与硬件的连接。一般情况下,如单片机等,软硬件的通讯由通讯线连接通讯模块即可完成。
但是,在实际工业应用中,通讯是一个十分复杂的模块。本文将讲述PLC中,如何实现数字量输出与输入的映射。
提示:以下是本篇文章正文内容,下面案例可供参考
一、S7-1200PLC以太网通信
S7-1200PLC本体上集成了一个PROFINET通信口,支持以太网和基于TCP/IP的通信标准。支持的协议如下所示:
- TCP
- ISO on TCP
- S7通信(服务器端)
二、S7-1200间接寻址
- 数组间接寻址
- AT变量寻址
- Slice变量寻址
1.数组间接寻址
数组间接寻址通常有这么几种
- DB 中数组,或者块接口、Static、Temp 的数组
- 字符串字符间接寻址
- I、Q 的数组
- FB 多重背景的数组
- DB_ANY 的数组
2.AT变量寻址(AT覆盖参数)
S7-1200 要访问声明参数内的数据区域,可以通过附加声明来覆盖所声明的参数。这样可以选择对不同数据类型的已声明参数进行寻址,
例如,可以使用 Bool 的 Array 对 Word 数据类型参数的各个位寻址。
3.Slice变量寻址
通过 **slice(片段访问)**方式,可以选择所声明变量中的特定寻址区域;可以实现从单个位到变量级别的符号访问;片段访问不能寻址常量。
slice 方式支持这2种方式的块:可标准访问的块、可优化访问的块。
三、AT变量寻址(实例)
- 创建一个FC块,并将FC块命名为MAPIN(映射输入),并在“块接口”中创建TEMP变量;
- 创建第一个TEMP变量,命名为TEMP1,数据类型选为DWORD;
- 在TEMP1的下一行,将数据类型设置为AT;
- 此时,TEMP中会出现一个新参数,TEMP2,数据类型为BOOL;
- 将TEMP2这个参数的数据类型修改成 Array[0…15] of Bool ,并编译该 FC 块,可以看到参数 TEMP1和参数TEMP2 的偏移量都是 0.0,这表示参数 TEMP1和参数TEMP2 是相同地址,只是以不同的数据类型显示,如图 1 所示。
其中参数TEMP2是 参数 TEMP1的 AT 覆盖参数。
(注:对于 S7-1200 中的 FC 使用 AT,覆盖参数和被覆盖参数的数据长度必须相同。)
提示:在映像输入FC块中,所列数据长度为32位,是因为TEMP1的数据类型为DW,是32位:
映射输入代码如下(示例):
#Temp2[0]:=#INPUT0_0;
#Temp2[0]:=#INPUT0_1;
...
...
#Temp2[31]:=#INPUT3_7;
#OUTPUT:=#Temp1;
映射输出代码如下(示例):
#Temp1:=#INPUT;
#OUTPUT0_0:=#Temp2[0];
#OUTPUT0_1:=#Temp2[1];
...
...
#OUTPUT3_7:=#Temp2[31];
由以上程序,可以看出AT覆盖参数的用法。在输入映射中,让输出的值被TEMP1的值覆盖。在输出映射中,让TEMP1被输入映射覆盖。
达成#OUTPUT:=#Temp1:=#INPUT,综上,#OUTPUT=#INPUT,完成了输入与输出间的映射。
备注
**FC调用的格式是**
"FC块名称"(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...) 返回值:=“FC块名称”(输入形参:=实参,输出形参=>实参,输入输出形参:=实参...)
FC调用需要确保所有形参都有对应实参。如果没有参数的FC也需要有括号。
四、终极映射
将数字量的输入与输出地址,在新的FC块中,赋值给“映射输入”和“映射输出”FC块,实现最终的数字量输入与输出映射。