ERP对接,与IT工程师的约定

MesEyes 保存产线事实数据,并把产量、单件追溯和工位状态提供给 ERP 或看板。可以查询 HTTP 接口,也可以用 HTTP 或 MQTT 下发计划和停线。

ERP 继续管订单、排产和出入库。MesEyes 提供产线上已经发生的数据:这件产品是谁、过了哪些工位、结果如何、今天做了多少。IT 侧取这些数据做报表或回写,不必再从 PLC 地址里解析。

能提供的数据

  • 单件追溯:按序列号或客户编号返回各工位明细。
  • 最近产品:最近最多 1000 条产品明细。
  • 今日产量:进料总数、出料总数、良品总数、良品率。
  • 工位当前状态:指定工位此刻的内存数据。
  • 工位历史表:该工位数据库表中的全部行。

数据怎么进来

  • 接收 PLC 按约定写好的产品记录、工位状态和报警。
  • 校验之后分别进入产品追溯、工位状态和事件记录。
  • 看板读当前状态和今日产量,ERP 按序列号或客户编号来取单件结果。

API查询接口

当配置EnableWeb 为 true 时,现场工控机监听 http://*:80,端口由 httpPort 决定,默认 80。其它电脑访问时在路径前加上该地址。下面这些查询都是 GET,无需密钥,返回 JSON。属性名是驼峰。查表得到的是数组,一行一个对象,键名保持数据库列名。失败时返回 { "error": "说明" },参数错误为 400,找不到数据为 404。

当前工位状态

GET /api/MesData/currentwsstate?ws={工位键名}

ws 必填,取软件内工位模型的类型名。返回该工位当前内存数据。示例:/api/MesData/currentwsstate?ws=LineStateRead

工位数据库表

GET /api/MesData/databasetable?ws={表名}

ws 必填,且必须是工位键名,同时作为数据库表名。返回该表全部行。示例:/api/MesData/databasetable?ws=WSLast

API示例
API示例

今日产量

GET /api/MesData/todayproductcount

无参数。返回今日日报:recodData 日期,totalProductQtyAtW01 进料总,totalProductQtyAtlast 出料总,totalOKQtyAtlast 良品总,averageOKRate 良品率。

按序列号查产品

GET /api/MesData/productbyserialnumber?serialnumber={正整数}

在主库和备份库中按序列号查产品明细。示例:/api/MesData/productbyserialnumber?serialnumber=10001

API示例
API示例

按序列号范围查产品

GET /api/MesData/productbyserialnumberrange?min={正整数}&max={正整数}

max 不能小于 min。从 min 起查询,最多 1000 条,且不超过 max。

按客户编号查产品

GET /api/MesData/productbycustomernumber?customernumber={客户编号}

先用客户编号找到序列号,再返回该产品明细。编号前后空格会去掉。

最近产品

GET /api/MesData/products1000

无参数。返回最近的产品明细,最多 1000 条。

写入接口

下面三个是 POST。请求头 MesEyes-Api-Key 必须与配置文件里的 ApiKey 逐字相同。密钥为空时返回 401,正文 { "error": "未配置接口密钥" }。密钥不对时同样是 401,正文 { "error": "接口密钥无效" }。请求体是 JSON,属性名用驼峰,大小写不敏感。成功时返回 { "success": true }。

保存计划列表

POST /api/MesData/ProductPlan/SavePlanlist

正文是计划数组,用它整表替换现有计划。空数组返回 400,正文 { "error": "保存失败" },不会把原计划清掉。parameterNum 为 1 到 99。customerWO、woDescription、parameterDescription 最长 30,state 最长 20。另有 planDate 日期。

设为当前计划

POST /api/MesData/ProductPlan/SetActivePlan

正文是一条计划。用 id、customerWO、parameterNum、productPlanQty 在已保存的计划里查找,四项都相同才生效,然后把库里的这一条设为当前计划。找不到返回 404,正文 { "error": "未找到匹配的计划" }。

停线

POST /api/MesData/SetLineCMDWrite

正文 { "stopMachine": 1 }。stopMachine 不是 1 时返回 400,正文 { "error": "StopMachine 必须为 1" }。写入成功后,产线按原有停线处理。

MQTT 上报

工控机作为 MQTT 客户端。配置文件中总开关EnableIOT 为 true 时才连接。每种数据有自己的主题,主题里带产线编号。

