DINT_STRING转换程序分享

已锁定

spring

官方工程师

  • 帖子

    191
  • 精华

    5
  • 被关注

    138

论坛等级:游侠

注册时间:2003-06-06

普通 普通 如何晋级?

DINT_STRING转换程序分享

4237

6

2006-05-11 10:41:18

在一些通信程序中,需要将DINT 格式的数据转换为STRING 类型。虽然使用STEP7 自带的FC5(DI_STRING)可以把DINT转换为 STRING,但输出是从前排列的,例如输入1234,输出'$t''+''1''2''3''4',前面空位没有相应补充'0', 而且STRING 占用长度也比较大,用起来不太方便。
改进程序:
输入范围,0-2147483647,输出类型Array [1..10] Of Char,
前面会相应补充'0',
例如:输入 1234
   输出 '0''0''0''0''0''0''1''2''3''4' 

使用时如果数据不长,使用几位,就在输出结果中取用几位即可。
将源代码编译后,调用FB204即可,也可直接调用FC205(程序中指定MD0 为输入,大家可自行修改),但需将结果从Array中取出。
FUNCTION FC 205 : VOID
TITLE =
AUTHOR : zc
NAME : DINT_ASC
VERSION : 0.1


VAR_INPUT
DINT_IN : DINT ;
END_VAR
VAR_OUTPUT
ASC_OUT : ARRAY [1 .. 10 ] OF CHAR ;
END_VAR
VAR_TEMP
DINT_IN_TEMP1 : DINT ;
DINT_IN_TEMP2 : DINT ;
DINT_IN_TEMP3 : DINT ;
LOW_BCD : DWORD ;
HIGH_BCD : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =


L #DINT_IN;
L 0;
JC END;


L #DINT_IN;
L L#10000000;
>D ;
JCN NORM;

L #DINT_IN;
L L#10000000;
/D ;
T #DINT_IN_TEMP2; //HIGH 3 BIT of DIN_IN

L #DINT_IN_TEMP2;
L L#10000000;
*D ;
T #DINT_IN_TEMP3;

L #DINT_IN;
L #DINT_IN_TEMP3;
-D ;
T #DINT_IN_TEMP1; // LOW 7 BIT of DINT_IN

JU BCDS;


NORM: L 0;
T #DINT_IN_TEMP2;
L #DINT_IN;
T #DINT_IN_TEMP1;

BCDS: NOP 0; // BCD convert start

L #DINT_IN_TEMP1;
DTB ;
T #LOW_BCD;

L #DINT_IN_TEMP2;
DTB ;
T #HIGH_BCD;


L #LOW_BCD;
L DW#16#F;
AD ;
L B#16#30;
+D ;
T #ASC_OUT[10]; //GET CHAR[10]

L #LOW_BCD;
L DW#16#F0;
AD ;
RRD 4;
L B#16#30;
+D ;
T #ASC_OUT[9]; //GET NUM[9]

L #LOW_BCD;
L DW#16#F00;
AD ;
RRD 8;
L B#16#30;
+D ;
T #ASC_OUT[8]; //GET NUM[8]

L #LOW_BCD;
L DW#16#F000;
AD ;
RRD 12;
L B#16#30;
+D ;
T #ASC_OUT[7]; //GET NUM[7]

L #LOW_BCD;
L DW#16#F0000;
AD ;
RRD 16;
L B#16#30;
+D ;
T #ASC_OUT[6]; //GET NUM[6]

L #LOW_BCD;
L DW#16#F00000;
AD ;
RRD 20;
L B#16#30;
+D ;
T #ASC_OUT[5]; //GET NUM[5]

L #LOW_BCD;
L DW#16#F000000;
AD ;
RRD 24;
L B#16#30;
+D ;
T #ASC_OUT[4]; //GET NUM[4]


L #HIGH_BCD;
L W#16#F;
AD ;
L B#16#30;
+D ;
T #ASC_OUT[3]; //GET NUM[3]

L #HIGH_BCD;
L W#16#F0;
AD ;
RRD 4;
L B#16#30;
+D ;
T #ASC_OUT[2]; //GET NUM[2]

L #HIGH_BCD;
L W#16#F00;
AD ;
RRD 8;
L B#16#30;
+D ;
T #ASC_OUT[1]; //GET NUM[1]


END: NOP 0;
END_FUNCTION

FUNCTION_BLOCK FB 204
TITLE =
VERSION : 0.1


VAR
S1 : ARRAY [1 .. 10 ] OF CHAR ;
END_VAR
BEGIN
NETWORK
TITLE =

CALL FC 205 (
DINT_IN := MD 0,
ASC_OUT := #S1);


END_FUNCTION_BLOCK
DINT_STRING转换程序分享 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54756条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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