PLC控制彩灯项目,超详细案例讲解,快来收藏
导读:本案例主要让读者练习西门子S7-200SMART系列PLC位逻辑指令、定时器、移位指令、子程序的结构等。
控制示意图
如图3-1所示为彩灯控制示意图。
图3-1 彩灯控制
控制要求描述
现有L1-L8共8盏彩灯,要求按下开始按钮,霓虹灯L1-L8以正序每隔1S轮流点亮,当L8亮后,停2S;然后,反向逆序间隔1S轮流点亮,当L1再亮后,停5S,重复上述过程。按下停止按钮,彩灯停止工作。
I/O分配
根据控制要求描述对需要用到的I/O进行分配,如图3-2所示:
图3-2 I/O分配表
【相关指令解读】:此案例主要用到移位指令和其它指令配合,这里主要解读移位指令。
循环左移字节(图3-2):循环移位指令将输入值 IN 的位值循环左移位,位置循环移位计数 N,然后将结果装载到分配给 OUT 的存储单元中。 循环移位操作为循环操作。
图3-2:循环左移字节
举例说明1:程序如图3-3,利用系统时钟SM0.1第一个扫描周期给QB0字节中赋值为1,此时QB0中最低位(Q0.0)为 1。当按下I0.0按钮后,QB0字节中的数据左移一位,Q0.1变为1。
图3-3
举例说明2:程序如图3-4,利用系统时钟SM0.1第一个扫描周期给QB0字节中赋值为1,此时QB0中最低位(Q0.0)为 1。当按下I0.0按钮后,QB0字节中的数据左移二位,Q0.2变为1。
图3-4
循环右移字节: 如图3-5,循环移位指令将输入值 IN 的位值循环右移,位置循环移位计数 N,然后将结果装载到分配给 OUT 的存储单元中。 循环移位操作为循环操作。
图3-5:循环右移字节
举例说明1:程序如图3-6,利用系统时钟SM0.1第一个扫描周期给QB0字节中赋值为1,此时QB0中最低位(Q0.0)为 1。当按下I0.0按钮后,QB0字节中的数据右移一位,Q0.7变为1。
图3-6
举例说明2:程序如图3-7,利用系统时钟SM0.1第一个扫描周期给QB0字节中赋值为1,此时QB0中最低位(Q0.0)为 1。当按下I0.0按钮后,QB0字节中的数据右移二位,Q0.6变为1。
图3-7
程序控制程序
(1)主程序,对数据初始化,调用相关子程序。M1.0接通代表左移位开始,左移开始之前,将1赋值给QB0。M1.2接通代表右移开始,将128给到QB0, Q0.7为1。程序如图3-8所示
图3-8主程序
(2)循环子程序主要控制灯是启停和循环。按下启动按钮,左移开始标志位M1.0自锁,总共移7位,定时时间为7秒,左移完成断开M1.0延时2秒接通右移标志位M1.2。右移完成延时5秒接通M1.0左移开始标志位,形成循环。程序如图3-9所示
图3-9循环程序
(3)左移程序,利用移位指令和系统时钟配合。程序如图3-10所示
图3-10左移程序
(4)右移子程序程序,利用移位指令和系统时钟配合。程序如图26-6所示
本案例采用子程序的结构编程,并且结合循环指令、定时器指令等编写彩灯循环案例。希望大家能在此文章中汲取西门子200SMART PLC编程相关知识及理念。
(来源:技成培训网,作者:郭彪,留言处大家可以补充文章解释不对或欠缺的部分)
西门子 S7-1200PLC编程 数组的使用方法
关注“ 技成微课堂 ”,一起涨知识~
私信回复:64,领64本西门子电子书!
使用数组数据类型注意事项
ARRAY类型是由数目固定且数据类型相同的元素组成的数据结构。ARRAY类型的定义和使用需要注意以下几点:
ARRAY类型可以在DB、OB/FC/FB接口区、PLC数据类型处定义;无法在PLC变量表中定义。数组定义:Array[维度1下限..维度1上限,维度2下限..维度2上限,...]of <数据类型>,最多可包含 6 个维度;数组元素的数据类型包括:除数组类型、Variant类型以外的所有类型;数组下标的数据类型为整数,下限值必须小于或等于上限值,上下限的限值在S7-1200 V3.0及其以前为Int范围(-32768~+32767),在S7-1200 V4.0及其以后前为DInt范围(-2147483648 ~+21474836487),可以使用局部常量或全局常量定义上下限值,数组的元素个数受DB块剩余空间大小以及单个元素大小的限制;从S7-1200 V2.0开始,下标可以不仅仅是常数、常量,也可以是变量,还可以是混合使用(多维数组),如果编程语言是SCL的话,下标还可以是表达式。使用数组的变量下标,可以在程序中很容易地实现间接寻址。注意,下标变量必须是符号名,不能是DB1.DBW0这种没有对应符号名的绝对地址。从S7-1200 V4.2开始,FC的Input/Output/InOut以及FB的InOut可以定义形如Array[*]这种变长数组,要求必须是优化FC/FB块,在调用FC/FB的实参中可以填写任意数据类型相同的数组变量;当然,也可以多维变长的数组,例如Array[*,*]of Int。数组可以使用单个数组元素例如"DB1".Static_1[1],也可以使用整个数组例如"DB1".Static_1。多维数组可以降维使用,例如三维数组:3D[0..2,0..3,0..4]of Int是一个3×4×5大小的Int数组,3D[0]是一个4×5大小的二维Int数组,3D[0,1]是一个5个元素的一维Int数组,当然多维数组下标也可以换成变量,例如3D[Tag_1,1]这种;S7-1200 V4.2开始,多重背景支持数组形式,即Array of FB,这样可以在FB中使用循环指令更方便的编写程序。不支持Array[*] of FB。在TIA 博途 V10.5 SP2,S7-1200 V1.0的时候,曾经引入FieldRead 和 FieldWrite 指令,用于数组下标的变址寻址,这种方法在TIA 博途 V11之后可以由下标变量完全取代,并且更为简化,所以该指令也只是位于“移动操作>原有”中,用于早期版本向上移植时使用,它的使用方法参见FieldRead 和 FieldWrite 间接寻址。数组的基本使用方法
一. DB中创建,如图1所示:
图1 Array在DB中的创建
二. FC的InOut中创建,如图2所示:
图2 Array在FC形参中的创建
三. 数组作为实参,如图3所示:
图3 Array作为FC的实参
四. FC程序中使用数组元素,使用形参,如图4所示:
图4 FC程序中使用形参
五. FC程序中使用数组元素,下标为变址寻址,使用形参, 如实现以下功能,将0-7这8个数,送入数组下标为0-7的8个元素,如图5-7所示:
(1)FC形参设置,如图5所示:
图5 FC形参设置
(2)程序编制,如图6所示:
图6 程序详情
(3)SCL的版本,如图7所示:
图7 SCL版本的程序
六. 在程序中直接使用数组元素,如图8所示:
图8 程序中直接使用数组元素
七. 在程序中直接使用数组元素,下标为变址寻址, 如实现以下功能,将0-7这8个数,送入数组下标为0-7的8个元素,如图9-11所示:
(1)数据块定义,如图9所示:
图9 DB1的定义
(2)程序编制,如图10所示:
图10 程序详情
(3)SCL的版本,如图11所示:
图11 SCL版本程序
Array【*】使用实例
实现以下功能:使用FC的Input定义数组Array[*] of Int,求变长数组元素的总和,可以按照以下步骤来完成。
一. 使用Array[*] ,必须使用如图12所示的指令,计算数组元素的上下限,从而得出元素个数:
图12 指令位置
二. 定义变量,如图13所示。赋初始值,计算上下限,如图14所示:
图13 定义形参
三、计算上下限程序,如图14所示:
(1)输入Array[*]类型的变量
(2)所求上下限的维数
(3)该维数下的下限/上限,DINT类型
图14 计算上下限
四. 求和程序,如图15所示:
图15 求和的程序
五. SCL的版本,如图16所示:
图16 SCL版本程序
六. OB1中调用实参为不同数组元素个数的数组,如图17所示:
图17 OB1调用程序
Array of FB的使用实例
实现以下功能:FB3多次调用FB4,在FB3内部循环调用,减少程序量。FB4的两个Input:Start,Stop,一个InOut:Run,建立Array[0..7] of FB4。同时建立变量 Array[0..7] of Struct,作为对应FB4的输入和输出,如图18所示:
图18 程序详情
版权声明:文章转自网络,版权归原作者所有。如有侵权,请联系我们删除!
私信回复:64,领64本西门子电子书!
相关问答
BYTE在PLC中是什么意思?
在PLC中,位,就是用0、1代码表示bool量,即是bit字节是8个bit,即是byte。字就是2个字节。双字就是2个字。这些都是为了在设备中存储区使用方便,做的一些规定。...
西门子怎么输出一个字节?
西门子PLCQB表示输出一个字节,Q表示输出可以开关量输出QBQWQDQ1.0也可以是模拟量输出AQW西门子PLCQB表示输出一个字节,Q表示输出可以开关量输出QBQWQ...
西门子字节表示方法?
西门子是一种S7系列PLC控制器所使用的编程语言,其字节表示方法是以大端字节序(BigEndian)为主。在大端字节序中,高位字节存储在低地址中,而低位字节存...
plc编程中的字节,字,双字,整数,双整数,实数,之间到底是什么关系?
1字节=8位1字=2字节=16位1双字=2字=32位整数一般是1字,双整数是2字,不能表示小数实数是32位,浮点数1字节=8位1字=2字节=16位1双字=2字=32位整数一般是1字,双...
在西门子PLC编程中,什么时候用字节,什么时候用字,什么时...
链接(我的回答)。然后我再给你说说为什么要用这些东西。再给你说我要帮你写这些受累,你能不能付出点金...&oldq=1你先看看上面的链接(我的回答)。...
plc字节转换成双字怎么转的?
要将PLC字节转换成双字,需要进行以下步骤。首先,将两个字节按照顺序合并为一个双字节,这可以通过将高字节左移8位,然后与低字节进行或运算来实现。其次,需...
plc位、字节、字、双字什么意思?
位就是0或1,二进制的一个位0或1字节是8个位,二进制00000000到11111111字是16个位,二进制0000000000000000到1111111111111111双字...
PLC中的字节,实数,字,双字什么含义?
一个字节是八位,每个位可以存一个0/1代码,也就是一个字节可以存一个八位的二进制数;一个字是两个字节,所以是16位二进制数;一个双字是两个字,也就是32位二...
abbplc编程指令byte_to_int的含义?
字节类型转换指令功能是把字节类型转换为其他数据类型输入输出类型:BOOL,WORD,DWORD,SINT,INT,UINT,UDINT,REAL,TIME,DATE,TOD,DT和STRING。by...
PLC怎么对某个字节往后的几个字节求和?
定义一个指针,把指针加1,就会指向下一个数MB1,然后循环N次,N就是设定的4或者5,循环内把MB0MB1相加mov&MB0ac1add_diac11定义一个指针,把指针加1,就会指...