跳到主要内容
版本:Next

AI脚本助手

AI脚本助手通过自然语言描述控制逻辑或数据处理流程,自动生成符合语法规范的C#脚本,同时支持现有脚本的解释、调试与优化,核心用于快速完成脚本类工程开发。

AI脚本助手

功能说明

  • 支持通过自然语言描述脚本需实现的触发条件、操作步骤(如数据读取、API调用、变量更新),AI自动生成合规的C#脚本
  • 可对现有无注释、逻辑晦涩的工程脚本进行逐行分析,生成通俗易懂的功能说明,降低脚本理解门槛
  • 针对脚本运行错误(如逻辑漏洞、数据解析失败)或效率问题,提供智能排查与优化建议,减少脚本调试耗时

核心优势

1. 降低编程门槛

非专业编程背景的OT工程师(如工艺工程师、电气工程师),无需深入学习C#语法,即可完成系统集成、数据处理类脚本开发。

传统方式 vs AI方式

传统方式:
学习C#语法 → 学习API文档 → 编写代码 → 调试错误 → 优化性能
需要:编程能力 + 大量学习时间

AI方式:
描述需求 → AI生成代码 → 测试验证 → 微调优化
需要:清晰表达逻辑的能力

2. 提升脚本质量与效率

  • 语法规范:生成的脚本符合工业编程规范,减少语法错误
  • 异常处理:自动添加必要的异常处理逻辑,提升脚本健壮性
  • 性能优化:优化功能可提升脚本运行效率,降低系统资源占用
  • 代码注释:自动添加清晰的注释,便于后期维护

3. 加速工程知识传递

快速解释旧脚本功能,助力新工程师或维护人员快速上手,避免因人员流动导致的工程知识断层。

场景示例

  • 接手旧项目,面对数百行无注释代码
  • 传统方式:逐行阅读理解,可能需要数天
  • AI方式:粘贴代码,AI生成功能说明,30分钟内理解核心逻辑

典型使用场景

场景一:第三方系统集成脚本开发

背景:需将生产数据上报MES系统或从ERP获取生产订单。

需求描述

当工单ID改变时,通过API获取MES数据并写入本地变量。

具体要求:
- 监听变量:WorkOrderID
- API地址:http://mes.company.com/api/getWorkOrder
- 请求方式:POST
- 请求参数:{"orderId": "工单ID值"}
- 返回数据:{"productModel": "产品型号", "targetQty": 目标数量}
- 写入变量:ProductModel, TargetQuantity

AI生成脚本

using System;
using System.Net.Http;
using System.Text;
using Newtonsoft.Json;

public class MESIntegration
{
private string lastWorkOrderID = "";

public void OnWorkOrderChanged(string currentWorkOrderID)
{
// 检查工单ID是否改变
if (currentWorkOrderID != lastWorkOrderID && !string.IsNullOrEmpty(currentWorkOrderID))
{
lastWorkOrderID = currentWorkOrderID;

try
{
// 调用MES API获取工单数据
var workOrderData = GetWorkOrderFromMES(currentWorkOrderID);

// 写入本地变量
CMS.SetVariable("ProductModel", workOrderData.ProductModel);
CMS.SetVariable("TargetQuantity", workOrderData.TargetQty);

CMS.Log($"工单数据获取成功:{workOrderData.ProductModel}, 目标数量:{workOrderData.TargetQty}");
}
catch (Exception ex)
{
CMS.LogError($"获取MES数据失败:{ex.Message}");
}
}
}

private WorkOrderData GetWorkOrderFromMES(string orderId)
{
using (var client = new HttpClient())
{
// 设置超时时间
client.Timeout = TimeSpan.FromSeconds(10);

// 构建请求内容
var requestData = new { orderId = orderId };
var jsonContent = JsonConvert.SerializeObject(requestData);
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");

// 发送POST请求
var response = client.PostAsync("http://mes.company.com/api/getWorkOrder", content).Result;
response.EnsureSuccessStatusCode();

// 解析返回数据
var responseJson = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<WorkOrderData>(responseJson);
}
}
}

