权利要求书: 1.一种矿用带式输送机顺煤流启动控制方法,其特征在于,包括,
对每条煤流中的皮带进行分级,每条煤流中的首部皮带为上一级皮带属于其他条煤流的皮带,或每条煤流中的上一级皮带为第三方控制器皮带的皮带,或者每条煤流中无上一级皮带的皮带;
在启动前,对每条煤流中的所有皮带进行编号,并对每条煤流中皮带还根据编号进行排序;
所述排序包括如下步骤:
获取皮带所在煤流、皮带分级以及皮带编号,并存储于暂存空间中;
申请排序缓存空间,用于皮带排序;
查找暂存空间中煤流的首部皮带,若查找到的首部皮带数量不等于1,则认为配置文件配置的煤流上下级关系存在错误;若找到的首部皮带数量等于1,则将查询到的首部皮带固定于排序缓存首部;
通过查找暂存空间中上级皮带为首部皮带的皮带编号,并将相应皮带编号插入到排序缓存空间中首部皮带编号的尾部;
遍历暂存空间中的皮带编号,检查当前所遍历的皮带的上级是否在排序缓存空间中,如存在则把该皮带编号插入到该皮带的上级皮带编号的尾部;
采用顺煤流启动标志表示顺煤流启动;
顺煤流启动包括,
获取煤流中所有皮带状态,检查该煤流所有皮带是否全部运行;
若所有皮带全部运行则表示该煤流启动成功,顺煤流启动标志清除;
若存在未运行的皮带,检查该未运行的皮带处于停机状态还是正在启动状态;
当该未运行的皮带处于正在启动中,保留顺煤流启动标志,并跳转该皮带及其上一级皮带轮询该煤流的其他皮带,直至顺煤流启动成功;
当该未运行的皮带处于停机状态,若该未运行的皮带的下一级存在已运行的皮带,则启动该未运行的皮带;
当该未运行的皮带处于停机状态,若该未运行的皮带的下一级不存在已运行的皮带,跳过该未启动的皮带查询该煤流中其他皮带;
上述顺煤流启动过程中,采用倒序查询方式进行,即在皮带轮询过程中先启动无下一级皮带的皮带。
2.根据权利要求1所述的一种矿用带式输送机顺煤流启动控制方法,其特征在于,所述顺煤流启动标志采用数字1表示。
3.一种矿用带式输送机顺煤流启动设备,其特征在于:包括:
控制器内置有顺煤流启动函数用于执行权利要求1中的矿用带式输送机顺煤流启动控制方法,顺煤流启动函数根据煤流的顺煤流启动标志判断煤流是否执行顺煤流启动;
控制器,接收上位机或外键输入指令控制皮带的启动,并通过显示屏显示该皮带处于启动状态、运行状态或者停机状态。
4.一种矿用带式输送机顺煤流停机控制方法,其特征在于,包括,
对每条煤流中的皮带进行分级,将每一级中的所有皮带分别进行编号;其中,每条煤流中的首部皮带为上一级皮带编号不属于本条煤流编号的皮带,或每条煤流中的上一级皮带为第三方控制器皮带的皮带,或者每条煤流中无上一级皮带的皮带;
在停机开始前,还包括对每条煤流中的所有皮带进行编号,并对每条煤流中皮带还根据编号进行排序;
所述排序包括如下步骤:
获取皮带所在煤流、皮带分级以及皮带编号,并存储于暂存空间中;
申请排序缓存空间,用于皮带排序;
查找暂存空间中煤流的首部皮带,若查找到的首部皮带数量不等于1,则认为配置文件配置的煤流上下级关系存在错误;若找到的首部皮带数量等于1,则将查询到的首部皮带固定于排序缓存首部;
通过查找暂存空间中上级皮带为首部皮带的皮带编号,并将相应皮带编号插入到排序缓存空间中首部皮带编号的尾部;
遍历暂存空间中的皮带编号,检查当前所遍历的皮带的上级是否在排序缓存空间中,如存在则把该皮带编号插入到该皮带的上级皮带编号的尾部;
顺煤流停机函数进行顺煤流停机控制;
采用顺煤流停机标志表示顺煤流正在停机过程;
采用停机失败标志记录该运行中的皮带有过停机失败;定义,停机失败是指运行中的皮带执行超过设定次数的停机过程均未完成停机,并退出顺煤流停机函数;
采用停机超时标志记录该运行停机中的皮带有过超过预设时间的停机;
顺煤流停机函数遍历煤流皮带,检查正在运行的皮带是否存在停机失败标志或停机超时标志,若存在停机失败标志或停机超时标志则清除该煤流的顺煤流停机标志,退出该顺煤流停机函数;
若不存在停机失败标志与停机超时标志,该运行的皮带的下一级皮带均已停机,则在停机延时到达后进行停机动作,直至该煤流中所有皮带轮询结束;
若不存在停机失败标志与停机超时标志,该运行的皮带的下一级皮带不为停机状态,则跳转该未停机的皮带轮询该煤流中其他皮带,直至该煤流中所有皮带轮询结束。
5.根据权利要求4所述的一种矿用带式输送机顺煤流停机控制方法,其特征在于,所述顺煤流停机标志采用数字1表示。
6.一种矿用带式输送机顺煤流停机设备,其特征在于:包括:
控制器内置有顺煤流停机函数用于执行权利要求4中的矿用带式输送机顺煤流停机控制方法,顺煤流停机函数根据煤流的顺煤流启动标志判断煤流是否执行顺煤流启动标志;
控制器,接收上位机或外键输入指令控制皮带的停机,并通过显示屏显示该皮带处于停机失败状态、停机超时状态或者停机过程中。
说明书: 一种矿用带式输送机顺煤流启动、停机控制方法及设备技术领域
本发明属于煤矿行业皮带运输控制领域,具体涉及一种矿用带式输送机顺煤流启动、停机控制方法及设备。
背景技术
煤流启停控制是煤流运输的关键环节,不仅涉及煤流的正常运输、还涉及不同煤流之间的切换。
为了实现对煤流启停的精准控制,现有行业采用嵌入式设备,利用PLC控制器进行控制。
但本申请发明人在实现本申请实施例中发明技术方案的过程中,发现现有技术至少存在如下技术问题:
1.现有技术的煤流启停控制所适应煤流配置简单,无分支控制。无法满足多分支联动控制。适应场景简单,无法满足一条煤流中多分支同煤流启停控制。
2.PLC控制器需根据场景定制程序,对于经常变动的采煤工作面和变动的运输皮带搭接关系,适应性差,每次调整都需要重新编制PLC程序,人力成本高、灵活性差。
发明内容
本申请提供一种矿用带式输送机顺煤流启停控制方法及设备,其能进行多分支联动控制,适用于经常变动的工作台面以及经常变动的运输皮带搭接关系。
为实现上述技术目的,本申请提供一种矿用带式输送机顺煤流启动控制方法,包括,
对每条煤流中的皮带进行分级,每条煤流中的首部皮带为上一级皮带属于其他条煤流的皮带,或每条煤流中的上一级皮带为第三方控制器皮带的皮带,或者每条煤流中无上一级皮带的皮带;
采用顺煤流启动标志表示顺煤流启动;
顺煤流启动包括,获取煤流中所有皮带状态,检查该煤流所有皮带是否全部运行;
若所有皮带全部运行则表示该煤流启动成功,顺煤流启动标志清除;
若存在未运行的皮带,检查该未运行的皮带处于停机状态还是正在启动状态;
当该未运行的皮带处于正在启动中,保留顺煤流启动标志,并跳转该皮带及其上一级皮带轮询该煤流的其他皮带,直至顺煤流启动成功;
当该未运行的皮带处于停机状态,若该未运行的皮带的下一级存在已运行的皮带,则启动该未运行的皮带;
当该未运行的皮带处于停机状态,若该未运行的皮带的下一级不存在已运行的皮带,跳过该未启动的皮带查询该煤流中其他皮带。
作为本申请改进的技术方案,所述顺煤流启动标志采用数字1表示。
作为本申请改进的技术方案,顺煤流启动过程中,采用倒序查询方式进行,即在皮带轮询过程中先启动无下一级皮带的皮带。
作为本申请改进的技术方案,还包括,在启动前,对每条煤流中的所有皮带进行编号,并对每条煤流中皮带还根据编号进行排序;
所述排序包括如下步骤:
获取皮带所在煤流、皮带分级以及皮带编号,并存储于暂存空间中;
申请排序缓存空间,用于皮带排序;
查找暂存空间中煤流的首部皮带,若查找到的首部皮带数量不等于1,则认为配置文件配置的煤流上下级关系存在错误;若找到的首部皮带数量等于1,则将查询到的首部皮带固定于排序缓存首部;
通过查找暂存空间中上级皮带为首部皮带的皮带编号,并将相应皮带编号插入到排序缓存空间中首部皮带编号的尾部;
遍历暂存空间中的皮带编号,检查当前所遍历的皮带的上级是否在排序缓存空间中,如存在则把该皮带编号插入到该皮带的上级皮带编号的尾部。
另一方面,一种矿用带式输送机顺煤流启动设备,包括:
控制器内置有顺煤流启动函数,顺煤流启动函数根据煤流的顺煤流启动标志判断煤流是否执行顺煤流启动;
控制器,接收上位机或外键输入指令控制皮带的启动,并通过显示屏显示该皮带处于启动状态、运行状态或者停机状态。
另一方面,一种矿用带式输送机顺煤流停机控制方法,包括,
顺煤流停机函数进行顺煤流停机控制;
采用顺煤流停机标志表示顺煤流正在停机过程;
采用停机失败标志记录该运行中的皮带有过停机失败;定义,停机失败是指运行中的皮带执行超过设定次数的停机过程均未完成停机,并退出顺煤流停机函数;
采用停机超时标志记录该运行停机中的皮带有过超过预设时间的停机;
顺煤流停机函数遍历煤流皮带,检查正在运行的皮带是否存在停机失败标志或停机超时标志,若存在停机失败标志或停机超时标志则清除该煤流的顺煤流停机标志,退出该顺煤流停机函数;
若不存在停机失败标志与停机超时标志,该运行的皮带的下一级皮带均已停机,则在停机延时到达后进行停机动作,直至该煤流中所有皮带轮询结束;
若不存在停机失败标志与停机超时标志,该运行的皮带的下一级皮带不为停机状态,则跳转该未停机的皮带轮询该煤流中其他皮带,直至该煤流中所有皮带轮询结束。
作为本申请改进的技术方案,所述顺煤流停机标志采用数字1表示。
作为本申请改进的技术方案,还包括,对每条煤流中的皮带进行分级,将每一级中的所有皮带分别进行编号;其中,每条煤流中的首部皮带为上一级皮带编号不属于本条煤流编号的皮带,或每条煤流中的上一级皮带为第三方控制器皮带的皮带,或者每条煤流中无上一级皮带的皮带。
作为本申请改进的技术方案,在停机开始前,还包括对每条煤流中的所有皮带进行编号,并对每条煤流中皮带还根据编号进行排序;
所述排序包括如下步骤:
获取皮带所在煤流、皮带分级以及皮带编号,并存储于暂存空间中;
申请排序缓存空间,用于皮带排序;
查找暂存空间中煤流的首部皮带,若查找到的首部皮带数量不等于1,则认为配置文件配置的煤流上下级关系存在错误;若找到的首部皮带数量等于1,则将查询到的首部皮带固定于排序缓存首部;
通过查找暂存空间中上级皮带为首部皮带的皮带编号,并将相应皮带编号插入到排序缓存空间中首部皮带编号的尾部;
遍历暂存空间中的皮带编号,检查当前所遍历的皮带的上级是否在排序缓存空间中,如存在则把该皮带编号插入到该皮带的上级皮带编号的尾部。
另一方面,一种矿用带式输送机顺煤流停机设备,包括:
控制器内置有顺煤流停机函数,顺煤流停机函数根据煤流的顺煤流启动标志判断煤流是否执行顺煤流启动标志;
控制器,接收上位机或外键输入指令控制皮带的停机,并通过显示屏显示该皮带处于停机失败状态、停机超时状态或者停机过程中。
有益效果
本申请采用煤流启停标志表示煤流正在启动或正在停机,能够清楚完整的表示出每条煤流的状态,适用于煤流工作场中的多分支联动。
尤其是,本申请对煤流中皮带进行分级与编号,能清楚知晓每条皮带所关联的所有煤流,通过一条皮带的状态能分析其关联所有煤流的工作状态。如该皮带处于运行状态,通过分析其在各个煤流的上下级的状态,即能对应得出各煤流的状态;当一条皮带处于故障状态,通过分级与编号能快速推算其关联煤流是否需要停机。
本申请采用煤流启停函数控制煤流启动,分析煤流启动过程中皮带状态能快速的实现煤流启动,即节约了设备布设成本又加快了启停控制速度,保证煤流运行的高效性。
本申请在煤流启动或煤流停机前先进行煤流皮带排序,保证煤流启动或煤流停机时能快速的从无下级的皮带开始启动或停机;而首部皮带的定义,则方便不同煤流之间的切换以及不同采煤工作面和皮带运输关系的切换。
综上,本申请的对煤流进行分级,并设计煤流启动程序与煤流停机程序,解决了现有技术复杂煤流启停复杂的技术问题,实现了煤流多分支联动启停控制以及复杂煤流的快速启停控制技术目的。可完成复杂煤流分支网络启停控制,并在启停过程中有发生异常,可及时退出煤流启停流程。可设定皮带与皮带启停的时间间隔,用户仅需要配置好相应参数,设备自动按照搭建关系执行煤流的启停控制。
应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的申请主题的一部分。
结合附图从下面的描述中可以更加全面地理解本申请教导的前述和其他方面、实施例和特征。本申请的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本申请教导的具体实施方式的实践中得知。
附图说明
图1 绘示本申请顺煤流启停总流程图;
图2 绘示顺煤流启动流程图;
图3 绘示顺煤流停机流程图。
具体实施方式
为使本发明实施例的目的和技术方案更加清楚,下面将结合本发明实施例对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
本申请实施例通过提供一种矿用带式输送机顺煤流启动、停机控制方法及设备,解决现有技术中无法满足多分支联动控制以及对经常变动的采煤工作面和变动的运输皮带搭接关系适应性差的问题。
本申请实施例中的技术方案为解决上述技术问题,总体思路如下:
通过给煤流中所有皮带进行分级,并定义首部皮带,通过线程中顺煤流启停函数(分为顺煤流启动函数与顺煤流停机函数)依据皮带分级对皮带进行分级启动与停机,以保证煤流启停的安全性。具体是:通过线程循环判断煤流的顺煤流启停控制函数,并通过线程中其他函数,来更新,皮带的状态,如告警状态更新,煤流的状态信息,以给顺煤流启停过程中提供最新的状态信息(本申请的重点在于煤流启停,其他信息可采用现有技术进行,因不是本申请的重点且不影响本申请的技术的完整性,故本申请不做阐述)。根据煤流的顺煤流启动标志,判断煤流是否执行顺煤流启动标志;根据煤流的顺煤流停机标志,判断煤流是否执行顺煤流停机标志。
如图1所示,一个顺煤流启停总流程如下:开启一个线程,通过判断用顺煤流启动标志和顺煤流停机标志来表示顺煤流启动和顺煤流停机,当此标志为1(本实施例中顺煤流启动标志和顺煤流停机标志均采用1表示)时说明接收到要启动某条煤流或停止某条煤流;否则无需对煤流操作。线程可以做其他事情,如皮带状态更新,煤流状态判断更新等等。
如图2所示,是一个顺煤流启动流程如下:获取煤流中所有皮带,检查煤流状态是否为已运行。如果状态为已运行说明煤流已启动成功,则清除顺煤流启动标志结束煤流启动过程。如果煤流状态不是已运行状态,则遍历整个煤流检查顺煤流启动标志是否为1。如果当前皮带为已停机,则判断下一级皮带是否为已运行(多个下一级皮带情况下只要一个皮带为已运行则认为为已运行),是则启动当前皮带,否则跳过继续查询当前煤流其他皮带。
如图3所示,是一个顺煤流停机流程如下:采用煤流启停函数,遍历煤流皮带,检查当前皮带是否有停机失败或停机超时标志,有则清除顺煤流停机标志,退出函数执行。没有停机失败且没有停机超时标志,则当前皮带为已运行且下一级皮带都已停机,则查询停机延时(每条皮带停机需要一定时间,下一级皮带停机时间则为其对应的上一级皮带的停机延时时间)是否到达,到达则停机。如皮带状态不是已运行状态,则轮询煤流中其他皮带,如下部皮带状态不是已停机,则轮询煤流中其他皮带,停机延时未到达,则轮询煤流其他皮带。轮询完成后,如所有皮带都已停机则清除停机煤流标志且退出函数执行。
停机失败表示,如所有皮带已发送皮带停机次数超过3次(3次为本实施例设定的次数,当然也可以根据情况设为其他次数)均未能停机。停机失败则清除煤流停机标志且退出函数执行。
本申请技术方案能实现的技术效果:可完成复杂煤流分支网络启停控制,状态实时更新,启停过程中有发生异常,可及时退出煤流启停流程。可设定皮带与皮带启停的时间间隔。用户紧需要配置好相应参数,设备自动按照搭建关系执行煤流的启停控制。
实施例1
如图2所示,一种矿用带式输送机顺煤流启动控制方法,包括,
对每条煤流中的皮带进行分级,每条煤流中的首部皮带为上一级皮带属于其他条煤流的皮带,或每条煤流中的上一级皮带为第三方控制器皮带的皮带,或者每条煤流中无上一级皮带的皮带;
为了实现快速启动,顺煤流启动过程中,采用倒序查询方式进行,即在皮带轮询过程中先启动无下一级皮带的皮带。并采用顺煤流启动标志表示顺煤流启动,为了方便记忆,本实施例中顺煤流启动标志采用数字1表示(本领域技术人员也可以采用任何其他便于记忆的标志)。
为了避免函数执行中的乱码,也为了保证顺煤流启动过程中皮带能够按序执行,在启动前,对每条煤流中的所有皮带进行编号,并对每条煤流中皮带还根据编号进行排序;
所述排序包括如下步骤:
获取皮带所在煤流、皮带分级以及皮带编号,并存储于暂存空间中;
申请排序缓存空间,用于皮带排序;
查找暂存空间中煤流的首部皮带,若查找到的首部皮带数量不等于1,则认为配置文件配置的煤流上下级关系存在错误;若找到的首部皮带数量等于1,则将查询到的首部皮带固定于排序缓存首部;
通过查找暂存空间中上级皮带为首部皮带的皮带编号,并将相应皮带编号插入到排序缓存空间中首部皮带编号的尾部;
遍历暂存空间中的皮带编号,检查当前所遍历的皮带的上级是否在排序缓存空间中,如存在则把该皮带编号插入到该皮带的上级皮带编号的尾部。
排序过程的软件代码如下:
/**
* @brief 根据煤流中皮带ID根据上下级关系进行排序
*
* @param cf 煤流编号
* @return 返回说明
* @retval 排序后皮带ID列表
*/
QVariantList DataBase::funcGetCoalflowBeltIdSort(uint8_t cf)
{
uint8_t beltId, upBeltId;
QVariantMap map, map2, map3;
QVariantList list1;
list1 = DataBase::getCoalFlowTable(cf);
QVariantList beltIdList;
if(list1.size() <= 0)
return beltIdList;
/* 存储当前煤流所有皮带ID */
for(int i=0; i<list1.size(); i++) {
beltId = uint8_t( (list1.at(i).toMap())["BeltId"].toInt() );
map2 = DataBase::getBeltConfig(beltId);
upBeltId = uint8_t( map2["SuperiorId"].toInt() );
if(upBeltId ==0 || upBeltId == 255 || (DataBase::checkCoalFlowTableBeltId(cf, upBeltId) == 0)) {
beltIdList.insert(0, beltId);
}
}
if(beltIdList.size() != 1) {
beltIdList.clear();
qDebug() << "煤流配置错误!";
return beltIdList;
}
/* 存储当前煤流所有皮带ID */
while (list1.size() != beltIdList.size()) {
for(int i=0; i<list1.size(); i++) {
beltId = uint8_t( (list1.at(i).toMap())["BeltId"].toInt() );
map2 = DataBase::getBeltConfig(beltId);
if(map2.isEmpty()) {
beltIdList.clear();
qDebug() << "煤流配置错误, 未发现皮带配置参数!";
return beltIdList;
}
upBeltId = uint8_t( map2["SuperiorId"].toInt() );
if( (beltIdList.indexOf(upBeltId) != -1) && (beltIdList.indexOf(beltId) == -1)) {
beltIdList.insert(beltIdList.indexOf(upBeltId)+1, beltId);
}
}
}
return beltIdList;
}
在执行顺煤流启动时,依赖物理设备进行,所述设备包括:
控制器内置有顺煤流启动函数,顺煤流启动函数根据煤流的顺煤流启动标志判断煤流是否执行顺煤流启动;
控制器,接收上位机或外键输入指令控制皮带的启动,并通过显示屏显示该皮带处于启动状态、运行状态或者停机状态。
顺煤流启动过程包括,获取煤流中所有皮带状态,检查该煤流所有皮带是否全部运行;
若所有皮带全部运行则表示该煤流启动成功,顺煤流启动标志清除;
若存在未运行的皮带,检查该未运行的皮带处于停机状态还是正在启动状态;
当该未运行的皮带处于正在启动中,保留顺煤流启动标志,并跳转该皮带及其上一级皮带轮询该煤流的其他皮带,直至顺煤流启动成功;
当该未运行的皮带处于停机状态,若该未运行的皮带的下一级存在已运行的皮带,则启动该未运行的皮带;
当该未运行的皮带处于停机状态,若该未运行的皮带的下一级不存在已运行的皮带,跳过该未启动的皮带查询该煤流中其他皮带。
本实施例中,顺煤流启停是采用顺煤流启停函数进行,所述顺煤流启动函数的源代码如下:
/**
* @brief 顺煤流启动
*
* @param cf 煤流编号
* @return 无
* @retval 无
*/
void Inquire::funcCoalflowStart(uint8_t cf)
{
QVariantMap map1, map2, map3;
QVariantList list1, list2;
list1 = db.getCoalFlowTable(cf);
if(list1.size() <= 0) {
emit sigCoalFlowStartFailed(cf);
return;
}
map1 = list1.at(0).toMap();
if(checkCoalFlowIsRun(cf)) {
fCoalFlowStartStop[cf-41] = COAL_FLOW_CLEAR_FLAG;
emit sigCoalFlowStartSucess(cf);
return;
} else if(map1["CoalFlowStatus"].toString() == "未就绪") {
fCoalFlowStartStop[cf-41] = COAL_FLOW_CLEAR_FLAG;
emit sigExitCoalFlowStartFormCf(cf);
emit sigCoalFlowStartFailed(cf);
return;
} else if( checkStartStopNumber(cf) == 0) {
bool starting = false;
foreach(QVariant var, list1){
map1 = var.toMap();
QVariantMap map3 = db.getBeltConfig(static_cast<uint8_t>(map1["BeltId"].toInt() ));
if(map3["deviceStatus"] == "启动中") {
starting = true;
break;
}
}
if(!starting) {
fCoalFlowStartStop[cf-41] = COAL_FLOW_CLEAR_FLAG;
}
}
foreach(QVariant var, list1) {
map1 = var.toMap();
if(fCoalFlowStartStop[cf-41] != COAL_FLOW_DIRECT_START){
qDebug() << "fCoalFlowStartStop exit";
return;
}
uint8_t bId = static_cast<uint8_t>( map1["BeltId"].toInt() );
QVariantMap map3 = db.getBeltConfig(bId);
int num = getStartStopNumber(cf, bId);
if(num == COAL_FLOW_START_STOP_TIMES) { continue; }
if( (map3["deviceStatus"] == "启动中") || (map3["deviceStatus"]== "已运行") ){
setStartStopNumber(cf, bId, COAL_FLOW_START_STOP_TIMES);
continue;
}
if( funcBeltLowerStartStartTimeout( cf, bId ) == 0 ) {
if( (map3["deviceStatus"] == "已停机") || (map3["deviceStatus"] == "就绪")) {
if(map1["BeltId"].toInt() >= 31 && map1["BeltId"].toInt()<= 38) {
emit sigSendHostCommand(bId, "顺煤流启动");
} else {
emit sigBeltStart(bId);
}
setStartStopNumber(cf, bId, uint8_t(num+1));
}
}
}
}
本实施例中,先进行煤流中皮带的分级、编号以及排序,有效保证煤流启停函数中的数据是有序的,保证函数执行的快速以及便捷;依赖皮带分级,并采用本实施例的皮带启动控制方法可完成复杂煤流分支网络启停控制,状态实时更新,启停过程中有发生异常,可及时退出煤流启停流程。在皮带处于启动中时采用煤流启动标志1显示,在皮带启动完成后则用0表示清除煤流启动标志,方便操作员对煤流启动的把控。
具体应用,根据煤流表中煤流参数信息对煤流编号上下级关系进行排序。煤流参数原始数据表如表1所示:
表1
其中编号含义如下。
0:代表空数据
-1:代表其他厂家皮带控制器设备。(上级皮带编号为-1则为首部皮带)
1~8:为本单位出的小皮带控制器(KTC155-F1)。
9:为本单位出的大皮带控制器(127A)。
上述表中数据为上位机软件根据现场环境配置所得。每各数值都是可设置无大小先后顺序限制。
图2是本发明实施例查找首部皮带流程,具体包括获取首皮带编号工作原理如下:控制器申请暂存空间用于存储排序后的皮带编号,根据配置表,查找上一级皮带编号为0或-1的皮带(煤流中首部皮带有且只有一条。如出现多条,则为煤流配置错误),或上一级皮带编号不属于本条煤流的编号的皮带(不属于本煤流的皮带编号说明为本控制器下其他煤流的皮带,如二号煤流),则认为是首部皮带,其中0表示无上级皮带,-1表示第三方控制器皮带为上级。如经过遍历排序后查找到的首部皮带数量不等于1则认为配置文件配置的煤流上下级关系存在错误。则返回-1.否则返回0表示查找首部皮带成功。
排序后存储结果如表2所示:
表2
本申请在排序过程中主要包括如下步骤:
步骤1:通过查找分析首部皮带定位首部皮带使其固定在排序缓存空间首部。
步骤2:然后通过查找排序缓存空间中是否存在上级皮带编号存在则把相应皮带编号插入到排序缓存空间相应上级编号的尾部。
步骤3:根据排序缓存空间存储数量来判定是否排序完成。
顺煤流启动过程如下:
第一次执行(煤流启动函数)(假设开始所有皮带都为已停机)
(1)倒叙第一格值为9,且无上级皮带编号为9,则为末尾皮带直接发送启动9号皮带启动命令(此时9号皮带还在启动过程中)
(2)前进一格值为8,有上级编号为8的皮带(如9号的皮带上级为8号),9号不为已运行 -->跳过。
(3)前进一格值为7,且无上级皮带编号为7为末尾皮带,直接发送启动7号皮带启动命令(此时7号皮带还在启动过程中)
(4)前进一格值为5,有上级编号为5的皮带(如7, 8号的皮带上级为5号)7, 8号都不为已运行 -->跳过。
(5)前进一格值为6,且无上级皮带编号为6 为末尾皮带,直接发送启动7号皮带启动命令(此时7号皮带还在启动过程中)
(6)前进一格值为2,有上级编号为2的皮带(如6号的皮带上级为2号)6号不为已运行 -->跳过。
(7)前进一格值为3,有上级编号为3的皮带(如2, 5号的皮带上级为3号)2和5号都不为已运行 -->跳过。
(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号)2号不为已运行 -->跳过。
第二次执行(煤流启动函数)(假设上一次的启动过程中的皮带都变成了已运行)
(1)倒叙第一格值为9,状态为已运行 -->跳过
(2)前进一格值为8,有上级编号为8的皮带(如9号的皮带上级为8号)9号为已运行-->发送启动8号皮带启动命令(此时8号皮带还在启动过程中)
(3)前进一格值为7,状态为已运行 -->跳过
(4)前进一格值为5,有上级编号为5的皮带(如7,8号的皮带上级为5号)7号为已运行 -->发送启动5号皮带启动命令(此时5号皮带还在启动过程中)
(5)前进一格值为6,状态为已运行 -->跳过
(6)前进一格值为2,有上级编号为2的皮带(如6号的皮带上级为2号),6号为已运行 -->发送启动2号皮带启动命令(此时2号皮带还在启动过程中)
(7)前进一格值为3,有上级编号为3的皮带(如2,5号的皮带上级为3号),2和5号不都为已运行 -->跳过。
(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号),2号不为已运行 -->跳过。
第三次执行(煤流启动函数)(假设上一次的启动过程中的皮带 都变成了 已运行)
(1)倒叙第一格值为9,状态为已运行 -->跳过
(2)前进一格值为8,状态为已运行 -->跳过
(3)前进一格值为7,状态为已运行 -->跳过
(4)前进一格值为5,状态为已运行 -->跳过
(5)前进一格值为6,状态为已运行 -->跳过
(6)前进一格值为2,状态为已运行 -->跳过
(7)前进一格值为3,有上级编号为3的皮带(如2号的皮带上级为3号),2和5号为已运行-->发送启动3号皮带启动命令(此时3号皮带还在启动过程中)
(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号),2号不为已运行-->跳过。
第四次执行(煤流启动函数)(假设上一次的启动过程中的皮带都变成了已运行)
(1)倒叙第一格值为9,状态为已运行 -->跳过
(2)前进一格值为8,状态为已运行 -->跳过
(3)前进一格值为7,状态为已运行 -->跳过
(4)前进一格值为5,状态为已运行 -->跳过
(5)前进一格值为6,状态为已运行 -->跳过
(6)前进一格值为2,状态为已运行 -->跳过
(7)前进一格值为3,状态为已运行 -->跳过
(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号),2号为已运行 -->发送启动1号皮带启动命令(此时1号皮带还在启动过程中)。
第五次执行(煤流启动函数)(假设上一次的启动过程中的皮带都变成了已运行)
(1)倒叙第一格值为9,状态为已运行 -->跳过
(2)前进一格值为8,状态为已运行 -->跳过
(3)前进一格值为7,状态为已运行 -->跳过
(4)前进一格值为5,状态为已运行 -->跳过
(5)前进一格值为6,状态为已运行 -->跳过
(6)前进一格值为2,状态为已运行 -->跳过
(7)前进一格值为3,状态为已运行 -->跳过
(8)前进一格值为1,状态为已运行 -->跳过
煤流启动结束:清除顺煤流启动标志
实施例2
如图3所示,一种矿用带式输送机顺煤流停机控制方法,与顺煤流启动相对应,包括,
采用顺煤流停机标志表示顺煤流正在停机过程,本实施例采用数字1表示。
采用停机失败标志记录该运行中的皮带有过停机失败;定义,停机失败是指运行中的皮带执行超过设定次数的停机过程均未完成停机,并退出顺煤流停机函数;
采用停机超时标志记录该运行停机中的皮带有过超过预设时间的停机,该停机超时的时间设定为经验值,也可以根据实际需求设定;
顺煤流停机函数遍历煤流皮带,检查正在运行的皮带是否存在停机失败标志或停机超时标志,若存在停机失败标志或停机超时标志则清除该煤流的顺煤流停机标志,退出该顺煤流停机函数;
若不存在停机失败标志与停机超时标志,该运行的皮带的下一级皮带均已停机,则在停机延时到达后进行停机动作,直至该煤流中所有皮带轮询结束;
若不存在停机失败标志与停机超时标志,该运行的皮带的下一级皮带不为停机状态,则跳转该未停机的皮带轮询该煤流中其他皮带,直至该煤流中所有皮带轮询结束。
本实施例中顺煤流停机函数的源代码如下:
/**
* @brief 顺煤流停机
*
* @param cf 煤流编号
* @return 无
* @retval 无
*/
void Inquire::funcCoalflowStop(uint8_t cf)
{
QVariantMap map1, map2, map3;
QVariantList list1, list2;
list1 = db.getCoalFlowTable(cf);
if(list1.size() <= 0) {
emit sigCoalFlowStopFailed(cf);
return;
}
/* 停机失败检测 */
foreach(QVariant var, list1) {
map1 = var.toMap();
uint8_t beltId = uint8_t(map1["BeltId"].toInt());
if(beltId < 9) {
map2 = db.getBeltConfigTable(beltId);
map3 = db.getF1Status(beltId);
if( (map2["deviceStatus"].toString() == "停机中") && (map3["motor1Fail"].toInt() || map3["motor2Fail"].toInt())) {
fCoalFlowStartStop[cf-41] = COAL_FLOW_CLEAR_FLAG;
emit sigCoalFlowStopFailed(cf);
return;
}
} else if(beltId == 9) {
map2 = db.getBeltAISenserSetTable(uint8_t(map1["BeltId"].toInt()), "电机停机超时");
if(map2["fAlarm"].toInt() == 1) {
fCoalFlowStartStop[cf-41] = COAL_FLOW_CLEAR_FLAG;
emit sigCoalFlowStopFailed(cf);
return;
}
} else if(beltId >=12 && beltId <= 15) {
map2 = db.getBeltConfigTable(beltId);
map3 = db.getF1Status( static_cast<uint8_t>( map2["feederIn"].toInt() ) );
if( (map2["deviceStatus"].toString() == "停机中") && (map3["motor1Fail"].toInt() || map3["motor2Fail"].toInt())) {
fCoalFlowStartStop[cf-41] = COAL_FLOW_CLEAR_FLAG;
emit sigCoalFlowStopFailed(cf);
return;
}
}
}
/* 检查所有皮带是否都已停机 */
if( checkCoalFlowIsStop(cf) ){
fCoalFlowStartStop[cf-41] = COAL_FLOW_CLEAR_FLAG;
emit sigCoalFlowStopSucess(cf);
return;
}
/* 所有皮带执行停机次数都已有三次 */
if( checkStartStopNumber(cf) == 0) {
bool stoping = false;
foreach(QVariant var, list1){
map1 = var.toMap();
QVariantMap map3 = db.getBeltConfig(static_cast<uint8_t>(map1["BeltId"].toInt() ));
if(map3["deviceStatus"] == "停机中") {
stoping = true;
break;
}
}
if(!stoping) {
fCoalFlowStartStop[cf-41] = COAL_FLOW_CLEAR_FLAG;
}
}
foreach(QVariant var, list1) {
map1 = var.toMap();
uint8_t bId = static_cast<uint8_t>( map1["BeltId"].toInt() );
map3 = db.getBeltConfigTable(bId);
int num = getStartStopNumber(cf, bId);
if(num == COAL_FLOW_START_STOP_TIMES) { continue; }
if(bId <31) {
if( (map3["deviceStatus"] == "停机中") || (map3["deviceStatus"] == "已停机") ){
setStartStopNumber(cf, bId, COAL_FLOW_START_STOP_TIMES);
continue;
}
} else {
if(map3["deviceStatus"] == "停机中") {
setStartStopNumber(cf, bId, COAL_FLOW_START_STOP_TIMES);
continue;
}
}
if( funcBeltLowerStopStopTimeout( cf, bId ) == 0 ) {
if(bId >= 31 && bId <= 38) {
emit sigSendHostCommand(bId, "顺煤流停机");
} else {
emit sigBeltStop(bId);
}
setStartStopNumber(cf, bId, uint8_t(num+1));
}
}
}
为了方便顺煤流停机快速进行,在执行顺煤流停机函数前对每条煤流中的皮带进行分级,将每一级中的所有皮带分别进行编号;其中,每条煤流中的首部皮带为上一级皮带编号不属于本条煤流编号的皮带,或每条煤流中的上一级皮带为第三方控制器皮带的皮带,或者每条煤流中无上一级皮带的皮带;每条煤流中皮带还根据编号进行排序。
本实施例中皮带排序:申请排序缓存空间,用于皮带排序;查找煤流中首部皮带,若查找到的首部皮带数量不等于1,则认为配置文件配置的煤流上下级关系存在错误;若找到的首部皮带数量等于1,则将查询到的首部皮带固定于排序缓存空间首部;通过查找缓存空间中上一级皮带为首部皮带的皮带编号,并将相应皮带编号插入到排序缓存空间中首部皮带编号的尾部;通过查找排序缓存空间中是否还存在皮带编号,存在则把相应皮带编号插入到排序缓存空间相应上一级皮带编号的尾部。
本申请的另一目的是提供一种矿用带式输送机顺煤流停机设备,包括:
控制器内置有顺煤流停机函数,顺煤流停机函数根据煤流的顺煤流启动标志判断煤流是否执行顺煤流启动标志;
控制器,接收上位机或外键输入指令控制皮带的停机,并通过显示屏显示该皮带处于停机失败状态、停机超时状态或者停机过程中。
具体应用:
对表2皮带进行顺煤流停机,采用倒叙查询:
第一次执行(煤流停机函数)(假设开始所有皮带都为已停机)
(1)倒叙第一格值为9,且无上级皮带编号为9则为末尾皮带,直接发送9号皮带停机命令(此时9号皮带还在停机过程中)
(2)前进一格值为8,有上级编号为8的皮带(如9号的皮带上级为8号)9号不为已停机 -->跳过。
(3)前进一格值为7,且无上级皮带编号为7为末尾皮带,直接发送7号皮带停机命令(此时7号皮带还在停机过程中)
(4)前进一格值为5,有上级编号为5的皮带(如7, 8号的皮带上级为5号)7,8号有都不为已停机 -->跳过。
(5)前进一格值为6,且无上级皮带编号为6 为末尾皮带,直接发送6号皮带停机命令(此时6号皮带还在停机过程中)
(6)前进一格值为2,有上级编号为2的皮带(如6号的皮带上级为2号)6号不为已停机 -->跳过。
(7)前进一格值为3,有上级编号为3的皮带(如2号的皮带上级为3号)2号不为已停机 -->跳过。
(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号)2号不为已停机 -->跳过。
第二次执行(煤流停机函数)(假设上一次的停机过程中的皮带都变成了已停机)
(1)倒叙第一格值为9,状态为已停机 -->跳过
(2)前进一格值为8,有上级编号为8的皮带(如9号的皮带上级为8号)9号为已停机-->发送8号皮带停机命令(此时8号皮带还在停机过程中)
(3)前进一格值为7,状态为已停机 -->跳过
(4)前进一格值为5,有上级编号为5的皮带(如7, 8号的皮带上级为5号)8号为不为已停机 -->跳过
(5)前进一格值为6,状态为已停机 -->跳过
(6)前进一格值为2,有上级编号为2的皮带(如6号的皮带上级为2号)6号为已停机-->发送2号皮带停机命令(此时2号皮带还在停机过程中)
(7)前进一格值为3,有上级编号为3的皮带(如2, 5号的皮带上级为3号)2和5号都不为已停机 -->跳过。
(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号)2号不为已停机 -->跳过。
第三次执行(煤流停机函数)(假设上一次的停机过程中的皮带 都变成了 已停机)
(1)倒叙第一格值为9,状态为已停机 -->跳过
(2)前进一格值为8,状态为已停机 -->跳过
(3)前进一格值为7,状态为已停机 -->跳过
(4)前进一格值为5,有上级编号为5的皮带(如7, 8号的皮带上级为5号)7,8号为,都为已停机 -->发送5号皮带停机命令(此时5号皮带还在停机过程中)
(5)前进一格值为6,状态为已停机 -->跳过
(6)前进一格值为2,状态为已停机 -->跳过
(7)前进一格值为3,有上级编号为3的皮带(如2, 5号的皮带上级为3号)5号不为已停机 -->跳过。
(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号)2号不为已停机 -->跳过。
第四次执行(煤流停机函数)(假设上一次的停机过程中的皮带 都变成了 已停机)
(1)倒叙第一格值为9,状态为已停机 -->跳过
(2)前进一格值为8,状态为已停机 -->跳过
(3)前进一格值为7,状态为已停机 -->跳过
(4)前进一格值为5,状态为已停机 -->跳过
(5)前进一格值为6,状态为已停机 -->跳过
(6)前进一格值为2,状态为已停机 -->跳过
(7)前进一格值为3,有上级编号为3的皮带(如2, 5号的皮带上级为3号)
2和5号都为已停机-->发送3号皮带停机命令(此时3号皮带还在停机过程中)(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号)2号不为已停机 -->跳过
第五次执行(煤流停机函数)(假设上一次的停机过程中的皮带 都变成了 已停机)
(1)倒叙第一格值为9,状态为已停机 -->跳过
(2)前进一格值为8,状态为已停机 -->跳过
(3)前进一格值为7,状态为已停机 -->跳过
(4)前进一格值为5,状态为已停机 -->跳过
(5)前进一格值为6,状态为已停机 -->跳过
(6)前进一格值为2,状态为已停机 -->跳过
(7)前进一格值为3,状态为已停机 -->跳过
(8)前进一格值为1,有上级编号为1的皮带(如3号的皮带上级为1号)2号为已停机--》发送1号皮带停机命令(此时1号皮带还在停机过程中)
第六次执行(煤流停机函数)(假设上一次的停机过程中的皮带 都变成了已停机)
(1)倒叙第一格值为9,状态为已停机 -->跳过
(2)前进一格值为8,状态为已停机 -->跳过
(3)前进一格值为7,状态为已停机 -->跳过
(4)前进一格值为5,状态为已停机 -->跳过
(5)前进一格值为6,状态为已停机 -->跳过
(6)前进一格值为2,状态为已停机 -->跳过
(7)前进一格值为3,状态为已停机 -->跳过
(8)前进一格值为1,状态为已停机 -->跳过
煤流停机结束:清除煤流停机标志
虽然本申请已以较佳实施例揭露如上,然其并非用以限定本申请。本申请所属技术领域中具有通常知识者,在不脱离本申请的精神和范围内,当可作各种的更动与润饰。因此,本申请的保护范围当视权利要求书所界定者为准。
声明:
“矿用带式输送机顺煤流启动、停机控制方法及设备” 该技术专利(论文)所有权利归属于技术(论文)所有人。仅供学习研究,如用于商业用途,请联系该技术所有人。
我是此专利(论文)的发明人(作者)