feat: 增加LG/TCS-AGV接口并完善物料校验与Function逻辑

This commit is contained in:
XingCheng3
2026-07-16 16:47:45 +08:00
parent 7303ddde9a
commit 8e44e11248
74 changed files with 4324 additions and 1091 deletions

View File

@@ -1,95 +0,0 @@
-- 现场总装数据库MESBasicDB_XD_ZZ
-- 用途:支持 AGV lower/raise 回调与 PLC 允许下降/举升放行查询。
-- 说明:请在目标库手工执行。本脚本不直接修改 AGV_光栅请求记录 表结构。
SET NOCOUNT ON;
GO
-- 1. 增加变量类型代码。500/501 是 MES 写 PLC 请求位550/551 是 PLC 允许位。
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_基本变量变量类型代码] WHERE [] = 500)
BEGIN
INSERT INTO [dbo].[MES_基本变量变量类型代码]
([], [TagTypeDataType], [TagName], [], [TagTypeChange], [MesTagTypeChange], [WebTagTypeChange], [], [])
VALUES
(N'X', 11, N'AGV请求下降', 500, 1, 0, 1, N'AGV请求下降', N'AGV请求下降');
END
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_基本变量变量类型代码] WHERE [] = 501)
BEGIN
INSERT INTO [dbo].[MES_基本变量变量类型代码]
([], [TagTypeDataType], [TagName], [], [TagTypeChange], [MesTagTypeChange], [WebTagTypeChange], [], [])
VALUES
(N'X', 11, N'AGV请求举升', 501, 1, 0, 1, N'AGV请求举升', N'AGV请求举升');
END
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_基本变量变量类型代码] WHERE [] = 550)
BEGIN
INSERT INTO [dbo].[MES_基本变量变量类型代码]
([], [TagTypeDataType], [TagName], [], [TagTypeChange], [MesTagTypeChange], [WebTagTypeChange], [], [])
VALUES
(N'X', 11, N'允许AGV下降', 550, 1, 0, 1, N'允许AGV下降', N'允许AGV下降');
END
IF NOT EXISTS (SELECT 1 FROM [dbo].[MES_基本变量变量类型代码] WHERE [] = 551)
BEGIN
INSERT INTO [dbo].[MES_基本变量变量类型代码]
([], [TagTypeDataType], [TagName], [], [TagTypeChange], [MesTagTypeChange], [WebTagTypeChange], [], [])
VALUES
(N'X', 11, N'允许AGV举升', 551, 1, 0, 1, N'允许AGV举升', N'允许AGV举升');
END
GO
-- 2. 扩展 AGV continueTask 放行查询。
-- apply/release 保持原有 XD_库位Moby 查询。
-- lower/raise 从 AGV_光栅请求记录 取最新未允许或最近请求,避免改动 XD_库位Moby 与历史表列顺序。
ALTER PROCEDURE [dbo].[AGV_允许进入离开_查询]
@opName nvarchar(50) = 'AC0901-02',
@engineID nvarchar(50) = '0',
@type nvarchar(50) = 'apply'
AS
BEGIN
SET NOCOUNT ON;
IF (@type = 'apply')
BEGIN
SELECT [req] AS reqCode, [task] AS taskCode
FROM [dbo].[XD_库位Moby]
WHERE [] = @opName
AND [AGV请求进入时间] IS NOT NULL;
END
IF (@type = 'release')
BEGIN
SELECT [req] AS reqCode, [task] AS taskCode
FROM [dbo].[XD_库位Moby]
WHERE [] = @opName
AND [AGV请求离开时间] IS NOT NULL;
END
IF (@type = 'lower')
BEGIN
SELECT TOP 1 [reqCode], [taskCode]
FROM [dbo].[AGV_光栅请求记录]
WHERE [method] = 'lower'
AND (
[currentPositionCode] = @opName
OR [currentPositionCode] LIKE @opName + N'[_]%'
OR [wbCode] = @opName
)
ORDER BY ISNULL([], 0) ASC, [] DESC, [ID] DESC;
END
IF (@type = 'raise')
BEGIN
SELECT TOP 1 [reqCode], [taskCode]
FROM [dbo].[AGV_光栅请求记录]
WHERE [method] = 'raise'
AND (
[currentPositionCode] = @opName
OR [currentPositionCode] LIKE @opName + N'[_]%'
OR [wbCode] = @opName
)
ORDER BY ISNULL([], 0) ASC, [] DESC, [ID] DESC;
END
END
GO

View File

@@ -0,0 +1,115 @@
import http from 'node:http'
const host = '127.0.0.1'
const port = Number(process.env.TCS_MOCK_PORT || 18080)
const tasks = new Map()
const sendJson = (response, payload, statusCode = 200) => {
response.writeHead(statusCode, { 'Content-Type': 'application/json; charset=utf-8' })
response.end(JSON.stringify(payload))
}
const success = result => ({
success: true,
message: '仿真接口调用成功',
code: 200,
result,
timestamp: Date.now()
})
const readBody = request => new Promise((resolve, reject) => {
let body = ''
request.setEncoding('utf8')
request.on('data', chunk => { body += chunk })
request.on('end', () => {
if (!body) {
resolve({})
return
}
try {
resolve(JSON.parse(body))
} catch (error) {
reject(error)
}
})
request.on('error', reject)
})
const server = http.createServer(async (request, response) => {
const url = new URL(request.url, `http://${host}:${port}`)
try {
if (request.method === 'POST' && url.pathname === '/api/createExternalBusinessTask') {
const body = await readBody(request)
tasks.set(body.externalCode, body)
console.log('CREATE', JSON.stringify(body))
sendJson(response, success({ externalCode: body.externalCode }))
return
}
if (request.method === 'GET' && url.pathname === '/api/getExternalBusinessTaskStatus') {
const externalCode = url.searchParams.get('externalCode') || ''
sendJson(response, success([{
externalCode,
status: '1',
ip: '10.146.79.9',
type: tasks.get(externalCode)?.type || 'nav_action_program',
beginTime: '2026-07-13 14:40:00',
endTime: '',
remark: '仿真状态同步'
}]))
return
}
if (request.method === 'GET' && url.pathname === '/api/getMcrInfo') {
sendJson(response, success([{
name: 'AGV-01',
ip: '10.146.79.9',
speed: 0,
power: 80,
autoCharging: '1',
chargingThreshold: 20,
status: '0',
currentPos: 'S000214',
control: '1',
CameraInfo: ''
}]))
return
}
const successfulGetRoutes = new Set([
'/api/cancelExternalBusinessTask',
'/api/stopExternalBusinessTask',
'/api/reset',
'/api/stopNow'
])
if (request.method === 'GET' && successfulGetRoutes.has(url.pathname)) {
console.log('GET', url.pathname, url.search)
sendJson(response, success('成功'))
return
}
sendJson(response, {
success: false,
message: `未实现的仿真路由:${request.method} ${url.pathname}`,
code: 500,
result: null,
timestamp: Date.now()
}, 404)
} catch (error) {
sendJson(response, {
success: false,
message: error.message,
code: 500,
result: null,
timestamp: Date.now()
}, 500)
}
})
server.listen(port, host, () => {
console.log(`TCS AGV mock listening on http://${host}:${port}`)
})
const close = () => server.close(() => process.exit(0))
process.on('SIGINT', close)
process.on('SIGTERM', close)

