脚本功能的基本介绍
现有的PLC已经提供了一套简单实用的自动化应用框架,但针对一些非标应用的开发存在如下问题:
1. 现有的PLC编辑器,缺乏基本的条件判断、跳转等;
2. 增加新的device或复合动作等,必须修改Delphi代码并重新编译;
诸多自动化应用平台,提供了底层库函数和用户程序接口,允许客户根据特定场景修改代码。TubePro通过开放NC的部分功能,注册到脚本宿主里,然后加载执行外部脚本,从而允许客户根据现有函数控制外设。
**目标**:
1. 开放NC层的控制接口,允许脚本访问和执行;
2. 增加脚本编辑与运行的交互界面;
3. 提供脚本编程框架:NC给脚本发指令,脚本反馈执行状态;脚本执行过程中,查看NC是否有停止请求;
# TubePro的CNC脚本使用说明
1、在平台配置工具高级配置里“启用脚本功能”;
2、脚本编辑;
可以使用记事本和vscode等工具,或者TubePro自带脚本编辑器,他的主要功能是脚本编辑与执行(空闲且无报警状态):
- 自定义脚本1-10执行时出现语法错误或返回异常时,均会报警(允许PLC里面调用);
- demo脚本屏蔽了所有执行异常引起的脚本报警;
- 文件保存目录为fsdataCypTube2016js;
3、PLC编辑器里面调用脚本并执行;
- “执行脚本”,允许传入参数,脚本可以根据参数做不同的动作,执行立即返回;
- ”等待脚本执行结束“,允许传入超时时间,大于0才会启用超时报警;
- ”停止脚本执行“,停止脚本,fsHost.IsReqStop()为true;
另外,脚本执行与等待执行结束,支持并行PLC,允许在某个并行PLC里面触发脚本执行,然后再主PLC等待执行结束;
# 编程说明
1. 脚本的执行入口为Run函数,Run函数的返回值true,表示执行正常,false表示执行失败,TubePro将报警;
2. 脚本的执行是单线程的,脚本执行时只能外部发停止请求,脚本接收到请求之后,自行响应停止;
3. js发送的日志格式为”js: XXX“;
4. 出现语法不正确时,日志部分将打印错误信息并报警(fsdemo.js屏蔽了所有执行时出现的报警),其中Line3表示第三行出错;
5. 脚本执行时可以通过RunError直接汇报报警信息;
脚本案例:不同零件长度执行不同plc过程
function Run(cmd)
{
return GetPartLengthToPLC();
}
function GetPartLengthToPLC()
{
var PartLength;
PartLength = fsCAD.GetCurrentPartLength();
if (PartLength <= 600) //判断零件长度小于等于600就会执行下面语句,可以通过改这句话来修改判断条件
{
fsHost.Log('零件长度小于600,不做任何动作')
}
else if (PartLength > 600 && PartLength <= 1400) //判断零件长度大于600且小于1400就会执行下面语句,可以通过改这句话来修改判断条件
{
var ATask =
{
doExec: function ()
{
log('开始执行');
fsNc.RunCustomStep(49); //执行自定义过程49,修改数字可以改变执行的自定义过程
},
isEnd: function ()
{ return fsNc.CustomStepIsEnd(); },
timeout: 1000*1000,
doSuccess: function (){ log('执行成功');},
doFailed: function (){log('执行失败');}
};
if (!doTask(ATask))
{
return false;
}
}
else if (PartLength > 1400 && PartLength <= 2000)//判断零件长度大于1400且小于2000就会执行下面语句,可以通过改这句话来修改判断条件
{
var ATask =
{
doExec: function ()
{
log('开始执行');
fsNc.RunCustomStep(48); //执行自定义过程48,修改数字可以改变执行的自定义过程
},
isEnd: function ()
{ return fsNc.CustomStepIsEnd(); },
timeout: 1000*1000,
doSuccess: function (){ log('执行成功');},
doFailed: function (){log('执行失败');}
};
if (!doTask(ATask))
{
return false;
}
}
else //零件大于2000时直接打印
fsHost.Log('零件长度大于2000,不做任何动作')
return true;
}