[西门子] S7-200PLC字符串中数字信息提取问题

[复制链接]
查看1238 | 回复7 | 2012-3-24 00:30:20 | 显示全部楼层 |阅读模式
{:soso_e181:}S7-200PLC字符串中数字信息提取问题
上位机发送字符串格式如下:"#&A,1;&B,120;&C,20,0;&D,1;&1,1234,39600,Y;&2,123,32400,Y;&3,0,0;
&4,0,0,Y;&5,0,0,Y;
&6,0,0,Y;&7,0,0,Y;&8,0,0,Y;&9,0,0,Y;$R$00",前面&B,120;格式固定,但数字大小和占的存储空间位置不定,后面的&1,1234,39600,Y;格式固定,但是这样的一组字符串个数是不确定的  可以一直加到&n,2324,324324,Y; 并且里面的数字大小和所占空间位置不定,现在需要PLC程序将上述的数字信息一份一份的提取出来,但像&1中的信息不用管,我的想法就是用表查找指令找到逗号的位置,然后判断逗号后面紧挨的那位是不是在0-9之间,如果是就将这段数据用字符串转数字命令提取出来,这样应该是按顺序依次显示为:1,120,20,0,1,1234,39600。。。。但结果不是这样的。程序现在出不来,希望各位高手给与指导。
怎么从字符串中提取数字信息???

loveplc | 2012-3-24 13:27:20 | 显示全部楼层
首先要注意通讯参数,比如9600,7位等等
其次,要注意接受的方式,最好是16进制,也就是传说中的 0,1,2  .....   A,B,C,D,E
任何一个字符,比如你说的逗号,都有一个ascii码 换算过来是2个16进制组合,这就要查下ascii码表
举个例子 1的ascii是31,2是32 3是33  这样一来 就计算出了啊!
jackcity2012 | 2012-3-24 15:40:53 | 显示全部楼层
谢谢!
这样一位一位是可以查出来的,但是用户信息可以增加,数据量是不确定的
考虑是用一种通用的方法
自己思考用查表指令就是查找16#2c(逗号的十六进制)然后保存逗号位置,判断下一位是不是在0-9之间 如果是就将这一段数据取出来。
以下是我的程序段代码 您帮忙分析分析  字符串信息在VB1500开始的存储空间

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
jackcity2012 | 2012-3-24 15:47:17 | 显示全部楼层
loveplc 发表于 2012-3-24 13:27
首先要注意通讯参数,比如9600,7位等等
其次,要注意接受的方式,最好是16进制,也就是传说中的 0,1,2  . ...

首先感谢您的指点!
您说的那个方法是可以 ,但是用户信息可以不断更新,这样的话信息量是不确定的,现在是用一种通用方法,就是找到16#2c(逗号的十六进制)位置,然后判断下一位是不是在0-9之间,如果是那就将这段数字信息提取出来。以下是我的处理程序,您给帮忙分析分析
谢谢!





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
loveplc | 2012-3-24 20:21:44 | 显示全部楼层
程序应该没有问题吧!具体要到机子上测试才可以!
思路没有问题
jackcity2012 | 2012-3-24 22:17:49 | 显示全部楼层
loveplc 发表于 2012-3-24 20:21
程序应该没有问题吧!具体要到机子上测试才可以!
思路没有问题

您好!我问您一个问题:表查找指令是不是只能按照字查找,像逗号只是占一个字节,这样的话,就有可能查不到了?
loveplc | 2012-3-25 09:50:00 | 显示全部楼层
一定要做个接受缓存区,观察接受区,找出规律,注意接受速度,有可能丢数据哦
huyongjiang | 2012-3-27 21:04:14 | 显示全部楼层
灌水了!
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则