FP_BCD_TO_ASCII

BCD -> ASCII转换

如果触发器ENTRUE,则此FP指令会将s1中的BCD代码转换为ASCII代码。s2_Control指定要转换的字节数和转换方向。

结果存储在d_Start指定的区域中。ASCII代码需要8位(1个字节)来表示1个BCD字符。转换为ASCII后,数据长度将是源数据长度的两倍。

参数

输入

s1 (WORD, DWORD)

BCD代码

s2_Control (WORD)

字节数和转换方向

输出

d_Start (WORD, INT, UINT)

结果的数据区域的起始地址。大小为n_Bits * 2个字。

标注

指定控制代码s2_Control

  1.  (1) 要转换的数据大小:

    16位:要转换1–2个字节

    32位:要转换1-4个字节

  2.  (2) 始终为0
  3.  (3) 转换方向:

    0:正

    1:反

存储时,组成一个字节的两个字符互换。两个字节作为一段数据进行转换。

  • 正方向:

  • 反方向:

表示BCD字符的ASCII HEX代码:

BCD字符

ASCII HEX代码

0123456789 16#30 16#31 16#32 16#33 16#34 16#35 16#36 16#37 16#38 16#39

错误标志

sys_bIsOperationErrorHold(变为TRUE并保持为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果由s1_Start指定的数据不是BCD数据

  • 如果由s2_Control指定的字节数大于由s1_Start指定的区域

  • 如果转换结果大于由d_Start指定的数据区域

  • 如果s2_Control = 0

  • 如果转换方向超出范围

  • 如果在s2_Control中指定的字节数大于4

sys_bIsOperationErrorNonHold(对于一次扫描变为TRUE)
  • 如果使用索引寄存器指定的区域超出限制。

  • 如果由s1_Start指定的数据不是BCD数据

  • 如果由s2_Control指定的字节数大于由s1_Start指定的区域

  • 如果转换结果大于由d_Start指定的数据区域

  • 如果s2_Control = 0

  • 如果转换方向超出范围

  • 如果在s2_Control中指定的字节数大于4

示例16位数据,正方向,2个字节(字符)

偏移量

BCD字符

偏移量

转换的ASCII代码

BCD当量

s1

0

16#1234

Þ

d_Start

0

16#3433

43

s2_Control

16#0002

16#3231

21

示例16位数据,反方向,2个字节(字符)

偏移量

BCD字符

偏移量

转换的ASCII代码

BCD当量

s1

0

16#1234

Þ

d_Start

0

16#3231

21

s2_Control

16#1002

16#3433

43

示例32位数据,正方向,4个字节(字符)

偏移量

BCD字符

偏移量

转换的ASCII代码

BCD当量

s1

0

16#5678

Þ

d_Start

0

16#3837

87

1

16#1234

1

16#3635

65

s2_Control

16#0004

16#3433

43

16#3231

21

示例32位数据,反方向,4个字节(字符)

偏移量

BCD字符

偏移量

转换的ASCII代码

BCD当量

s1

0

16#5678

Þ

d_Start

0

16#3231

21

1

16#1234

1

16#3433

43

s2_Control

16#1004

16#3635

65

16#3837

87

示例

POU头

所有用于编程此函数的输入和输出变量已在POU头中声明。所有编程语言使用相同的POU头。

	VAR
		bStart: BOOL:=FALSE;
		wInput: WORD:=16#1234;
		awResult: ARRAY [0..2] OF WORD:=[3(0)];
	END_VAR

POU本体

当变量bStart设置为TRUE时,执行此函数。s1_Start开始的2个字节以反方向转换为ASCII值。

LD本体

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_COMMENT,,After conversion: ø^awResult[0]=16#3231ø^awResult[1]=16#3433ø^awResult[2] is not written,24,1,39,5,);
B(B_CONTACT,,bStart,4,4,6,6,R);
B(B_F,FP_BCD_TO_ASCII!,,12,3,22,8,,?DEN?D@'s1'?Ds2_Control?AENO?Cd_Start);
B(B_VARIN,,wInput,10,5,12,7,);
B(B_VAROUT,,awResult[0],22,5,24,7,);
B(B_VARIN,,16#1002,10,6,12,8,);
L(1,0,1,8);
L(1,5,4,5);
L(6,5,12,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

If (DF(bStart)) Then
    FP_BCD_TO_ASCII(s1 := wInput, s2_Control := 16#1002,
                    d_Start => awResult[0]);
            (* After conversion: 
			awResult[0]=16#3231
			awResult[1]=16#3433
			awResult[2] is not written *)

End_if;

最后更新日期: 此页面上的反馈松下热线