技术论坛

s7-1500 有的功能,也在S7-1200 能用 SPLIT

作者 主题
侠客

经验值: 899
发帖数: 16
精华帖: 0
主题:【分享】s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 楼主 2021-06-21 15:06:40


//分割符 

IF TypeOf(#RecSeparator)= TypeOf(#RecSeparator_S) THEN // 判断变量类型是否是字符串

    VariantGet(SRC := #RecSeparator,

                DST => #RecSeparator_S);//Variant 读出到字符串

ELSE

    VariantGet(SRC := #RecSeparator,

               DST => #RecSeparator_a);//Variant 读出到字符

    #RecSeparator_S := CHAR_TO_STRING(#RecSeparator_a);//字符转字符串

END_IF;

//结束符

IF TypeOf(#EndSeparator) = TypeOf(#EndSeparator_S) THEN// 判断变量类型是否是字符串

    VariantGet(SRC := #EndSeparator,

               DST => #EndSeparator_S);//Variant 读出到字符串

ELSE

    VariantGet(SRC := #EndSeparator,

               DST => #EndSeparator_a);//Variant 读出到字符

    #EndSeparator_S := CHAR_TO_STRING(#EndSeparator_a);//字符转字符串

END_IF;

//要转换的字符串

IF TypeOf(#DestStruct) = TypeOf(#DestStruct_S) THEN// 判断变量类型是否是字符串

    VariantGet(SRC := #DestStruct,

               DST => #DestStruct_S);//Variant 读出到字符串

ELSE

    Chars_TO_Strg(Chars  := #DestStruct,

                  pChars := 0,

                  Cnt    := #Cnt,

                  Strg   => #DestStruct_S);//Variant 读出字符转到字符串

END_IF;


//读出数据上限

#I_MAX:=UPPER_BOUND(ARR := #SrcArray, DIM := 1);

//循环把字符串分割到数组里的字符串

FOR #I := 0 TO #I_MAX DO

    //读出第一个分割位置

    #SEG_WZ := FIND(IN1 := #DestStruct_S, IN2 := #RecSeparator_S); 

    //第一个分割字符串写入第一个数组

    #SrcArray[#I] := LEFT(IN := #DestStruct_S, L := #SEG_WZ - 1);

    //删除第一个字符串与分割符

    #DestStruct_S := DELETE(IN := #DestStruct_S, L := #SEG_WZ, P := 1);

    //判断字符串里有没有分割符

    IF #SEG_WZ = 0 THEN

        //读出结束字符位置

        #END_WZ := FIND(IN1 := #DestStruct_S, IN2 := #EndSeparator_S);

        //写最后一个字符串到数组里

        #SrcArray[#I] := LEFT(IN := #DestStruct_S, L := #END_WZ - 1);

        //删除最一个字符串与结束字符

        #DestStruct_S := DELETE(IN := #DestStruct_S, L := #END_WZ, P := 1);

    END_IF;

    //判断有没有分割字符与结束字符 如果没有结束循环

    IF #SEG_WZ = 0 AND #END_WZ = 0 THEN

        EXIT;

    END_IF;

    //记录分割数量

    #Count := #I + 1;

END_FOR;


IF TypeOf(#RecSeparator)<> TypeOf(#RecSeparator_S) AND TypeOf(#RecSeparator)<>TypeOf(#RecSeparator_a) THEN

    #SPLIT := 1;//分割字符数据类型无效

ELSIF TypeOf(#EndSeparator) <> TypeOf(#EndSeparator_S) AND  TypeOf(#EndSeparator) <>TypeOf(#EndSeparator_a) THEN

    #SPLIT := 2;//结束字符数据类型无效

ELSIF  TypeOf(#DestStruct)<>TypeOf(#DestStruct_S) AND TypeOf(#DestStruct)<>TypeOf(#EndSeparator_a) THEN

    #SPLIT := 3;//要侵害字符串数据类型无效

ELSIF #RecSeparator_S=' ' THEN

    #SPLIT := 4;//分割字符不能为空

ELSIF #EndSeparator_S=' ' THEN

    #SPLIT := 5;//结束字符不能为空

ELSIF #I_MAX<1 THEN

    #SPLIT := 6;//待读取数组 SrcArray 过小

ELSE

    #SPLIT := 0;

END_IF;

参数

   

声明

   

数据类型

   

存储区

   

说明

   

RecSeparator

   

Input

   

Variant

   

I、Q、M、D、L

   

分隔符(CHAR OR STRING)

   

EndSeparator

   

Input

   

Variant

   

I、Q、M、D、L

   

定义完整字符串末尾的分隔符。(CHAR OR STRING)

   

SrcArray

   

InOut

   

Array of STRING

   

I、Q、M、D、L

   

已转换字符串的结构

   

DestStruct

   

Input

   

Variant

   

I、Q、M、D、L

   

指向待读取数组的指针。(Array of CHAR OR STRING)

   

Cnt

   

Input

   

UInt

   

I、Q、M、D、L

   

DestStruct:数类型是字符数组;多少字符转字符串;0:是全部

   

Ret_Val

   

Return

   

Int

   

I、Q、M、D、L

   

指令执行结果/错误代码(请参见“Ret_Val 参数”表格)

   

Count

   

Output

   

UDInt

   

I、Q、M、D、L

   

找到的字符串数量。

   

下表列出了“SPLIT”指令的参数

 

参数 RET_VAL

错误代码*

(W#16#...)

   

说明

   

0000

   


无错误。

   

0001

   

分割字符数据类型无效

   

0002

   

分割字符数据类型无效

   

0003

   

源字符串无效。

   

0004

   

分割字符不能为空

   

0005

   

结束字符不能为空

   

0006

   

数组 SrcArray 过小

   

 

SPLIT.txt

SPLIT参数说明.docx

SPLIT.txt  改一下SCL


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1701593&b_id=50&s_id=0&num=10

至圣

经验值: 16421
发帖数: 2400
精华帖: 0
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 1楼 2021-06-21 16:51:10

感谢你的分享!


开心每一天,懂得包容、感恩!
以下网友喜欢您的帖子:

  
游民

经验值: 128
发帖数: 12
精华帖: 0
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 2楼 2021-06-21 20:39:48

先给楼主赞一个,能问下一下这段程序是做什么用的吗?对SCL语言不是太懂


 
以下网友喜欢您的帖子:

  
版主

经验值: 69053
发帖数: 12266
精华帖: 59
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 3楼 2021-06-21 22:32:23

最后的文本不怎么好看了,不如直接贴图片了,既然附件提供下载


Q群:https://jq.qq.com/?k=9BDuEgf6
以下网友喜欢您的帖子:

  
至圣

经验值: 18410
发帖数: 2409
精华帖: 1
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 4楼 2021-06-22 10:57:55

下载来试一试


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18914
发帖数: 2108
精华帖: 0
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 5楼 2021-06-22 11:41:51

是啊,感谢分享哦


 
以下网友喜欢您的帖子:

  
至圣

经验值: 10582
发帖数: 1796
精华帖: 0
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 6楼 2021-06-22 17:12:16

赞,谢谢分享。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 5689
发帖数: 767
精华帖: 1
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 7楼 2021-06-22 17:14:14

谢谢分享,学习。


 
以下网友喜欢您的帖子:

  
游侠

经验值: 372
发帖数: 59
精华帖: 0
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 8楼 2021-07-21 09:27:24

感谢楼主分享!


攀登高峰,追求卓越!
以下网友喜欢您的帖子:

  
侠客

经验值: 948
发帖数: 106
精华帖: 0
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 9楼 2021-07-22 11:21:13


感谢楼主分享!


 
以下网友喜欢您的帖子:

  
侠客

经验值: 740
发帖数: 69
精华帖: 0
回复:s7-1500 有的功能,也在S7-1200 能用 SPLIT


只看楼主 10楼 2022-03-06 22:14:58

先给楼主赞一个


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
s7-1500 有的功能,也在S7-1200 能用 SPLIT
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。