public class WorkOrderData
{
public string ProductModel { get; set; }
public int TargetQty { get; set; }
}

价值

  • 无需手动编写复杂的HTTP请求代码
  • 自动处理异常情况
  • 缩短系统集成工程周期从数天到数小时

场景二:旧工程脚本维护

背景:接手无注释的旧项目脚本,需要快速理解功能。

原始脚本(无注释):

public void Process()
{
var v1 = CMS.GetVariable("V001");
var v2 = CMS.GetVariable("V002");
if (v1 > 100 && v2 < 50)
{
CMS.SetVariable("V003", 1);
CMS.CallAPI("http://api/alarm", "POST", "{\"type\":\"high\"}");
}
else
{
CMS.SetVariable("V003", 0);
}
}

提问AI

请解释这段脚本的功能

AI解释

这段脚本的功能是监控和报警处理:

1. 读取两个变量:
- V001:可能是温度或压力等监控值
- V002:可能是另一个相关参数

2. 判断条件:
- 当V001大于100(超过阈值)
- 且V002小于50(低于正常值)
- 同时满足时触发报警

3. 报警处理:
- 设置V003为1(报警状态标志)
- 调用外部API发送高级别报警通知

4. 正常状态:
- 不满足报警条件时,设置V003为0(正常状态)

建议:
- 为变量添加有意义的命名(如Temperature, Pressure)
- 将阈值100和50定义为常量,便于后期调整
- 添加异常处理,防止API调用失败影响主流程

价值

  • 快速理解旧代码逻辑
  • 减少维护耗时
  • 获得优化建议

场景三:脚本调试与优化

背景:脚本运行报错或效率低。

问题脚本

public void UpdateData()
{
for (int i = 0; i < 1000; i++)
{
var data = CMS.GetVariable("Sensor_" + i);
CMS.WriteToDatabase("INSERT INTO data VALUES (" + i + ", " + data + ")");
}
}

提问AI

这段代码性能很差,如何优化?

AI优化建议

问题分析:

  1. 循环中频繁调用数据库插入,性能极差
  2. 字符串拼接方式不安全,存在SQL注入风险
  3. 没有批量处理机制

优化方案:

public void UpdateData()
{
// 使用批量插入提升性能
var dataList = new List<SensorData>();

// 先收集所有数据
for (int i = 0; i < 1000; i++)
{
var data = CMS.GetVariable($"Sensor_{i}");
dataList.Add(new SensorData { Id = i, Value = data });
}

// 批量写入数据库(性能提升100倍以上)
CMS.BatchInsertToDatabase("data", dataList);
}

public class SensorData
{
public int Id { get; set; }
public double Value { get; set; }
}

性能对比

  • 优化前:1000次数据库操作,耗时约10-30秒
  • 优化后:1次批量操作,耗时约0.1-0.3秒
  • 性能提升:100倍以上

价值

  • 定位性能瓶颈
  • 提供优化方案
  • 提升脚本运行效率

5分钟快速上手

步骤1:打开AI脚本助手

在脚本编辑器中,点击工具栏的"AI助手"图标,或右键选择"AI辅助编写"。

步骤2:描述你的需求

在对话框中输入您的需求,可以是:

  • 生成新脚本:描述需要实现的功能
  • 解释现有脚本:粘贴代码,请求解释
  • 调试优化:粘贴问题代码,描述问题

步骤3:等待AI生成

AI会在5-15秒内分析需求并生成代码或解释。

步骤4:测试验证

  • 将生成的代码复制到脚本编辑器
  • 在测试环境中运行验证
  • 根据实际情况微调

步骤5:部署应用

测试通过后,部署到生产环境。

提问技巧(精准生成/调试脚本)

技巧一:脚本生成 - "条件-动作"结构

