分拣机中的产品 ID 跟踪(PLC 编程)

Product ID tracking in a sorter machine (PLC programming)

我正在为包裹分拣机编写 PLC 程序(Q 系列三菱 PLC,GXWORKS 2 软件)。机器逻辑如下:

1.Packages在传送带中被感应。条形码 reader 扫描仪获取包裹条形码。

2.Barcode发送到我们的SMS(分拣管理系统),它计算出口并发送回PLC。

3.Package 行进到计算出的出口,然后进入滑道。

产品的跟踪是由编码器和移位寄存器完成的。这意味着每个内存地址都代表传送带中的一个物理位置。然后,移位寄存器将代表包的位沿着内存缓冲区移动,直到该位到达代表出口的地址,这样就可以导出包。

我的问题不是产品追踪问题,而是产品ID追踪问题:

当包裹进入传送带时,会为该产品设置一个 ID (1,2,...,n)。这个想法是这个 ID 用于跟踪该包裹的状态,例如包裹是否在正确的出口处派生,是否有损坏的条形码等。

我的问题是,如何才能有效地跟踪此 ID。我在考虑使用同一个移位寄存器,不移动一个位,而是移动一个更大的数字,例如 |1|0000011|,其中第一位就像一个标志,代表产品的存在,其余数字是产品编号。当标志到达出口地址时,我可以减去 10000011 - 10000000 = 00000011,以获得产品 ID。

有没有更有效的方法来做到这一点?

编码器部分我不太清楚,所以我用nr x 个传感器代替它。 也许你可以解释得更好,然后我会更新答案。

现在,让我们想象一个简单的输送机模型:

        S           S               S
        |           |               |EXIT
---------------------------------------------------
    x           x   x           x
---------------------------------------------------
  • x 是传送带上的包裹
  • s 是传送带上的传感器
  • EXIT 是包退出的地方

您可以创建一个代表包的功能块:FB_Package

FB_Package 具有以下数据结构:

TYPE ST_Package :
STRUCT
    sBarcode : STRING;
    eLocation : E_ConveyorLocation;
    eState : E_PackageState;
    uiPackageID: UINT;
END_STRUCT
END_TYPE

然后你可以创建一个 FB_Conveyor,has/or 管理一个 FB_Packages

的数组

FB_Package 有一个步骤链,用于检查传送带上的当前位置。 每次它从传送带接收到一个新位置时,它都会在其步骤链中检查该位置是否合理,考虑到当前位置(例如,到达下一个位置的时间范围以及接收到的位置是否在当前位置之后)。 如果检查成功,包会更新它的位置,并且当到达最后一个位置时,fbPackage 实例会将其状态更改为 ePackageExited。

fbConveyor 实例识别出包裹已退出传送带并重置其在数组中的实例。

如您所见,我将 ENUMS 用于包位置和状态,因为它们是人类可读的,并且比以字节为单位移动位更容易理解您的代码。