3.6、AI脚本助手
AI脚本助手通过自然语言描述控制逻辑或数据处理流程,自动生成符合语法规范的C#脚本,同时支持上传附件补充上下文,并可对现有脚本进行解释、调试与优化,核心用于快速完成脚本类工程开发。
3.6.1、功能说明
- 支持通过自然语言描述脚本需实现的触发条件、操作步骤(如数据读取、API调用、变量更新),AI自动生成合规的C#脚本
- 可对现有无注释、逻辑晦涩的工程脚本进行逐行分 析,生成通俗易懂的功能说明,降低脚本理解门槛
- 针对脚本运行错误(如逻辑漏洞、数据解析失败)或效率问题,提供智能排查与优化建议,减少脚本调试耗时
- 支持在对话中上传附件,将接口文档、脚本规范、错误信息或业务说明作为上下文提供给AI;
3.6.2、核心优势
1. 降低编程门槛
非专业编程背景的OT工程师(如工艺工程师、电气工程师),无需深入学习C#语法,即可完成系统集成、数据处理类脚本开发。
传统方式 vs AI方式:
传统方式:
学习C#语法 → 学习API文档 → 编写代码 → 调试错误 → 优化性能
需要:编程能力 + 大量学习时间
AI方式:
描述需求 → AI生成代码 → 测试验证 → 微调优化
需要:清晰表达逻辑的能力
2. 提升脚本质量与效率
- 语法规范:生成的脚本符合工业编程规范,减少语法错误
- 异常处理:自动添加必要的异常处理逻辑,提升脚本健壮性
- 性能优化:优化功能可提升脚本运行效率,降低系统资源占用
- 代码注释:自动添加清晰的注释,便于后期维护
- 附件理解:可结合用户上传的附件理解业务背景、接口字段和脚本约束,减少反复补充说明
3. 加速工程知识传递
快速解释旧脚本功能,助力新工程师或维护人员快速上手,避免因人员流动导致的工程知识断层。
场景示例:
- 接手旧项目,面对数百行无注释代码
- 传统方式:逐行阅读理解,可能需要数天
- AI方式:粘贴代码,AI生成功能说明,30分钟内理解核心逻辑
3.6.3、典型使用场景
场景一:第三方系统集成脚本开发
背景:需将生产数据上报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优化建议:
问题分析:
- 循环中频繁调用数据库插入,性能极差
- 字符串拼接方式不安全,存在SQL注入风险
- 没有批量处理机制
优化方案:
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倍以上
价值:
- 定位性能瓶颈
- 提供优化方案
- 提升脚本运行效率
场景四:结合附件生成脚本
背景:工程师已有接口文档、脚本规范或设备点位说明,不希望手动整理成大段文字。
使用方式:
上传附件:MES接口说明、变量点表、脚本规范
需求描述:
请根据附件中的接口字段和变量点位,生成一段工单数据同步脚本。
要求:
1. 按附件中的变量命名写入CMS变量
2. 接口异常时记录日志
3. 保留关键业务步骤注释
价值:
- 降低手动复制接口字段、点位说明的工作量
- 让AI基于完整资料生成脚本,减少遗漏关键约束
- 适合处理接口文档、错误日志、脚本规范等上下文较多的任务
3.6.4、5分钟快速上手
步骤1:打开AI脚本助手
在脚本编辑器中,点击工具栏的"AI助手"图标,或右键选择"AI辅助编写"。

步骤2:描述你的需求
在对话框中输入您的需求,可以是:
-
生成新脚本:描述需要实现的功能
-
解释现有脚本:粘贴代码,请求解释
-
调试优化:粘贴问题代码,描述问题
-
结合附件处理:上传接口文档、变量点表、脚本规范或错误日志,让AI结合附件内容生成、解释或优化脚本

步骤3:确认脚本版本
如果当前脚本存在未保存的修改,系统会提示“脚本修改内容尚未保存,是否先保存后再提交对话?”:
- 保存并提交:先保存当前脚本,保存成功后自动发送本次AI消息,AI会基于最新脚本内容继续处理
- 直接提交:不保存当前修改,直接发送本次AI消息,AI会基于最近一次已保存版本继续处理
- 取消:不保存、不提交,保持当前编辑状态不变
弹窗出现期间再次触发发送时,系统不会重复弹窗,会保持当前弹窗唯一实例。
步骤4:等待AI生成
AI会在5-15秒内分析需求、当前脚本内容和已上传附件,并生成代 码或解释。
步骤5:测试验证
- 将生成的代码复制到脚本编辑器
- 在测试环境中运行验证
- 根据实际情况微调
步骤6:部署应用
测试通过后,部署到生产环境。
3.6.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