FP_ASCII_TO_BCD

ASCII->BCD转换

如果触发器ENTRUE,此FP指令将s1_Start中的十六进制ASCII代码转换为BCD字符。s2_Control指定要转换的字节数和转换方向。

结果存储在d中。

参数

输入

s1_Start (WORD, INT, UINT)

起始地址

s2_Control (WORD)

字节数和转换方向

输出

d (WORD, DWORD)

转换字节

标注

  • 指定控制代码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

示例有符号/无符号的16位数据,正方向,4个字符

偏移量

ASCII代码

BCD当量

偏移量

转换的BCD字符

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

3

1

s2_Control

16#0004

示例16位数据,反方向,4个字符

偏移量

ASCII代码

BCD当量

偏移量

转换的BCD字符

s1_Start

0

16#3231

21

Þ

d

0

16#1234

1

16#3433

43

1

s2_Control

16#1004

示例32位数据,正方向,8个字符

偏移量

ASCII代码

BCD当量

偏移量

转换的BCD字符

s1_Start

0

16#3231

21

Þ

d

0

16#3412

1

16#3433

3

1

16#7856

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#0008

示例32位数据,反方向,8个字符

偏移量

ASCII代码

BCD当量

偏移量

转换的BCD字符

s1_Start

0

16#3231

21

Þ

d

0

16#5678

1

16#3433

43

1

16#1234

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#1008

示例32位数据,反方向,7个字符

当正在转换奇数个字符时,如果转换方向为"正",将对最后转换字节的位位置0–3输入0。如果转换方向为“反方向”,将对位位置4–7输入0:

偏移量

ASCII代码

BCD当量

偏移量

转换的BCD字符

s1_Start

0

16#3231

21

Þ

d

0

16#4567

1

16#3433

43

1

16#0123

2

16#3635

65

2

3

16#3837

87

3

s2_Control

16#1007

错误标志

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

  • 如果指定16#30–16#39之外的ASCII字符

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

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

  • 如果s2_Control = 0

  • 如果转换方向超出范围

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

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

  • 如果指定16#30–16#39之外的ASCII字符

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

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

  • 如果s2_Control = 0

  • 如果转换方向超出范围

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

示例

POU头

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

	VAR
		bStart: BOOL:=FALSE;
			(*activates the function*)
		wASCIIInput: WORD:=16#3031;
		wControlCode: WORD:=16#2;
			(*specifies the operation:
digit 0: the number of bytes
to convert
digit 1,2: has to be zero
digit 3: nomal or reverse direction*)
		wConversionResult: WORD:=0;
			(*result after a 0->1 leading
edge from start:
[16#2033,0]*)
	END_VAR

POU本体

当变量bStart设置为TRUE时,执行此函数。ASCII输入值的两个字符以正方向转换

LD本体

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,5,2,7,4,);
B(B_VARIN,,wASCIIInput,11,3,13,5,);
B(B_VARIN,,wControlCode,11,4,13,6,);
B(B_VAROUT,,wConversionResult,23,3,25,5,);
B(B_F,FP_ASCII_TO_BCD!,,13,1,23,6,,?DEN?Ds1_Start?Ds2_Control?AENO?Cd);
L(1,3,5,3);
L(7,3,13,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST本体

if bStart then
    FP_ASCII_TO_BCD(s1_Start := wASCIIInput, 
                    s2_Control := wControlCode, 
                    d => wConversionResult);
END_IF;

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