清晰描述触发条件与执行操作。

示例1 - 简单条件触发

当变量"扫码完成"为true时,
根据扫码结果调用MES的API接口"api/check_material"

示例2 - 复杂条件组合

当满足以下所有条件时触发报警:
1. 温度大于80度
2. 压力小于2bar
3. 设备状态为"运行中"

触发后执行:
1. 设置报警标志为true
2. 发送邮件通知
3. 记录报警日志到数据库

示例3 - 数据处理脚本

编写脚本实现以下功能:
1. 读取D:\reports下的生产日志CSV文件
2. 解析文件内容
3. 将数据插入数据库"daily_log"表
4. 备份文件到D:\backup目录
5. 删除7天前的备份文件

说明:此脚本可通过计划任务模块配置为每天凌晨1点自动执行

技巧二:明确数据源与目标

指明数据来源与写入目标。

示例1 - API集成

编写脚本实现以下功能:

数据源:
- API地址:http://erp.company.com/api/orders
- 请求方式:GET
- 认证方式:Bearer Token(从变量"ERPToken"获取)

数据处理:
- 解析返回的JSON数组
- 筛选状态为"pending"的订单
- 提取字段:orderNo, productCode, quantity

数据目标:
- 写入CMS变量:CurrentOrders(JSON字符串)
- 同时写入数据库表"order_queue"

示例2 - 文件处理

编写脚本读取Excel文件并导入数据:

文件路径:D:\import\products.xlsx
读取工作表:Sheet1
读取列:A列(产品编码)、B列(产品名称)、C列(库存数量)

处理逻辑:
- 跳过第一行(标题行)
- 验证产品编码格式(必须是P开头+6位数字)
- 库存数量必须大于0

写入目标:
- 数据库表"products"
- 如果产品编码已存在,更新库存数量
- 如果不存在,插入新记录

技巧三:分步描述复杂流程

拆解多步骤需求,分步生成后组合。

示例 - 扫码入库流程

第一步:扫码数据获取

编写脚本监听扫码枪输入:
- 监听变量:ScanCode
- 当变量值改变时触发
- 验证扫码格式:20位数字
- 将有效扫码存入变量:ValidScanCode

第二步:调用MES查询

使用ValidScanCode调用MES API查询物料信息:
- API:http://mes/api/getMaterial
- 参数:{"barcode": "扫码值"}
- 返回:{"materialCode": "物料编码", "materialName": "物料名称", "batch": "批次"}
- 解析并存入变量:MaterialCode, MaterialName, Batch

第三步:写入数据库

将物料信息写入入库记录表:
- 表名:inbound_records
- 字段:barcode, material_code, material_name, batch, inbound_time
- inbound_time使用当前时间
- 写入成功后,设置变量InboundSuccess为true

技巧四:提供上下文信息

提供必要的背景信息,帮助AI更好理解需求。

示例

背景:我们的生产线有5台设备,每台设备有10个传感器

需求:编写脚本实现设备健康度计算

计算逻辑:
- 读取每台设备的10个传感器数据(变量命名:Device1_Sensor1 到 Device5_Sensor10)
- 每个传感器有正常范围(存储在配置表sensor_config中)
- 如果传感器值在正常范围内,得1分,否则得0分
- 设备健康度 = 正常传感器数 / 总传感器数 * 100%
- 将每台设备的健康度写入变量:Device1_Health 到 Device5_Health
- 如果健康度低于80%,触发报警

提示词模板库

模板1:API数据获取

编写脚本从API获取数据:

API信息:
- 地址:[API_URL]
- 方式:[GET/POST]
- 认证:[认证方式]
- 参数:[参数说明]

数据处理:
- 解析返回的[JSON/XML]
- 提取字段:[字段列表]
- 数据验证:[验证规则]

写入目标:
- CMS变量:[变量名列表]
- 数据库表:[表名](可选)

