回复:200smart 如何将10位16进制数用十进制显示?直接计算会溢出

已锁定

xxxyyybbb

  • 帖子

    16
  • 精华

    0
  • 被关注

    0

论坛等级:游民

注册时间:2018-07-04

普通 普通 如何晋级?

发布于 2024-12-27 09:48:21

17楼

这个是我目前的处理方式,本来是梯形图写的,导出成awl文件用记事本打开后:

SUBROUTINE_BLOCK 耳标数据处理:SBR8

TITLE=子程序注释

VAR

t_nation1_B:BYTE;

t_nation1_I1:WORD; // 高位数值

t_nation1_I2:WORD; // 转化后

t_nation2_I:WORD;

t_dec_h8_2:DWORD; // 十进制高8位2带0

t_dec_h8_3:DWORD; // 十进制高8位3带0

t_dec_l4:DWORD;

t_dec_h8_add1:DWORD; // 高位相加1

t_dec_h8_add2:DWORD; // 高位相加2

END_VAR

BEGIN

Network 1 

// 程序段注释

LD     SM0.0

LPS

MOVB   VB1000, LB0

AENO

ANDB   2#1111, LB0

AENO

BTI    LB0, LW1

AENO

BTI    VB1001, LW5

LPP

MOVW   LW1, LW3

AENO

*I     +256, LW3

AENO

MOVW   LW3, VW1010

+I     LW5, VW1010

Network 2 

// 将读取到的字节分到2个双字中的低位,防止因最高位为1导致计算成负数

LD     SM0.0

MOVB   VB1002, VB1102

MOVB   VB1003, VB1103

MOVB   VB1004, VB1105

MOVB   VB1005, VB1106

MOVB   VB1006, VB1107

Network 3 

// 将高2位字节乘16777216(16#FFFF)中的上4位1677

LD     SM0.0

MOVD   VD1100, VD1140

*D     +1677, VD1140

Network 4 

// 将高2位字节乘16777216(16#FFFF)中的下4位7216,并处理相关数据

LD     SM0.0

MOVD   VD1100, VD1128

AENO

*D     +7216, VD1128

AENO

MOVD   VD1128, VD1144

AENO

/D     +10000, VD1144

AENO

MOVD   VD1144, LD7

AENO

*D     +10000, LD7

AENO

MOVD   VD1128, VD1132

-D     LD7, VD1132

Network 5 

LD     SM0.0

MOVD   VD1104, VD1148

AENO

/D     +10000, VD1148

AENO

MOVD   VD1148, LD11

AENO

*D     +10000, LD11

AENO

MOVD   VD1104, VD1136

-D     LD11, VD1136

Network 6 

LD     SM0.0

LPS

MOVD   VD1132, LD15

AENO

+D     VD1136, LD15

AENO

AD>=   LD15, 10000

=      V3.0

LRD

AN     V3.0

MOVD   LD15, VD1124

MOVD   VD1140, LD19

AENO

+D     VD1144, LD19

AENO

MOVD   LD19, VD1120

+D     VD1148, VD1120

LPP

A      V3.0

MOVD   LD15, VD1124

-D     +10000, VD1124

MOVD   VD1140, LD19

AENO

+D     VD1144, LD19

AENO

MOVD   VD1148, LD23

AENO

+D     LD19, LD23

AENO

MOVD   LD23, VD1120

+D     1, VD1120

Network 7 

// 数值转化为字符串

LD     SM0.0

DTS    VD1120, VB1200, 0

AENO

DTS    VD1124, VB1240, 0

AENO

ITS    VW1010, VB1280, 0

Network 8 

// 将空格换为0

LD     SM0.0

LPS

SSCPY  VB1200, 5, 8, VB1220

AB=    VB1221, ' '

MOVB   '0', VB1221

LRD

AB=    VB1222, ' '

MOVB   '0', VB1222

LRD

AB=    VB1223, ' '

MOVB   '0', VB1223

LRD

AB=    VB1224, ' '

MOVB   '0', VB1224

LRD

AB=    VB1225, ' '

MOVB   '0', VB1225

LRD

AB=    VB1226, ' '

MOVB   '0', VB1226

LRD

AB=    VB1227, ' '

MOVB   '0', VB1227

LRD

AB=    VB1228, ' '

MOVB   '0', VB1228

LRD

SSCPY  VB1240, 9, 4, VB1260

LRD

AB=    VB1261, ' '

MOVB   '0', VB1261

LRD

AB=    VB1262, ' '

MOVB   '0', VB1262

LRD

AB=    VB1263, ' '

MOVB   '0', VB1263

LPP

SSCPY  VB1280, 6, 3, VB1300

Network 9 

LD     SM0.0

LPS

SCPY   VB1220, VB1320

SCAT   VB1260, VB1320

SCPY   VB1300, VB1380

SCAT   VB1320, VB1380

AB=    VB54, 1

SCPY   VB1320, VB1340

SCPY   VB1380, VB1400

LPP

AB=    VB54, 2

SCPY   VB1320, VB1360

SCPY   VB1380, VB1420

Network 10 

// 耳标分拆为2个数据

LD     SM0.0

BMB    VB1381, VB8000, 7

AENO

MOVB   65, VB8007

AENO

MOVB   16#30, VB7999

AENO

STD    VB7999, 1, VD8100

AENO

BMB    VB1388, VB8000, 8

AENO

MOVB   65, VB8008

AENO

STD    VB7999, 1, VD8104

AENO

MOVR   VD1024, VD8108

END_SUBROUTINE_BLOCK


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9260条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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