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

已锁定

无民

  • 帖子

    16
  • 精华

    0
  • 被关注

    4

论坛等级:侠客

注册时间:2010-06-22

普通 普通 如何晋级?

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

2318

10

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

s7-1500 有的功能,也在S7-1200 能用 SPLIT 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有13023条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。