# `Sp_PLC_ScanInsertToERP` (procedure)

> @author:zhucx
		 @date:20210817 封存
		@describe:PLC服务器调用


- **Type:** PROCEDURE
- **Deterministic:** NO
- **SQL data access:** CONTAINS SQL

## Parameters

| # | Mode | Name | Type |
|---|---|---|---|
| 1 | IN | `sBrId` | `varchar(100)` |
| 2 | IN | `sSuId` | `varchar(100)` |
| 3 | IN | `sPlcAddr` | `longtext` |
| 4 | IN | `sValues` | `longtext` |

## Body

_Body is not pre-cached. To inspect: `mysql --defaults-file=~/.my.cnf -e 'SHOW CREATE PROCEDURE `Sp_PLC_ScanInsertToERP`'`._

## Narrative

**Business context:** 设备 / PLC 信号采集 — main entry called by the external PLC server to push a tick of raw signal data into ERP (proc COMMENT: "PLC服务器调用", dated 20210817 封存 / sealed). Decodes a pipe/comma-delimited address+value payload per 西门子 controller, reconciles it against the ERP-side state in `plc_currentmachinevalue`, and detects work-order/shift changes, alarm conditions, and production-count deltas to keep `mftproductionplanslave` / `mftproductionreport` in sync with the physical machines.

**What it does:** Outer loop splits `sPlcAddr` / `sValues` by `|` (one segment per controller); for each segment the first comma-separated token is `iSemens`, and the rest is address/value pairs. For each address, looks up `viw_plc_machine` (joining `plc_currentmachinevalue` to `elemachine`) to find the matching `sPlcsStatusName` slot, then updates `plc_currentmachinevalue.sPlcsStatusValue`. Branches on `sPlcsStatusName`: 合格数 sets ERP/PLC counters; 当前工单号 / 当前班组 compare PLC vs ERP value, set `p_bBill`/`p_bShift` flags, and look up the corresponding `mftproductionplanslave` row by `sSrcNo`+`sMachineId`; 当前设备状态 captures the device state; PH值 / 电导率 / 酒精 range-check against `dMin/dMax` and write `'ERP警报'` codes 5/4/7 when out of range. The result is a partially reconciled snapshot that downstream procs use to drive production-report writes.

**Invocation:** Status: appears orphaned at the DB layer — no `gdsmodule.sProcName` binding, no form-master sSqlStr reference, no other-routine caller, no callable Java reference. The commented-out `-- CALL Sp_PLC_ScanInsertToERP('','')` lines inside many `Sp_bd_*.sql` / `Sp_chart_*.sql` source files in `xly-src/script/标版/30100101/` are dead invocation hints, not live callers. The proc header marks it 封存 (sealed) and a customer override exists at `xly-src/script/客户/亚明威/Sp_PLC_ScanInsertToERP.sql`. The historical caller was an external PLC service hitting the DB directly — verify with operations before relying on it.
