初始化篇
首先初始化分为两种:无检修信号正常初始化,有检修信号特殊初始化
1. 无检修信号正常初始化
比赛工程文件会在程序点击自动给运行按钮之后指定哪几部电梯能够正常运行
例如3、4、5号电梯检修,则只需要1、2、6号电梯初始化。
初始化思维导图如下:
1.在设计程序中,我们最先需要设定初始化的三个参数:
1)电梯的初始化楼层(电梯是从哪一层出发)
2)初始化方向(比赛中会有要求)
3)电梯载重最大值
因为这三个参数是由赛题中提供所以要在拿到赛题后第一之间进行修正
如下图1.1.1、图1.1.2、图1.1.4举例相关程序的代码块。
图1.1.1 初始化楼层数
图1.1.1 梯形图分析:使用MOVE模块是便于修改楼层数,将 IN 输入处操作数中的内容传送给 OUT 输出的操作数中,但输入 IN 处的操作数和输出 OUT 处的操作数必须为相同的数据类型。
图1.1.2 初始化楼层数
图1.1.2梯形图分析:IN中输入的初始化方向实际上是布尔值(0/1)其实也是方便于比赛,不用再手动调整位逻辑运算符,只需要由程序自身来判断电梯运行方向(初始化置位延时可以根据自身需要调整时间,防止程序死机)
图1.1.3 运行方向判断
图1.1.4 最大载重量赋值
图1.1.5 载重量转换
图1.1.4/图1.1.5 梯形图分析:在我们使用载重量进行int型变量对比时一定要注意变量类型,如图1.5所示,在比赛中输入DB块给的当前电梯重量为word变量,我们可以通过NORM_X和SCALE_X两个函数将Word型变量转换成Int型变量,再在系统中使用。
2. 是否到达第一限位和目标楼层判断
判断是否到达第一限位是用来反转运行方向和计算当前楼层。
注意!一定不能接触第二限位,碰一次就扣分
由于我们在赋值时就确定了初始运行方向,我们就通过以下代码块来判断是否到达第一限位,如图1.2.1
图1.2.1 到达第一限位后换向
图1.2.2 判断是否到达顶端/底端限制
图1.2.1/图1.2.2 梯形图分析:本系统为了防止停靠楼层不稳,就规定在停靠楼层上下一层时就将高速接触器切换为低速接触器,并且在到达端限后也切换为低速接触器。
另外,P_TRIG操作块在每次执行指令时,都会查询信号上升沿。检测到信号上升沿时,该指令输出 Q 将立即返回程序代码长度的信号状态“1”。在其它任何情况下,该输出返回的信号状态均为“0”。(边沿存储器位的地址在程序中最多只能使用一次,否则,会覆盖该位存储器。这将影响边沿评估,并且结果会变得不明确。边沿存储位的存储区域必须位于 DB(FB 静态区域)或位存储区中。)
图1.2.3 单部电梯初始化完成,输出DB块 #到达初始化楼层置1
注意:在到达上下端限后楼层分别设定为0层/11层(方便后续楼层计算)
楼层计算会在其他篇章中单独讲解
2. 有检修信号特殊初始化
由于检修信号是在软件中根据赛事方规定,有可能是出现在初始化前或运行过程中检修或者检修完成此部电梯再次进行初始化,所以我们在此分两种情况讨论
a)初始化前或运行过程中检修
当输入DB块中某部电梯的检修信号置1时,这部电梯就不进行初始化,检修指示灯亮起。
本系统是规定当有检修信号时,此部电梯就完全停止(也不管电梯中有没有人)。
后续比赛中如果有要求出现检修信号时在临近楼层停靠,可以这样操作:
当检修信号置1,高速信号置0,低速信号置1;
当上下平层同时为1时,电机置0,低速信号置0,光幕信号置1,群控分离信号置1。
b)检修完成此部电梯再次进行初始化
因为程序设定在程序运行过程中可能检修完成,我们就需要只对这单部电梯进行初始化,如图2.1.1
图2.1.1 二次初始化
图2.1.1 代码块分析:我们通过|N|下降沿信号逻辑符来启动二次初始化(为防止程序死机,多次对单部电梯初始化),其次二次初始化没有上下方向限制,当然是越快越好,我们就规定5层以下的向下初始化,反之向上;当到达端限后,程序就和正常初始化相同,进行反转方向和楼层计数,然后直接群控分离置0,使得能够接收外呼信号。
最后,在初始化完成后如图3.1所示,输出准备就绪信号
图3.1所示,输出准备就绪信号
在实际编写中要合理运用FB块和FC块,能使代码运行效率,可读性,改写速度大大提高。
如有其他问题可以加v交流:13903980091