最近开始,在学信捷支持POU的新软件,有个项目有34个轴,定义的功能块有多个重复,软件不支持取指针到数组,使用for遍历轴号,也不支持功能块自增复制。这样定义的功能块一个个复制+修改轴号+修改数组实在太麻烦了。不知道是我电脑配置不行还是软件太卡,双击修改数组和轴号,总觉得好卡,好在软件可以复制出来,导入到Excel表格编辑。
请看下面这张图,手动模式下,多个功能块,数组和轴号都是一一对应的,在这里,我重复复制34个一模一样的功能块,后面介绍如何使用Excel快速修改。
如果你以为用Excel手动一个个查找替换那就大错特错了,那样替换按键盘按得我实在是手痛,一不小心还容易出错。
为了快捷查找替换,可以通过WPS的js宏,来实现批量查找替换。前提是你的功能块定义都是有规律的。
将梯形图转换成指令表复制出来,导入Excel中,变成如下图。
从PLC复制到Excel表格中,一定要右键选择无格式文本粘贴,否则会出现乱码字符串。
打开我写的宏程序,选择开发工具,WPS宏编辑器,注意使用的宏选择,我使用的是js宏,因为风格贴近现代化,语法优美。
注意Excel表格中的第68行,如果要修改到68行,遍历就要大于这个值。所以输入69。
代码只查找 [0] 和轴号ID BMC_Axis000;所以在PLC软件中只需要傻瓜式复制出34个一模一样的就可以了。
配置完成,直接点击运行。
OK,全部替换成功,最后多了一个34轴,应该是0~33个,这里是把0全替换了,不过无伤大雅。这样很快就替换完成了。这时候再复制到PLC中。复制过程中,姿势一定要帅,按照我的步骤复制,不然复制到PLC软件中,指令表会出现乱码字符串。
复制回PLC软件中。全部正常显示。
完整js代码:
```function test(){ //------------------ 遍历表格-查找替换------------------
var i=1;//控制功能块数组var findNum=/\[0\]/g;//正则表达式,只查找[0]let findAxisIDString = "BMC_Axis000"; //只查找BMC_Axis000
var outGet;//最终输出得到结果
//row,遍历表格行数,必须从1开始,查找替换 for(var row=1;row<69;row++) {
var inputString = Sheets.Item(1).Range("A"+row).Value2; var replacement = "[" + i + "]"; //数组功能块,自增 //正则表达式,查找[0],i替换0值,for自增 var replacedString = inputString.replace(findNum, replacement);
// console.log(replacedString); // 输出替换后的字符串
//判断是否一致,跳过无关行;查找修改轴号 if (inputString !== replacedString) { //修改轴号 var buf = incrementString(findAxisIDString,i); var outGet = replacedString.replace(findAxisIDString, buf); //传回给表格 Sheets.Item(1).Range("A"+row).Value2 = outGet; console.log(outGet,"替换成功"); i++; } }}
function incrementString(str,i) { // 使用正则表达式提取数字部分 const match = str.match(/(\d+)$/); if (!match) return str; // 如果没有找到数字,返回原字符串
const number = parseInt(match[1], 10); // 将数字部分转换为整数 const incrementedNumber = number + i; // 自增
// 使用padStart确保数字是三位数格式 const paddedNumber = incrementedNumber.toString().padStart(3, '0');
// 替换原字符串中的数字部分 return str.replace(/(\d+)$/, paddedNumber); } ````
|