技术领域
[0001] 本发明属于数据处理技术领域,具体涉及一种料仓内物料批次动态定位方法。
相关背景技术
[0002] 在工业生产过程中,料仓是存储和管理各种物料的重要设施。为了保证生产的连续性和产品质量,对料仓内物料的批次进行有效管理至关重要。当前,通常采用依赖于进料和出料时间顺序的方法来管理料仓内的物料批次。这种方法在烧结生产中存在某些缺陷。
[0003] 首先难以精确定位每一批次在料仓内的具体位置,尤其在处理多批次物料或者单批次物料进入不同料仓时容易出现混乱。其次传统监控手段主要基于进出料记录,无法实时、准确地反映料仓内不同批次物料的分布情况。手动记录和管理批次信息的方式效率也较低下,容易出现因人为操作失误导致批次信息记录错误或丢失的情况。
具体实施方式
[0050] 为使本发明采用的技术手段和达成目的易于明白了解,下面结合具体实施方式,进一步阐述本发明,一种料仓内物料批次动态定位方法,硬件上采用常规计算机系统作为数据处理和存储平台,配备高性能处理器和大容量存储设备。通过OPC协议接入PLC(可编程逻辑控制器)生产数据,实时采集料仓的相关数据。软件上使用Python开发批次定位算法;使用MongoDB数据库存储时序数据。
[0051] 如图1所示,具体包括如下步骤:
[0052] 1)数据采集及定义:通过指定时间周期采集某料仓关于进料和出料的相关数据。具体如下:
[0053] 料仓料位,定义为Lever,单位为吨(t);
[0054] 料仓物料分层及成分信息,定义为Lever_MAT,字符串类型,第一次计算时,识别为NULL;
[0055] 出料量,定义为Outflow,单位为吨(t);
[0056] 出料速度,定义为OutflowSpeed,单位为吨每小时(t/h);
[0057] 时间周期,定义为T,单位为分钟(min);
[0058] 物料成分,定义为M,字符串类型。
[0059] 变量名称(T),代表当前时间的变量值;变量名称(T‑1),代表上个时间周期的变量值;变量名称(T+1),代表下个时间周期变量值,即更新后的数据。
[0060] 2)料仓物料分层及成分信息(Lever_MAT)数据存储的格式:
[0061] 利用MongoDB数据库存储料仓物料分层成分信息时序数据,每条记录包含以下字段信息内容:
[0062] 物料成分(M):物料的各成分的含量信息,比如CaO,MgO等成分的含量;
[0063] 起始料位(start_Lever_i):料仓内第i层物料的起点位置。
[0064] 终止料位(end_Lever_i):料仓内第i层物料的终点位置。
[0065] 时间戳(Timestamp):数据记录时间,格式为字符串类型(ISO8601标准)。用时间戳标识原料的批次。
[0066] 数据存储格式说明:[{[批次1物料成分],批次1起始料位,批次1终止料位,时间戳},{[批次2物料成分],批次2起始料位,批次2终止料位,时间戳},……]
[0067] 数据存储格式示例:[{[20,13,21,13,24],0,23,1718638810},{[21,12,13,14,21],23,30,1718638908},……]
[0068] 3)根据批次定位算法对新周期料仓物料分层及成分信息Lever_MAT(T+1)进行计算及更新:采用传统的批次管理算法,依赖时间顺序和进出料数据,对料仓内各批次物料进行定位。每个时间周期进行一次以下计算
[0069] 获取当前料仓物料分层成分信息数据(Lever_MAT(T)),判断其是否为NULL。如果为NULL,则代表料仓中没有物料,否则代表有物料。
[0070] A.如果该料仓中没有物料:
[0071] 新进料即料仓内第一层物料,该情况不考虑出料量(Outflow),第一层物料的起始料位(start_Lever_1)为0,终止料位(end_Lever_1)为当前料位Lever(T),物料成分(M)为当前成分M(T),同时获取当前时间戳Timestamp(T)。即料仓物料分层成分信息数据为:
[0072] Lever_MAT(T+1)=“[{[M(T)],0,Lever(T),Timestamp(T)}]”
[0073] B.如果该料仓中有原料(假设有2层物料):
[0074] 获取到料仓出料量及该料仓当前的物料分层信息后,首先计算出料量:
[0075] 出料量(Outflow)=出料速度(OutflowSpeed)*时间周期(T)
[0076] 然后对料仓内各层物料的起始料位和终止料位进行循环计算:
[0077] 各层物料新起始料位为该层物料的起始料位减去该时间周期的出料量,即:
[0078] start_Lever_i(T+1)=start_Lever_i(T)‑Outflow(T)。
[0079] 如果起始料位小于0,则记为0;
[0080] 各层物料新终止料位为该层物料的终止料位减去该时间周期的出料量,即:
[0081] end_Lever_i(T+1)=end_Lever_i(T)‑Outflow(T)。
[0082] 如果终止料位小于0,则代表该层物料已经消耗完毕,则删除该层物料。
[0083] 将当前的物料分层信息数据进行处理,取出料仓中最上层物料成分信息,与进料的物料成分信息进行对比,判断新进料是原批次还是新批次。
[0084] 如果新进料成分与料仓内最上层物料成分相同,则新进料是原批次:
[0085] 将最上层物料的终止料位更新为当前料位Lever(T)。由于不是新的批次所以不更改时间戳,则料仓物料分层及成分信息新周期数据为:
[0086] Lever_MAT(T+1)=“[{M1(T),0,end_Lever_1(T+1)},{[M2(T)],end_Lever_1(T+1),Lever(T),Timestamp(T)}]”
[0087] ii)如果新进料成分与料仓内最上层物料成分不相同,则新进料是新批次:
[0088] 则料仓内物料将由2层变为3层,第三层物料的起始料位(start_Lever_3)为第二层物料的终止料位(end_lever_2),第三层物料的终止料位(end_Lever_3)是当前料位Lever(T),物料成分(M)为当前成分M(T),同时获取当前时间戳Timestamp(t)。料仓物料分层及成分信息新周期数据为:
[0089] Lever_MAT(T+1)=“[{[M_1],0,end_Lever_1(T+1),Timestamp_1},{[M_2],start_Leve r_2(T+1),end_Lever_2(T+1),Timestamp_2},{[M(T)],end_Lever_2(T+1),Lever(T),Timestamp(T)}]”
[0090] 将计算新周期的料仓物料分层及成分信息Lever_MAT(T+1)存储到MongoDB数据库中。
[0091] 4)动态定位结果展示:
[0092] 利用数据可视化工具,将MongoDB中的时序数据实时展示,直观显示料仓内物料批次的动态分布情况。
[0093] 以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,根据本发明的技术方案及其构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。