技术论坛

 初试STEP 7二三事

返回主题列表
作者 主题
w7703
游民

经验值:60
发帖数:11
精华帖:1
楼主    2012-03-07 10:09:47
主题:初试STEP 7二三事 精华帖 
初用STEP 7,几天来的摸爬滚打中,从论坛上汲取了不少西门前辈们的经验,如今咱也有一点经历分享给大家。
命题:CPU315+CP340(RS232),使用“串口”及“ASCII”驱动连接打印机。打印内容有:字符串(类似ABC6abc)、日期(07-Mar-2012)、数字编号(000168)、浮点数(12.34)等。
今天我就拿输出“数字编号”说事。
思路:数字编号是DINT类型,因为最终要的是字符,所以要用“FC5 DI_STRING”功能块。一个功能块就搞定,SO EZ!
行动:1、DI_STRING,进去的000168出来的字符只有313638H,还要进行第二步前导0处理。
2、处理前导0,对原DI进行判断,依次:DI小于100000,字符串区第一位写30H;小于10000,第二位写30H;小于1000,第三位写30H;小于100,第四位写30H;小于10,第五位写30H。
3、输出字符串。
结果:考虑还是欠周全,第二步虽然进行了前导0处理,但是因为DI数字的位数不定,所以要BLKMOV指令的地址和大小也要判断考虑,烦烦烦!

这么繁琐,让我们休息一下换种思路吧!

思路_换:DI的数字最前面的0它不是给咱忽略了吗?那咱不让0排在最前它总不会无视吧。DI是6位,给它加上L#1000000,这下DI变成7位了,而且0被“保护”了。下面就可以继续堂而皇之地用FC5 DI_STRING了,String出来以后,string地址的前面四个字节(两个头,一个符号,一个我们加上的‘1’)都给扔了,只要后面的6个字节(‘000168’),欧了!ADD_DI,DI_STRING,BLKMOV三步搞定。

其他问题:浮点转换字符串的时候,出来的是指数形式,这个比较晕,莫非是我指令用错了?没办法只有先乘100然后取整,转成DI,再用DI_string。这点请各位前辈指点。
还有,给大家讲个犯的一个低级错误。因为给字符串分配了固定大小的DB区,而字符串长短不同,有的DBB最后是00H,输出时要换成空格20H输出。所以,要对整个DB数据块进行字节00H筛选,这就用到了指针和循环,STL写完后调试时一直报错,看门狗叫。不用说,肯定是循环出了问题,但是检查来检查去也没找到,最后苦读书,发现是LOOP的问题,LOOP后没有把累加器里减一后的数值T给循环次数,想当然地以为是把循环次数自己减一然后判断了。这个大家权当笑话听吧,(最后感慨一下)练好基本功是何等的重要啊!
我很低调,不随便给人签名。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。