View File

@@ -0,0 +1,711 @@
SET NOCOUNT ON
GO
IF OBJECT_ID(N'dbo.XD_TCS_AGV_配置', N'U') IS NULL
BEGIN
CREATE TABLE dbo.XD_TCS_AGV_配置
(
nvarchar(50) NOT NULL CONSTRAINT PK_XD_TCS_AGV_配置 PRIMARY KEY,
nvarchar(500) NOT NULL,
nvarchar(200) NULL,
bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_配置_是否启用 DEFAULT(1),
datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_配置_操作时间 DEFAULT(GETDATE())
)
END
GO
IF OBJECT_ID(N'dbo.XD_TCS_AGV_点位配置', N'U') IS NULL
BEGIN
CREATE TABLE dbo.XD_TCS_AGV_点位配置
(
ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_XD_TCS_AGV_点位配置 PRIMARY KEY,
线 nvarchar(20) NOT NULL,
MES工位号 nvarchar(50) NOT NULL,
nvarchar(50) NOT NULL,
WorkStation nvarchar(50) NOT NULL,
XSDProgramName nvarchar(100) NOT NULL,
XSEProgramName nvarchar(100) NOT NULL,
XSDProgramName nvarchar(100) NOT NULL,
XSEProgramName nvarchar(100) NOT NULL,
int NOT NULL,
bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_点位配置_是否启用 DEFAULT(1),
datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_点位配置_操作时间 DEFAULT(GETDATE()),
CONSTRAINT UK_XD_TCS_AGV_点位配置_MES工位号 UNIQUE(MES工位号),
CONSTRAINT UK_XD_TCS_AGV_点位配置_WorkStation UNIQUE(WorkStation)
)
END
GO
IF OBJECT_ID(N'dbo.XD_TCS_AGV_型号动作映射', N'U') IS NULL
BEGIN
CREATE TABLE dbo.XD_TCS_AGV_型号动作映射
(
ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_XD_TCS_AGV_型号动作映射 PRIMARY KEY,
线 nvarchar(20) NOT NULL,
nvarchar(100) NOT NULL,
nvarchar(10) NOT NULL,
XSD bit NOT NULL,
XSE bit NOT NULL,
bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_型号动作映射_是否启用 DEFAULT(1),
datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_型号动作映射_操作时间 DEFAULT(GETDATE()),
CONSTRAINT UK_XD_TCS_AGV_型号动作映射 UNIQUE(线,,),
CONSTRAINT CK_XD_TCS_AGV_型号动作映射_动作 CHECK( IN(N'',N'')),
CONSTRAINT CK_XD_TCS_AGV_型号动作映射_组合 CHECK(XSD=1 OR XSE=1)
)
END
GO
IF OBJECT_ID(N'dbo.XD_TCS_AGV_任务', N'U') IS NULL
BEGIN
CREATE TABLE dbo.XD_TCS_AGV_任务
(
ID bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_XD_TCS_AGV_任务 PRIMARY KEY,
nvarchar(100) NOT NULL,
nvarchar(100) NULL,
MES工位号 nvarchar(50) NOT NULL,
nvarchar(50) NULL,
TCS站点 nvarchar(50) NULL,
nvarchar(20) NOT NULL,
nvarchar(100) NULL,
nvarchar(20) NULL,
ProgramName nvarchar(100) NULL,
nvarchar(50) NOT NULL,
nvarchar(max) NOT NULL,
int NOT NULL,
nvarchar(50) NULL,
IP nvarchar(50) NULL,
nvarchar(20) NOT NULL,
nvarchar(50) NULL,
int NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_任务状态 DEFAULT(0),
nvarchar(50) NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_状态说明 DEFAULT(N'未开始'),
nvarchar(50) NULL,
nvarchar(50) NULL,
TCS备注 nvarchar(1000) NULL,
nvarchar(max) NULL,
nvarchar(max) NULL,
nvarchar(2000) NULL,
PLC bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_是否通知PLC DEFAULT(0),
PLC已通知 bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_PLC已通知 DEFAULT(0),
int NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_处理状态 DEFAULT(0),
bit NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_已复位 DEFAULT(0),
nvarchar(50) NULL,
datetime NULL,
nvarchar(1000) NULL,
datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_创建时间 DEFAULT(GETDATE()),
datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_任务_更新时间 DEFAULT(GETDATE()),
CONSTRAINT UK_XD_TCS_AGV_任务_外部任务编号 UNIQUE(),
CONSTRAINT CK_XD_TCS_AGV_任务_状态 CHECK( IN (0,1,2,3,4,5))
)
CREATE INDEX IX_XD_TCS_AGV_任务_状态时间
ON dbo.XD_TCS_AGV_任务(, DESC)
CREATE INDEX IX_XD_TCS_AGV_任务_工位时间
ON dbo.XD_TCS_AGV_任务(MES工位号, DESC)
END
GO
IF COL_LENGTH(N'dbo.XD_TCS_AGV_任务', N'产品型号') IS NULL
ALTER TABLE dbo.XD_TCS_AGV_任务 ADD nvarchar(100) NULL
GO
IF COL_LENGTH(N'dbo.XD_TCS_AGV_任务', N'动作组合') IS NULL
ALTER TABLE dbo.XD_TCS_AGV_任务 ADD nvarchar(20) NULL
GO
IF COL_LENGTH(N'dbo.XD_TCS_AGV_任务', N'已复位') IS NULL
BEGIN
ALTER TABLE dbo.XD_TCS_AGV_任务 ADD bit NOT NULL
CONSTRAINT DF_XD_TCS_AGV_任务_已复位 DEFAULT(0)
END
GO
IF EXISTS
(
SELECT 1 FROM sys.check_constraints
WHERE parent_object_id=OBJECT_ID(N'dbo.XD_TCS_AGV_任务')
AND name=N'CK_XD_TCS_AGV_任务_状态'
)
ALTER TABLE dbo.XD_TCS_AGV_任务 DROP CONSTRAINT CK_XD_TCS_AGV_任务_状态
GO
ALTER TABLE dbo.XD_TCS_AGV_任务 ADD CONSTRAINT CK_XD_TCS_AGV_任务_状态
CHECK( IN (0,1,2,3,4,5))
GO
IF OBJECT_ID(N'dbo.XD_TCS_AGV_位置状态', N'U') IS NULL
BEGIN
CREATE TABLE dbo.XD_TCS_AGV_位置状态
(
ID int NOT NULL CONSTRAINT PK_XD_TCS_AGV_位置状态 PRIMARY KEY,
IP nvarchar(50) NULL,
nvarchar(100) NULL,
nvarchar(100) NULL,
nvarchar(max) NULL,
datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_位置状态_更新时间 DEFAULT(GETDATE()),
CONSTRAINT CK_XD_TCS_AGV_位置状态_单车 CHECK(ID = 1)
)
END
GO
IF OBJECT_ID(N'dbo.XD_TCS_AGV_操作记录', N'U') IS NULL
BEGIN
CREATE TABLE dbo.XD_TCS_AGV_操作记录
(
ID bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_XD_TCS_AGV_操作记录 PRIMARY KEY,
nvarchar(100) NULL,
MES工位号 nvarchar(50) NULL,
nvarchar(50) NOT NULL,
nvarchar(50) NULL,
nvarchar(max) NULL,
nvarchar(max) NULL,
bit NOT NULL,
nvarchar(1000) NULL,
datetime NOT NULL CONSTRAINT DF_XD_TCS_AGV_操作记录_操作时间 DEFAULT(GETDATE())
)
CREATE INDEX IX_XD_TCS_AGV_操作记录_时间
ON dbo.XD_TCS_AGV_操作记录( DESC)
END
GO
DECLARE @ TABLE
(
nvarchar(50),
nvarchar(500),
nvarchar(200)
)
INSERT INTO @ VALUES
(N'TCS_BaseUrl', N'http://10.112.111.21:11008', N'TCS调度服务地址客户已确认'),
(N'TCS_Enabled', N'0', N'1启用真实下发0仅允许查询配置'),
(N'McrGroup', N'G001', N'机器人组'),
(N'McrIp', N'10.146.79.9', N'客户确认的单台AGV IP'),
(N'TCS_OperatorUserId', N'BZS001', N'TCS任务状态定向推送标识'),
(N'DefaultPriority', N'1', N'默认任务优先级'),
(N'HttpTimeoutSeconds', N'15', N'TCS HTTP超时秒数')
MERGE dbo.XD_TCS_AGV_配置 AS T
USING @ AS S ON T. = S.
WHEN NOT MATCHED THEN
INSERT(,,) VALUES(S.,S.,S.);
GO
DECLARE @线 nvarchar(20)
SELECT TOP 1 @线 = FROM dbo. WHERE = N'产线名称'
DECLARE @ TABLE
(
线 nvarchar(20), MES工位号 nvarchar(50), nvarchar(50), WorkStation nvarchar(50),
XSD nvarchar(100), XSE nvarchar(100), XSD nvarchar(100), XSE nvarchar(100), int
)
IF @线 = N'GLKG'
BEGIN
INSERT INTO @ VALUES
(N'GLKG',N'AC0909-01',N'GIS1',N'S000214',N'214GIS1插XSD',N'214GIS1插XSE',N'214GIS1拔XSD',N'214GIS1拔XSE',1),
(N'GLKG',N'AC0909-02',N'GIS2',N'S000215',N'215GIS2插XSD',N'215GIS2插XSE',N'215GIS2拔XSD',N'215GIS2拔XSE',2),
(N'GLKG',N'AC0909-03',N'GIS3',N'S000217',N'217GIS3插XSD',N'217GIS3插XSE',N'217GIS3拔XSD',N'217GIS3拔XSE',3),
(N'GLKG',N'AC0909-04',N'GIS4',N'S000218',N'218GIS4插XSD',N'218GIS4插XSE',N'218GIS4拔XSD',N'218GIS4拔XSE',4),
(N'GLKG',N'AC0909-05',N'GIS5',N'S000219',N'219GIS5插XSD',N'219GIS5插XSE',N'219GIS5拔XSD',N'219GIS5拔XSE',5),
(N'GLKG',N'AC0909-06',N'GIS6',N'S000220',N'220GIS6插XSD',N'220GIS6插XSE',N'220GIS6拔XSD',N'220GIS6拔XSE',6),
(N'GLKG',N'AC0909-07',N'GIS7',N'S000221',N'221GIS7插XSD',N'221GIS7插XSE',N'221GIS7拔XSD',N'221GIS7拔XSE',7),
(N'GLKG',N'AC0909-08',N'GIS8',N'S000222',N'222GIS8插XSD',N'222GIS8插XSE',N'222GIS8拔XSD',N'222GIS8拔XSE',8),
(N'GLKG',N'AC0909-09',N'GIS9',N'S000201',N'201GIS9插XSD',N'201GIS9插XSE',N'201GIS9拔XSD',N'201GIS9拔XSE',9),
(N'GLKG',N'AC0909-10',N'GIS10',N'S000202',N'202GIS10插XSD',N'202GIS10插XSE',N'202GIS10拔XSD',N'202GIS10拔XSE',10)
END
ELSE IF @线 = N'DLQ'
BEGIN
INSERT INTO @ VALUES
(N'DLQ',N'AC0605-01',N'GCB1',N'S000225',N'225GCB1插XSD',N'225GCB1插XSE',N'225GCB1拔XSD',N'225GCB1拔XSE',1),
(N'DLQ',N'AC0605-02',N'GCB2',N'S000226',N'226GCB2插XSD',N'226GCB2插XSE',N'226GCB2拔XSD',N'226GCB2拔XSE',2),
(N'DLQ',N'AC0605-03',N'GCB3',N'S000227',N'227GCB3插XSD',N'227GCB3插XSE',N'227GCB3拔XSD',N'227GCB3拔XSE',3),
(N'DLQ',N'AC0605-04',N'GCB4',N'S000228',N'228GCB4插XSD',N'228GCB4插XSE',N'228GCB4拔XSD',N'228GCB4拔XSE',4)
END
MERGE dbo.XD_TCS_AGV_点位配置 AS T
USING @ AS S ON T.MES工位号 = S.MES工位号
WHEN MATCHED THEN UPDATE SET
T.线=S.线,T.=S.,T.WorkStation=S.WorkStation,
T.XSDProgramName=S.XSD,T.XSEProgramName=S.XSE,
T.XSDProgramName=S.XSD,T.XSEProgramName=S.XSE,
T.=S.,T.=1,T.=GETDATE()
WHEN NOT MATCHED THEN INSERT
(线,MES工位号,,WorkStation,XSDProgramName,XSEProgramName,XSDProgramName,XSEProgramName,)
VALUES(S.线,S.MES工位号,S.,S.WorkStation,S.XSD,S.XSE,S.XSD,S.XSE,S.);
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_配置_获取
AS
BEGIN
SET NOCOUNT ON
SELECT
TCS_BaseUrl = MAX(CASE WHEN =N'TCS_BaseUrl' THEN END),
TCS_Enabled = MAX(CASE WHEN =N'TCS_Enabled' THEN END),
McrGroup = MAX(CASE WHEN =N'McrGroup' THEN END),
McrIp = MAX(CASE WHEN =N'McrIp' THEN END),
TCS_OperatorUserId = MAX(CASE WHEN =N'TCS_OperatorUserId' THEN END),
DefaultPriority = MAX(CASE WHEN =N'DefaultPriority' THEN END),
HttpTimeoutSeconds = MAX(CASE WHEN =N'HttpTimeoutSeconds' THEN END)
FROM dbo.XD_TCS_AGV_配置 WHERE =1
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_点位配置_查询
@MES工位号 nvarchar(50) = N''
AS
BEGIN
SET NOCOUNT ON
SELECT * FROM dbo.XD_TCS_AGV_点位配置
WHERE =1 AND (@MES工位号=N'' OR MES工位号=@MES工位号)
ORDER BY
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_型号动作映射_查询
@线 nvarchar(20),
@ nvarchar(100),
@ nvarchar(10)
AS
BEGIN
SET NOCOUNT ON
SELECT TOP 1 ID,线,,,XSD,XSE,
CASE WHEN XSD=1 AND XSE=1 THEN N'XSD+XSE'
WHEN XSD=1 THEN N'XSD' ELSE N'XSE' END
FROM dbo.XD_TCS_AGV_型号动作映射
WHERE 线=@线 AND =@
AND =@ AND =1
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_库位产品_查询
@MES工位号 nvarchar(50)
AS
BEGIN
SET NOCOUNT ON
SELECT TOP 1 ,
FROM dbo.XD_磨合_状态
WHERE =@MES工位号
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_创建
@ nvarchar(100),
@ nvarchar(100)=N'',
@MES工位号 nvarchar(50),
@ nvarchar(20),
@ nvarchar(100)=N'',
@ nvarchar(20)=N'',
@ProgramName nvarchar(100)=N'',
@ nvarchar(50),
@ nvarchar(max),
@ int,
@ nvarchar(50)=N'',
@IP nvarchar(50)=N'',
@ nvarchar(20),
@ nvarchar(50)=N'',
@PLC bit=0
AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT ON
BEGIN TRAN
IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_点位配置 WHERE MES工位号=@MES工位号 AND =1)
BEGIN
ROLLBACK
SELECT 2 result,N'工位未配置TCS点位' msg
RETURN
END
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
BEGIN
ROLLBACK
SELECT 2 result,N'外部任务编号已存在' msg
RETURN
END
IF ISNULL(@,N'')<>N''
BEGIN
DECLARE @ nvarchar(50),@ int,@ int,@ bit
SELECT @=MES工位号,@=,
@=,@=
FROM dbo.XD_TCS_AGV_任务 WITH(UPDLOCK,HOLDLOCK)
WHERE =@
IF @ IS NULL
BEGIN
ROLLBACK
SELECT 2 result,N'原失败任务不存在' msg
RETURN
END
IF @ NOT IN(4,5) OR ISNULL(@,0)<>0
BEGIN
ROLLBACK
SELECT 2 result,N'原任务不是待处理的失败任务' msg
RETURN
END
IF ISNULL(@,0)<>1
BEGIN
ROLLBACK
SELECT 2 result,N'请先复位原失败任务对应的移动机器人' msg
RETURN
END
IF @<>@MES工位号
BEGIN
ROLLBACK
SELECT 2 result,N'恢复任务工位必须与原失败任务一致' msg
RETURN
END
END
-- MES允许各工位独立下发任务排队与执行顺序由TCS调度。
DECLARE @ nvarchar(50),@TCS站点 nvarchar(50)
SELECT @=,@TCS站点=WorkStation
FROM dbo.XD_TCS_AGV_点位配置 WHERE MES工位号=@MES工位号 AND =1
INSERT INTO dbo.XD_TCS_AGV_任务
(,,MES工位号,,TCS站点,,,,ProgramName,,,
,,IP,,,PLC)
VALUES
(@,NULLIF(@,N''),@MES工位号,@,@TCS站点,@,NULLIF(@,N''),NULLIF(@,N''),NULLIF(@ProgramName,N''),
@,@,@,@,@IP,@,@,@PLC)
DECLARE @ID bigint=SCOPE_IDENTITY()
COMMIT
SELECT 1 result,N'任务已创建' msg,@ID ID,@
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_下发结果更新
@ nvarchar(100),
@ nvarchar(max)=N'',
@ nvarchar(max)=N'',
@ bit,
@ nvarchar(2000)=N''
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.XD_TCS_AGV_任务 SET
=@,=@,
=CASE WHEN @=1 THEN 0 ELSE 4 END,
=CASE WHEN @=1 THEN N'未开始' ELSE N'任务错误' END,
=NULLIF(@,N''),=GETDATE()
WHERE =@
SELECT CASE WHEN @@ROWCOUNT=1 THEN 1 ELSE 2 END result
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_状态更新
@ nvarchar(100),
@ int,
@IP nvarchar(50)=N'',
@ nvarchar(50)=N'',
@ nvarchar(50)=N'',
@ nvarchar(50)=N'',
@ nvarchar(1000)=N''
AS
BEGIN
SET NOCOUNT ON
IF @ NOT IN(0,1,2,3,4,5)
BEGIN
SELECT 2 result,N'任务状态不正确' msg
RETURN
END
IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
BEGIN
SELECT 2 result,N'外部任务编号不存在' msg
RETURN
END
DECLARE @ int
SELECT @= FROM dbo.XD_TCS_AGV_任务 WHERE =@
IF (@ IN(2,3,5) AND @<>@)
OR (@=4 AND @ NOT IN(4,5))
BEGIN
SELECT 1 result,N'已忽略结束状态变更' msg,MES工位号,,PLC,PLC已通知
FROM dbo.XD_TCS_AGV_任务 WHERE =@
RETURN
END
UPDATE dbo.XD_TCS_AGV_任务 SET
=@,
=CASE @ WHEN 0 THEN N'未开始' WHEN 1 THEN N'进行中' WHEN 2 THEN N'已完成' WHEN 3 THEN N'已取消' WHEN 4 THEN N'任务错误' ELSE N'任务错误(已处理)' END,
IP=CASE WHEN @IP=N'' THEN IP ELSE @IP END,
=CASE WHEN @=N'' THEN ELSE @ END,
=CASE WHEN @=N'' THEN ELSE @ END,
=CASE WHEN @=N'' THEN ELSE @ END,
TCS备注=NULLIF(@,N''),
=CASE WHEN @=4 THEN NULLIF(@,N'') ELSE END,
=CASE WHEN @=5 THEN 1 ELSE END,
=GETDATE()
WHERE =@
SELECT 1 result,N'状态已更新' msg,MES工位号,,PLC,PLC已通知
FROM dbo.XD_TCS_AGV_任务 WHERE =@
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_PLC通知完成
@ nvarchar(100)
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.XD_TCS_AGV_任务 SET PLC已通知=1,=GETDATE()
WHERE =@ AND =2
SELECT CASE WHEN @@ROWCOUNT=1 THEN 1 ELSE 2 END result
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_获取
@ nvarchar(100)
AS
BEGIN
SET NOCOUNT ON
SELECT * FROM dbo.XD_TCS_AGV_任务 WHERE =@
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_人工处理
@ nvarchar(100),
@ nvarchar(50)=N'',
@ nvarchar(1000)=N''
AS
BEGIN
SET NOCOUNT ON
IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@ AND IN(4,5))
BEGIN
SELECT 2 result,N'仅任务错误状态可以标记人工处理' msg
RETURN
END
IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@ AND =1)
BEGIN
SELECT 2 result,N'请先复位移动机器人再完成人工处理' msg
RETURN
END
UPDATE dbo.XD_TCS_AGV_任务 SET =1,=@,=GETDATE(),=@,=GETDATE()
WHERE =@
SELECT 1 result,N'已标记人工处理' msg
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_复位标记
@ nvarchar(100)
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.XD_TCS_AGV_任务 SET =1,=GETDATE()
WHERE =@ AND IN(4,5)
SELECT CASE WHEN @@ROWCOUNT=1 THEN 1 ELSE 2 END result,
CASE WHEN @@ROWCOUNT=1 THEN N'复位状态已记录' ELSE N'未找到对应失败任务' END msg
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_本地状态设置
@ nvarchar(100),
@ int,
@ nvarchar(50),
@ nvarchar(2000)=N''
AS
BEGIN
SET NOCOUNT ON
UPDATE dbo.XD_TCS_AGV_任务 SET =@,=@,
=NULLIF(@,N''),=GETDATE()
WHERE =@
SELECT CASE WHEN @@ROWCOUNT=1 THEN 1 ELSE 2 END result
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_分页查询
@ nvarchar(50)=N'',
@ nvarchar(50)=N'',
@MES工位号 nvarchar(50)=N'',
@ nvarchar(100)=N'',
@ nvarchar(20)=N'',
@ nvarchar(10)=N'',
@ nvarchar(20)=N'',
@PageCurrent int=1,
@PageSize int=20,
@PageCount int output,
@ItemCount int output
AS
BEGIN
SET NOCOUNT ON
DECLARE @where nvarchar(2000)=N'1=1'
IF @<>N'' SET @where+=N' AND 创建时间>='''+REPLACE(@,'''','''''')+N''''
IF @<>N'' SET @where+=N' AND 创建时间<='''+REPLACE(@,'''','''''')+N''''
IF @MES工位号<>N'' SET @where+=N' AND MES工位号='''+REPLACE(@MES工位号,'''','''''')+N''''
IF @<>N'' SET @where+=N' AND 外部任务编号 LIKE ''%'+REPLACE(@,'''','''''')+N'%'''
IF @<>N'' SET @where+=N' AND 任务动作='''+REPLACE(@,'''','''''')+N''''
IF @<>N'' SET @where+=N' AND 任务状态='+CONVERT(nvarchar(10),CONVERT(int,@))
IF @<>N'' SET @where+=N' AND 来源='''+REPLACE(@,'''','''''')+N''''
EXEC sp_xt_pagesplit N'XD_TCS_AGV_任务',N'ID',@where,
N'ID,外部任务编号,原任务编号,MES工位号,现场位置,TCS站点,任务动作,产品型号,动作组合,ProgramName,任务类型,优先级,机器人组,机器人IP,来源,操作人,任务状态,状态说明,开始时间,结束时间,TCS备注,错误信息,是否通知PLC,PLC已通知,处理状态,已复位,处理人,处理时间,处理说明,创建时间,更新时间',
N'ID DESC',@PageCurrent,@PageSize,@PageCount output,@ItemCount output
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_详情查询
@ nvarchar(100)
AS
BEGIN
SET NOCOUNT ON
SELECT * FROM dbo.XD_TCS_AGV_任务 WHERE =@
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_当前查询
AS
BEGIN
SET NOCOUNT ON
SELECT TOP 1 * FROM dbo.XD_TCS_AGV_任务
WHERE =1
ORDER BY DESC,ID DESC
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_任务_概览查询
AS
BEGIN
SET NOCOUNT ON
SELECT
ISNULL(SUM(CASE WHEN =0 THEN 1 ELSE 0 END),0) ,
ISNULL(SUM(CASE WHEN =1 THEN 1 ELSE 0 END),0) ,
ISNULL(SUM(CASE WHEN IN(4,5) AND =0 THEN 1 ELSE 0 END),0)
FROM dbo.XD_TCS_AGV_任务
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_工位日志_分页查询
@MES工位号 nvarchar(50)=N'',
@ nvarchar(50)=N'',
@ nvarchar(200)=N'',
@ nvarchar(50)=N'',
@ nvarchar(50)=N'',
@PageCurrent int=1,
@PageSize int=20,
@PageCount int OUTPUT,
@ItemCount int OUTPUT
AS
BEGIN
SET NOCOUNT ON
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=20
DECLARE @ datetime=TRY_CONVERT(datetime,NULLIF(@,N''))
DECLARE @ datetime=TRY_CONVERT(datetime,NULLIF(@,N''))
SELECT @ItemCount=COUNT(1)
FROM dbo.MES_系统日志 L
WHERE EXISTS
(
SELECT 1 FROM dbo.XD_TCS_AGV_点位配置 P
WHERE P.MES工位号=L. AND P.=1
)
AND (@MES工位号=N'' OR L.=@MES工位号)
AND (@=N'' OR L.=@)
AND (@=N'' OR L. LIKE N'%'+@+N'%')
AND (@ IS NULL OR L.>=@)
AND (@ IS NULL OR L.<=@)
SET @PageCount=CASE WHEN @ItemCount=0 THEN 0 ELSE CEILING(@ItemCount*1.0/@PageSize) END
SELECT L.ID,L.,L.,L.,L.
FROM dbo.MES_系统日志 L
WHERE EXISTS
(
SELECT 1 FROM dbo.XD_TCS_AGV_点位配置 P
WHERE P.MES工位号=L. AND P.=1
)
AND (@MES工位号=N'' OR L.=@MES工位号)
AND (@=N'' OR L.=@)
AND (@=N'' OR L. LIKE N'%'+@+N'%')
AND (@ IS NULL OR L.>=@)
AND (@ IS NULL OR L.<=@)
ORDER BY L. DESC,L.ID DESC
OFFSET (@PageCurrent-1)*@PageSize ROWS FETCH NEXT @PageSize ROWS ONLY
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_位置_更新
@IP nvarchar(50)=N'',
@ nvarchar(100)=N'',
@ nvarchar(100)=N'',
@ nvarchar(max)=N''
AS
BEGIN
SET NOCOUNT ON
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_位置状态 WHERE ID=1)
UPDATE dbo.XD_TCS_AGV_位置状态 SET IP=@IP,=@,=@,=@,=GETDATE() WHERE ID=1
ELSE
INSERT INTO dbo.XD_TCS_AGV_位置状态(ID,IP,,,) VALUES(1,@IP,@,@,@)
SELECT 1 result
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_位置_查询
AS
BEGIN
SET NOCOUNT ON
SELECT * FROM dbo.XD_TCS_AGV_位置状态 WHERE ID=1
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_操作记录_增加
@ nvarchar(100)=N'',
@MES工位号 nvarchar(50)=N'',
@ nvarchar(50),
@ nvarchar(50)=N'',
@ nvarchar(max)=N'',
@ nvarchar(max)=N'',
@ bit,
@ nvarchar(1000)=N''
AS
BEGIN
SET NOCOUNT ON
INSERT INTO dbo.XD_TCS_AGV_操作记录(,MES工位号,,,,,,)
VALUES(NULLIF(@,N''),NULLIF(@MES工位号,N''),@,@,@,@,@,@)
SELECT 1 result
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_操作记录_分页查询
@ nvarchar(50)=N'',
@ nvarchar(50)=N'',
@ nvarchar(50)=N'',
@PageCurrent int=1,
@PageSize int=20,
@PageCount int output,
@ItemCount int output
AS
BEGIN
SET NOCOUNT ON
DECLARE @where nvarchar(1000)=N'1=1'
IF @<>N'' SET @where+=N' AND 操作时间>='''+REPLACE(@,'''','''''')+N''''
IF @<>N'' SET @where+=N' AND 操作时间<='''+REPLACE(@,'''','''''')+N''''
IF @<>N'' SET @where+=N' AND 操作类型='''+REPLACE(@,'''','''''')+N''''
EXEC sp_xt_pagesplit N'XD_TCS_AGV_操作记录',N'ID',@where,
N'ID,外部任务编号,MES工位号,操作类型,操作人,是否成功,操作结果,操作时间',
N'ID DESC',@PageCurrent,@PageSize,@PageCount output,@ItemCount output
END
GO
CREATE OR ALTER PROCEDURE dbo.XD_TCS_AGV_操作记录_任务查询
@ nvarchar(100)
AS
BEGIN
SET NOCOUNT ON
SELECT ID,,MES工位号,,,,,
FROM dbo.XD_TCS_AGV_操作记录
WHERE =@
ORDER BY ID DESC
END
GO

View File

@@ -0,0 +1,98 @@
SET NOCOUNT ON
DECLARE @ nvarchar(50)=N'UT_AGV_STATE_'
DECLARE @ nvarchar(100)=@+N'BASE'
DECLARE @ nvarchar(100)=@+N'SECOND'
DECLARE @ nvarchar(100)=@+N'NORESET'
DECLARE @ nvarchar(100)=@+N'WRONG_STATION'
DECLARE @ nvarchar(100)=@+N'RECOVERY'
DECLARE @ nvarchar(100)=@+N'BLOCKED'
DECLARE @ nvarchar(100)=@+N'AFTER_HANDLE'
DECLARE @ int=0
DELETE FROM dbo.XD_TCS_AGV_操作记录 WHERE LIKE @+N'%'
DELETE FROM dbo.XD_TCS_AGV_任务 WHERE LIKE @+N'%'
PRINT N'[1] 创建首个任务'
EXEC dbo.XD_TCS_AGV_任务_创建
@,N'',N'AC0909-01',N'',N'',N'nav_action_program',
N'[{"workStation":"S000214"},{"programName":"214GIS1插XSD"},{"programName":"214GIS1插XSE"}]',
1,N'G001',N'10.146.79.9',N'UNIT_TEST',N'状态机测试',0
IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
SET @+=1
PRINT N'[2] 单车活动任务拦截'
EXEC dbo.XD_TCS_AGV_任务_创建
@,N'',N'AC0909-02',N'',N'',N'nav_action_program',N'[{"workStation":"S000215"}]',
1,N'G001',N'10.146.79.9',N'UNIT_TEST',N'状态机测试',0
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
SET @+=1
EXEC dbo.XD_TCS_AGV_任务_本地状态设置 @,4,N'任务错误',N'单元测试失败'
PRINT N'[3] 未复位恢复任务拦截'
EXEC dbo.XD_TCS_AGV_任务_创建
@,@,N'AC0909-01',N'插-单步',N'214GIS1插XSD',N'program',
N'[{"programName":"214GIS1插XSD"}]',1,N'G001',N'10.146.79.9',N'UNIT_TEST',N'状态机测试',0
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
SET @+=1
PRINT N'[4] 复位标记与跨工位恢复拦截'
EXEC dbo.XD_TCS_AGV_任务_复位标记 @
EXEC dbo.XD_TCS_AGV_任务_状态更新
@,5,N'10.146.79.9',N'nav_action_program',N'',N'',N'任务错误已处理'
IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@ AND =5 AND =1)
SET @+=1
EXEC dbo.XD_TCS_AGV_任务_创建
@,@,N'AC0909-02',N'插-单步',N'215GIS2插XSD',N'program',
N'[{"programName":"215GIS2插XSD"}]',1,N'G001',N'10.146.79.9',N'UNIT_TEST',N'状态机测试',0
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
SET @+=1
PRINT N'[5] 复位后同工位恢复放行'
EXEC dbo.XD_TCS_AGV_任务_创建
@,@,N'AC0909-01',N'插-单步',N'214GIS1插XSD',N'program',
N'[{"programName":"214GIS1插XSD"}]',1,N'G001',N'10.146.79.9',N'UNIT_TEST',N'状态机测试',0
IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
SET @+=1
EXEC dbo.XD_TCS_AGV_任务_状态更新
@,2,N'10.146.79.9',N'program',N'2026-07-13 10:00:00',N'2026-07-13 10:01:00',N''
PRINT N'[6] 原失败任务未处理时继续阻断'
EXEC dbo.XD_TCS_AGV_任务_创建
@,N'',N'AC0909-02',N'',N'',N'nav_action_program',N'[{"workStation":"S000215"}]',
1,N'G001',N'10.146.79.9',N'UNIT_TEST',N'状态机测试',0
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
SET @+=1
PRINT N'[7] 人工处理后新任务放行'
EXEC dbo.XD_TCS_AGV_任务_人工处理 @,N'状态机测试',N'恢复任务已完成'
EXEC dbo.XD_TCS_AGV_任务_状态更新 @,2,N'',N'',N'',N'',N'迟到完成'
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@ AND <>5)
SET @+=1
EXEC dbo.XD_TCS_AGV_任务_创建
@,N'',N'AC0909-02',N'',N'',N'nav_action_program',N'[{"workStation":"S000215"}]',
1,N'G001',N'10.146.79.9',N'UNIT_TEST',N'状态机测试',0
IF NOT EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@)
SET @+=1
PRINT N'[8] 未复位失败任务不能人工处理,终态不能改写'
EXEC dbo.XD_TCS_AGV_任务_本地状态设置 @,4,N'任务错误',N'终态测试'
EXEC dbo.XD_TCS_AGV_任务_人工处理 @,N'状态机测试',N'不应成功'
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@ AND =1)
SET @+=1
EXEC dbo.XD_TCS_AGV_任务_状态更新 @,2,N'',N'',N'',N'',N'迟到完成'
IF EXISTS(SELECT 1 FROM dbo.XD_TCS_AGV_任务 WHERE =@ AND <>4)
SET @+=1
SELECT @ AS ,
(SELECT COUNT(*) FROM dbo.XD_TCS_AGV_任务 WHERE LIKE @+N'%') AS
DELETE FROM dbo.XD_TCS_AGV_操作记录 WHERE LIKE @+N'%'
DELETE FROM dbo.XD_TCS_AGV_任务 WHERE LIKE @+N'%'
IF @<>0
RAISERROR(N'AGV数据库状态机测试失败',16,1)
SELECT COUNT(*) AS
FROM dbo.XD_TCS_AGV_任务 WHERE LIKE @+N'%'

View File

@@ -1,173 +0,0 @@
IF OBJECT_ID(N'dbo.XD_电能表谐波数据', N'U') IS NULL
BEGIN
CREATE TABLE dbo.XD_电能表谐波数据
(
ID int IDENTITY(1,1) NOT NULL,
nvarchar(50) NULL,
A相电压总谐波畸变 float NULL,
B相电压总谐波畸变 float NULL,
C相电压总谐波畸变 float NULL,
float NULL,
A相电流总谐波畸变 float NULL,
B相电流总谐波畸变 float NULL,
C相电流总谐波畸变 float NULL,
float NULL,
A相电压奇次谐波畸变 float NULL,
B相电压奇次谐波畸变 float NULL,
C相电压奇次谐波畸变 float NULL,
A相电流奇次谐波畸变 float NULL,
B相电流奇次谐波畸变 float NULL,
C相电流奇次谐波畸变 float NULL,
A相电压偶次谐波畸变 float NULL,
B相电压偶次谐波畸变 float NULL,
C相电压偶次谐波畸变 float NULL,
A相电流偶次谐波畸变 float NULL,
B相电流偶次谐波畸变 float NULL,
C相电流偶次谐波畸变 float NULL,
datetime NULL CONSTRAINT DF_XD_电能表谐波数据_操作时间 DEFAULT (GETDATE()),
CONSTRAINT PK_XD_电能表谐波数据 PRIMARY KEY CLUSTERED (ID ASC)
);
END
GO
IF NOT EXISTS (
SELECT 1
FROM sys.indexes
WHERE name = N'IX_XD_电能表谐波数据_工位号_操作时间'
AND object_id = OBJECT_ID(N'dbo.XD_电能表谐波数据')
)
BEGIN
CREATE NONCLUSTERED INDEX IX_XD_电能表谐波数据_工位号_操作时间
ON dbo.XD_电能表谐波数据 ( ASC, DESC);
END
GO
IF OBJECT_ID(N'dbo.XD_电能表谐波数据_增加', N'P') IS NOT NULL
DROP PROCEDURE dbo.XD_电能表谐波数据_增加;
GO
CREATE PROCEDURE dbo.XD_电能表谐波数据_增加
@ nvarchar(50) = N'',
@A相电压总谐波畸变 float = NULL,
@B相电压总谐波畸变 float = NULL,
@C相电压总谐波畸变 float = NULL,
@ float = NULL,
@A相电流总谐波畸变 float = NULL,
@B相电流总谐波畸变 float = NULL,
@C相电流总谐波畸变 float = NULL,
@ float = NULL,
@A相电压奇次谐波畸变 float = NULL,
@B相电压奇次谐波畸变 float = NULL,
@C相电压奇次谐波畸变 float = NULL,
@A相电流奇次谐波畸变 float = NULL,
@B相电流奇次谐波畸变 float = NULL,
@C相电流奇次谐波畸变 float = NULL,
@A相电压偶次谐波畸变 float = NULL,
@B相电压偶次谐波畸变 float = NULL,
@C相电压偶次谐波畸变 float = NULL,
@A相电流偶次谐波畸变 float = NULL,
@B相电流偶次谐波畸变 float = NULL,
@C相电流偶次谐波畸变 float = NULL
AS
BEGIN
SET NOCOUNT ON;
IF NULLIF(LTRIM(RTRIM(@)), N'') IS NULL
RETURN;
-- 电表返回 -1 表示无效数据;任一谐波点无效时,本次整条采集不入库。
IF @A相电压总谐波畸变 = -1
OR @B相电压总谐波畸变 = -1
OR @C相电压总谐波畸变 = -1
OR @ = -1
OR @A相电流总谐波畸变 = -1
OR @B相电流总谐波畸变 = -1
OR @C相电流总谐波畸变 = -1
OR @ = -1
OR @A相电压奇次谐波畸变 = -1
OR @B相电压奇次谐波畸变 = -1
OR @C相电压奇次谐波畸变 = -1
OR @A相电流奇次谐波畸变 = -1
OR @B相电流奇次谐波畸变 = -1
OR @C相电流奇次谐波畸变 = -1
OR @A相电压偶次谐波畸变 = -1
OR @B相电压偶次谐波畸变 = -1
OR @C相电压偶次谐波畸变 = -1
OR @A相电流偶次谐波畸变 = -1
OR @B相电流偶次谐波畸变 = -1
OR @C相电流偶次谐波畸变 = -1
RETURN;
-- 谐波畸变允许为 0只有全部点位都为空时跳过保存。
IF @A相电压总谐波畸变 IS NULL
AND @B相电压总谐波畸变 IS NULL
AND @C相电压总谐波畸变 IS NULL
AND @ IS NULL
AND @A相电流总谐波畸变 IS NULL
AND @B相电流总谐波畸变 IS NULL
AND @C相电流总谐波畸变 IS NULL
AND @ IS NULL
AND @A相电压奇次谐波畸变 IS NULL
AND @B相电压奇次谐波畸变 IS NULL
AND @C相电压奇次谐波畸变 IS NULL
AND @A相电流奇次谐波畸变 IS NULL
AND @B相电流奇次谐波畸变 IS NULL
AND @C相电流奇次谐波畸变 IS NULL
AND @A相电压偶次谐波畸变 IS NULL
AND @B相电压偶次谐波畸变 IS NULL
AND @C相电压偶次谐波畸变 IS NULL
AND @A相电流偶次谐波畸变 IS NULL
AND @B相电流偶次谐波畸变 IS NULL
AND @C相电流偶次谐波畸变 IS NULL
RETURN;
INSERT INTO dbo.XD_电能表谐波数据
(
,
A相电压总谐波畸变,
B相电压总谐波畸变,
C相电压总谐波畸变,
,
A相电流总谐波畸变,
B相电流总谐波畸变,
C相电流总谐波畸变,
,
A相电压奇次谐波畸变,
B相电压奇次谐波畸变,
C相电压奇次谐波畸变,
A相电流奇次谐波畸变,
B相电流奇次谐波畸变,
C相电流奇次谐波畸变,
A相电压偶次谐波畸变,
B相电压偶次谐波畸变,
C相电压偶次谐波畸变,
A相电流偶次谐波畸变,
B相电流偶次谐波畸变,
C相电流偶次谐波畸变
)
VALUES
(
@,
@A相电压总谐波畸变 / 1000.0,
@B相电压总谐波畸变 / 1000.0,
@C相电压总谐波畸变 / 1000.0,
@ / 1000.0,
@A相电流总谐波畸变 / 1000.0,
@B相电流总谐波畸变 / 1000.0,
@C相电流总谐波畸变 / 1000.0,
@ / 1000.0,
@A相电压奇次谐波畸变 / 1000.0,
@B相电压奇次谐波畸变 / 1000.0,
@C相电压奇次谐波畸变 / 1000.0,
@A相电流奇次谐波畸变 / 1000.0,
@B相电流奇次谐波畸变 / 1000.0,
@C相电流奇次谐波畸变 / 1000.0,
@A相电压偶次谐波畸变 / 1000.0,
@B相电压偶次谐波畸变 / 1000.0,
@C相电压偶次谐波畸变 / 1000.0,
@A相电流偶次谐波畸变 / 1000.0,
@B相电流偶次谐波畸变 / 1000.0,
@C相电流偶次谐波畸变 / 1000.0
);
END
GO