{
  "IOTReportSettings": {
    "EnableIOT": true,
    "EnCurrentStateUp": true,
    "EnDataSavedUp": true,
    "EnNewProductUp": true,
    "EnAlarmUp": false,
    "EnEventUp": false,
    "EnDailyReportUp": false,
    "MqttParameter": {
      "ClientID": "meseyes-line1",
      "Username": "meseyes",
      "Password": "",
      "ServerIP": "192.168.1.10",
      "ServerPort": 1883,
      "Version": "3.1.1",
      "LineId": "L1"
    }
  }
}

连接

  • ServerIP、ServerPort:Broker 地址。端口默认 1883,明文 TCP,不启用 TLS,默认Broker及链路是安全的,受用户完全控制。
  • ClientID、Username、Password:客户端标识和账号。
  • Version:字符串里含 3.1 时用 MQTT 3.1.1,否则用 5.0。默认 3.1.1。
  • LineId:产线编号,写进主题。空白时用 L1。

心跳 60 秒,清理会话。掉线后每 5 秒重连。QoS 为 0。内存里最多排 1000 条,写满时丢掉最新的一条。发布时若还没连上 Broker,这一条不会补发。

主题

下面用 {线} 表示 LineId。载荷是 JSON 文本。属性名与程序一致,首字母大写。时间是本地时间的 ISO 8601。开关为 false 时不发。当前状态和整机产品在 Broker 上保留最后一条,后订阅的客户端能立刻拿到。其余主题不保留。

  • meseyes/{线}/datasaved/{类型名}:开关 EnDataSavedUp,默认关闭。序列号变为非 0,并且这一行写入数据库成功后发出。{类型名} 是工位模型名,例如 ProductSelf、WSLast。
  • meseyes/{线}/newproduct:开关 EnNewProductUp,默认关闭。末工位保存成功后,按该序列号查出整机明细再发出。报文与「按序列号查产品」相同,是 JSON 数组,键名是数据库列名。查不到时不发。
  • meseyes/{线}/currentstate/{类型名}:开关 EnCurrentStateUp,默认开启。每 2 秒比较一次,内容有变化才发。类型名是 LineStateRead,或进料、工位、出料的模型名。
  • meseyes/{线}/alarm:开关 EnAlarmUp,默认关闭。
  • meseyes/{线}/event:开关 EnEventUp,默认关闭。
  • meseyes/{线}/dailyreport:开关 EnDailyReportUp,默认关闭。

工位保存

主题 datasaved。进料 ProductSelf 出料 WSLast 中间工位是该工位模型,加工参数随项目而定。

当前状态

主题 currentstate,报文就是该模型本身。LineStateRead 的主要字段:CustomerWO 工单,ParameterNum 与 ParameterDescription 参数,EmployeeID 员工, 产线状态。工位报文与上面的工位保存相同,取的是此刻内存里的值。

报警

主题 alarm。自动且报警位发生变化时发出。WorkstationName 是工位类型名,StateString 是状态字,HappeningTime 是发生时间。状态字的位定义见 与 PLC 工程师的约定。

事件

主题 event。字段为 EventName、DetailDescription、HappeningTime。程序启动时 EventName 为 System Start,说明为 This MESEyes Start。退出时为 System Stop / This MESEyes Stop。收到停线命令时为 StopLineCMDCome / SQL StopLineCMD changed to 1。名称最长 20 字,说明最长 100 字。

日报

主题 dailyreport字段与今日产量接口相同,属性名首字母大写:RecodData、TotalProductQtyAtW01、TotalProductQtyAtlast、TotalOKQtyAtlast、AverageOKRate。

MQTT订阅下行

EnableIOT 为 true 时订阅下面三个主题。报文属性名大小写都可以,没有应答,也不校验 HTTP 的接口密钥。对不上的内容只记日志。

  • meseyes/{线}/ProductPlan/PlanListSet:计划数组,整表替换现有计划,规则与「保存计划列表」相同。
  • meseyes/{线}/ProductPlan/ActivePlanSet:一条计划。用 ID、CustomerWO、ParameterNum、ProductPlanQty 四项匹配已保存的计划,匹配上才设为当前计划。
  • meseyes/{线}/LineCMDWrite:{"StopMachine":1}。写入产线命令后,按原有停线处理。

数据库直接操作

MesEyes自带的数据库是开放的,支持直接查询和更新数据。从配置文件中可以获取数据库连接参数。任何符合数据库结构的查询和更新操作都可以直接进行。

生产计划可以用 HTTP 或 MQTT 整表写入,再用其中一条设为当前计划。查询接口只读取产线结果。停线走 HTTP 的 SetLineCMDWrite,或 MQTT 的 LineCMDWrite。

An unhandled error has occurred. Reload 🗙