异常处理:
- API调用失败时,记录错误日志
- 超时时间设置为[X]秒

模板2:数据库操作

编写脚本实现数据库操作:

操作类型:[查询/插入/更新/删除]

数据库信息:
- 表名:[table_name]
- 字段:[field1, field2, field3]

操作逻辑:
- 触发条件:[条件描述]
- 数据来源:[CMS变量/API/文件]
- 处理规则:[业务规则]

结果处理:
- 成功:[成功后的操作]
- 失败:[失败后的处理]

模板3:数据处理脚本

编写数据处理脚本:

任务内容:
1. [第一步操作]
2. [第二步操作]
3. [第三步操作]

数据处理:
- 数据源:[来源说明]
- 处理逻辑:[处理规则]
- 输出目标:[目标说明]

异常处理:
- 任务失败时的处理方式
- 日志记录要求

说明:脚本编写完成后,可在计划任务模块中配置触发条件(如:每天X点/每小时/每X分钟)来自动执行此脚本

模板4:条件监控

编写条件监控脚本:

监控变量:[变量列表]

触发条件:
- 条件1:[条件描述]
- 条件2:[条件描述]
- 逻辑关系:[AND/OR]

触发动作:
1. [动作1]
2. [动作2]
3. [动作3]

恢复条件:
- [恢复条件描述]

恢复动作:
- [恢复后的操作]

常见问题

Q1: AI生成的脚本可以直接用于生产环境吗?

A: 不建议。正确流程:

  1. AI生成初始代码
  2. 在测试环境中运行验证
  3. 检查异常处理是否完善
  4. 性能测试
  5. 充分测试后再部署到生产环境

Q2: AI生成的代码有语法错误怎么办?

A:

  1. 检查需求描述是否清晰完整
  2. 重新描述需求,提供更多上下文
  3. 将错误信息反馈给AI,请求修正
  4. 手动修正明显的语法错误

Q3: 如何让AI生成更符合项目规范的代码?

A: 在描述需求时,明确说明:

  • 命名规范(如:变量使用驼峰命名)
  • 注释要求(如:每个方法添加功能说明)
  • 异常处理要求
  • 日志记录要求

Q4: AI能处理多复杂的脚本?

A: 建议:

  • 简单脚本(50行以内):直接生成
  • 中等复杂度(50-200行):分模块生成
  • 复杂脚本(200行以上):分步骤生成,逐步组合

Q5: 如何优化AI生成的代码性能?

A:

  1. 生成后,向AI提问:"如何优化这段代码的性能?"
  2. AI会分析性能瓶颈并提供优化方案
  3. 在实际环境中测试优化效果

最佳实践

1. 需求描述要具体

每次生成或修改都会消耗10积分,因此要一次性描述清楚,避免反复修改。

❌ 不好的描述:

写一个读取数据的脚本

✅ 好的描述:

编写脚本从PLC读取10个温度传感器数据(变量名:Temp1到Temp10),
计算平均值,如果平均值超过80度,触发报警

2. 提供完整的上下文

包括:

  • 数据来源和格式
  • 业务规则和逻辑
  • 异常情况的处理方式
  • 性能要求

3. 分步骤处理复杂逻辑

对于特别复杂的脚本,可以分模块生成后组合。但要注意每次生成都消耗10积分,建议:

  • 先规划好模块划分
  • 每个模块一次性描述清楚
  • 最后再请AI整合所有模块

4. 善用代码解释功能

遇到不理解的代码,让AI解释,加深理解。每次解释消耗10积分,建议一次性提问多个问题,提高效率。

5. 建立脚本模板库

将常用的、效果好的脚本保存为模板,提升团队效率。

6. 测试驱动开发

生成脚本后,先编写测试用例,验证功能正确性。

7. 代码审查

AI生成的代码也需要人工审查,特别关注:

  • 安全性(SQL注入、XSS等)
  • 异常处理是否完善
  • 性能是否满足要求

下一步