西门子1200PLC字符串拼接案例

发布时间 2023-11-22 16:41:21作者: 苏倩梁

案例需求:

 

1、输入一段字符串使用逗号分割

2、将输入的字符串在分割开头插入指定字符,如“W”

3、重新输出添加的字符

实现步骤:

1、了解指令

 
 
 
 

2、创建DB块

 

3、编写逻辑代码 使用SCL

 
 
//插入内容
"data".插入内容1 := CHAR_TO_STRING(IN := 'W');
"data".插入内容2 := CHAR_TO_STRING(IN := ',');


#R_TRIG_Instance_1(CLK := "data".转换触发);


"data".字符长度 := LEN("data".输入内容);

//1、将字符串拆解存入字符数组中
Strg_TO_Chars(Strg := "data".输入内容,
              pChars := 0,
              Cnt => "data".移动量,
              Chars := "data".输入内容转换);


IF #R_TRIG_Instance_1.Q THEN
    //2、查找字符数组
    FOR #i := 0 TO "data".字符长度 DO // 
        //3、判断分割符号  , 
        IF STRING_TO_CHAR(IN := "data".输入内容转换[#i]) = ',' THEN
            //4、对字符数组进行字符插入并重新拼接,然后输出
            "data".分割次数 := "data".分割次数 + 1;
            IF "data".分割次数 = 1 THEN//第一次分割
                "data".输入内容暂存 := CONCAT(IN1 := "data".插入内容1, IN2 := STRING_TO_CHAR(IN := "data".输入内容转换[#n]));
                FOR #n := 0 TO #i - 2 DO // Statement section IF
                    "data".输入内容暂存 := CONCAT(IN1 := "data".输入内容暂存, IN2 := STRING_TO_CHAR(IN := "data".输入内容转换[#n + 1]));
                END_FOR;
                "data".上一次分割位置 := #i;
                CONTINUE;
            ELSIF "data".分割次数 > 1 THEN//第二次分割
                "data".输入内容暂存 := CONCAT(IN1 := "data".输入内容暂存, IN2 := STRING_TO_CHAR(IN := "data".插入内容2));
                "data".输入内容暂存 := CONCAT(IN1 := "data".输入内容暂存, IN2 := STRING_TO_CHAR(IN := "data".插入内容1));
                
                FOR #n := "data".上一次分割位置 TO #i - 2 DO
                    "data".输入内容暂存 := CONCAT(IN1 := "data".输入内容暂存, IN2 := STRING_TO_CHAR(IN := "data".输入内容转换[#n + 1]));
                END_FOR;
                "data".上一次分割位置 := #i;
                CONTINUE;
            END_IF;
            
        END_IF;
        IF #i = "data".字符长度 THEN//最后一次分割
            "data".输入内容暂存 := CONCAT(IN1 := "data".输入内容暂存, IN2 := STRING_TO_CHAR(IN := "data".插入内容2));
            "data".输入内容暂存 := CONCAT(IN1 := "data".输入内容暂存, IN2 := STRING_TO_CHAR(IN := "data".插入内容1));
            
            FOR #n := "data".上一次分割位置 TO #i - 2 DO
                "data".输入内容暂存 := CONCAT(IN1 := "data".输入内容暂存, IN2 := STRING_TO_CHAR(IN := "data".输入内容转换[#n + 1]));
            END_FOR;
        END_IF;
        
        
    END_FOR;
    
END_IF;