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
今日产量
GET /api/MesData/todayproductcount
无参数。返回今日日报:recodData 日期,totalProductQtyAtW01 进料总,totalProductQtyAtlast 出料总,totalOKQtyAtlast 良品总,averageOKRate 良品率。
按序列号查产品
GET /api/MesData/productbyserialnumber?serialnumber={正整数}
在主库和备份库中按序列号查产品明细。示例:/api/MesData/productbyserialnumber?serialnumber=10001
按序列号范围查产品
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。