[信捷] 信捷PLC之-多功能块和轴-懒人替换

[复制链接]
查看315 | 回复0 | 2024-1-1 10:38:33 | 显示全部楼层 |阅读模式
    最近开始,在学信捷支持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);  }  ````



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则