hblovetian
新手,望各位大哥大姐指点。
级别: 略有小成
精华主题: 0
发帖数量: 242 个
工控威望: 492 点
下载积分: 6069 分
在线时间: 142(小时)
注册时间: 2010-11-04
最后登录: 2024-09-16
查看hblovetian的 主题 / 回贴
楼主  发表于: 2017-03-29 22:27
宏指令中怎么取一个字符的前几位,后几位,和中间几位。如'0123456789'怎么取12345,12345678,6789。怎么编写宏指令,谢谢。
希望各位多多指点。谢谢!
xwk0711
级别: 略有小成
精华主题: 0
发帖数量: 189 个
工控威望: 370 点
下载积分: 1066 分
在线时间: 169(小时)
注册时间: 2013-01-30
最后登录: 2024-11-04
查看xwk0711的 主题 / 回贴
1楼  发表于: 2017-03-30 10:45
在说明书里面找类似能实现这样功能的指令,自己再摸索
hblovetian
新手,望各位大哥大姐指点。
级别: 略有小成
精华主题: 0
发帖数量: 242 个
工控威望: 492 点
下载积分: 6069 分
在线时间: 142(小时)
注册时间: 2010-11-04
最后登录: 2024-09-16
查看hblovetian的 主题 / 回贴
2楼  发表于: 2017-03-30 10:57
引用
引用第1楼xwk0711于2017-03-30 10:45发表的  :
在说明书里面找类似能实现这样功能的指令,自己再摸索

都看了几遍手册了,没有能实现的函数,望指点
希望各位多多指点。谢谢!
tyw123456
级别: 家园常客

精华主题: 1 篇
发帖数量: 113 个
工控威望: 797 点
下载积分: 313 分
在线时间: 256(小时)
注册时间: 2016-09-13
最后登录: 2024-09-23
查看tyw123456的 主题 / 回贴
3楼  发表于: 2017-03-30 11:18
你这个问题有问题,你所说的123456789是十进制数,但是我们实际用或者你设数字元件的时候都没有十进制元件选用的也就是说我们看到的0123456789实际上是触摸屏内部将16位或是32位的数值转化过的数值,实际上他在内部123456789是075BCD15 也就是一个32位的字符,然后你要获取的只能说获取这个数的高16位或低16位,然后转换为16位的时候,你又可以获取他的高8位和低八位了,指令是什么LOWORO HIWORO LOBIYE HIBIYE,我忘了, 你所说的获取高中低字是不正确的,这些字符处理的最低是一个八位二进制的数据,假设你说按高中低的话也就是 00000000 00000000 00000000 这样的一段24位二进制字符
静水深流
lixianji_007
级别: 工控侠客
精华主题: 0
发帖数量: 242 个
工控威望: 2871 点
下载积分: 5503 分
在线时间: 769(小时)
注册时间: 2011-08-27
最后登录: 2024-11-06
查看lixianji_007的 主题 / 回贴
4楼  发表于: 2017-03-30 12:16
图片:
函数库里有这个函数的,不过威纶的宏指令手册里没有讲解,做了个样例仿真一下可以的;

macro_command main()
char a[10],b[10]   //定义
GetData(a[0],"TK6070iP",lw,20,10)  //读取源字符串
StringMid(a[2],6,b[0] )    //从字符串lw20开始的第3个字符截取6个字符保存到b[0]开始地址;
SetData (b[0],"TK6070iP",lw,100,10)  //截取的字符串保存到lw100开始的地址
end macro_command
[ 此帖被lixianji_007在2017-03-30 12:22重新编辑 ]
本帖最近评分记录:
  • 下载积分:+1(anke5410) 热心助人!
  • 天下事有难易乎?为之,则难者亦易矣!不为,则易者亦难矣!
    tyw123456
    级别: 家园常客

    精华主题: 1 篇
    发帖数量: 113 个
    工控威望: 797 点
    下载积分: 313 分
    在线时间: 256(小时)
    注册时间: 2016-09-13
    最后登录: 2024-09-23
    查看tyw123456的 主题 / 回贴
    5楼  发表于: 2017-03-30 13:49
    图片:
    引用
    引用第4楼lixianji_007于2017-03-30 12:16发表的  :
    函数库里有这个函数的,不过威纶的宏指令手册里没有讲解,做了个样例仿真一下可以的;

    macro_command main()
    char a[10],b[10]   //定义
    GetData(a[0],"TK6070iP",lw,20,10)  //读取源字符串
    .......

    试了一下,没有达到那种效果啊,还是我对数字元件的设置有错,我设置的是32位浮点数,感觉不对吧,数值元件的数值又不是每一个数都是一个8位二进制,怎么可以填充的满10个CHAR 函数呢
    静水深流
    lixianji_007
    级别: 工控侠客
    精华主题: 0
    发帖数量: 242 个
    工控威望: 2871 点
    下载积分: 5503 分
    在线时间: 769(小时)
    注册时间: 2011-08-27
    最后登录: 2024-11-06
    查看lixianji_007的 主题 / 回贴
    6楼  发表于: 2017-03-30 14:28
    这个是字符串截取,不是浮点数的截取,如果要10进制数的截取的话可以用算术运算解决,如数据是123456,要取前4位的话就除以100,取商;如要取后4位的话就用减法;也可用逻辑运算和算术运算配合的方法实现。
    天下事有难易乎?为之,则难者亦易矣!不为,则易者亦难矣!
    hblovetian
    新手,望各位大哥大姐指点。
    级别: 略有小成
    精华主题: 0
    发帖数量: 242 个
    工控威望: 492 点
    下载积分: 6069 分
    在线时间: 142(小时)
    注册时间: 2010-11-04
    最后登录: 2024-09-16
    查看hblovetian的 主题 / 回贴
    7楼  发表于: 2017-03-30 17:50
    引用
    引用第6楼lixianji_007于2017-03-30 14:28发表的  :
    这个是字符串截取,不是浮点数的截取,如果要10进制数的截取的话可以用算术运算解决,如数据是123456,要取前4位的话就除以100,取商;如要取后4位的话就用减法;也可用逻辑运算和算术运算配合的方法实现。

    就是要这样的效果,谢谢。我这个是和电子秤通讯读里面的数据,数据全是ASCII码。比如现在称显示净重500KG,接收的数据就是wn500.000kg,然后我就是想取500.00进行加减运算。不知取出的ASCI码直接不转换能按照10进制的方式运算吗?比如第一次是500(ASCII码),第二次700(ASCII码),可以直接700-500=200,得出第二次加了200kg的东西吗?因为用的自由口通讯,用INPUT接收的数据第一位(起始位)和第十位(停止位)都在里面,,每次发送读取数据,接收的数据都比上一次错2个位置。
    希望各位多多指点。谢谢!