技术论坛

 回复:pointer指针读取db块中的字符,并输出。请问这个程序有什么问题,一直没有输出

返回主题列表
作者 主题
loveheyunbo
游士

经验值:274
发帖数:62
精华帖:0
楼主    2015-03-04 17:06:41
主题:pointer指针读取db块中的字符,并输出。请问这个程序有什么问题,一直没有输出
*************************************************
程序目的:
根据StationNo找到DB5中它对应的字符串,前提:DB5中已经建立string[62],然后找到该字符串的第8位,把他输出到MZ中。但是,一直没有想要的输出
*************************************************
1定义变量:输入:StationNo 类型 INT;apointer 类型pointer指针
输出:MZ 类型 word
TEMP:DB_NO 类型 INT;address 类型 INT;
2.程序和注释
*******************************************************************************
//--装载地址到地址寄存器中-----
L P##apointer
LAR1
//---读取DB块号码---------------------------------------
L W [AR1,P#0.0]
T #DB_NO //读取DB

//-----根据工位号#StationNo计算对应toolname的地址---
//-----数据规律:dbb8,dbb136,dbb264,dbb392...公式(#StationNo-1)*128+8
L #StationNo
L 1
-I
L 128
*I
L 8
+I
T #address
//----打开数据,将对应数据放入到MW08和#MZ中去
OPN DB [#DB_NO]
L DBB [#address]
T MW 508
T #MZ
*********************************************************
开始模拟,为了简便,将StationNo设置成1,但是结果一直没有输出!
大家帮我检查检查。
*********************************************************






老学童
奇侠

经验值:8218
发帖数:765
精华帖:32
7楼    2015-03-05 22:52:15
精华帖  主题:回复:pointer指针读取db块中的字符,并输出。请问这个程序有什么问题,一直没有输出
我猜楼主是对现有的程序不太理解,所有想通过自己建立一个数据块,来仿真一下!
1. 可是从楼主发的图片上看,仅仅建立了一个含有62个字符的串,怎么能仿真出“dbb8,dbb136,dbb264,dbb392...”
2. 这段程序的含义应该是这样的:
1) 每个站(Station)用62个字符来表示其所含Tool Name,而这个数据块(DB5)应该包含多个站(Station)的数据段(均用62个字符来表示其所含Tool Name),通过输入参数#StationNo计算每个数据段的首地址。
2)楼主发的图片很容易让人误认为你要仿真数据是从地址0(P#0.0)开始,其实,原先的DB前面有8个字节的其它数据,那么既然楼主要仿真,就必须在第一个字符串开始前面插入8个空字节(或4个INT或4个WORD或2个DWORD),这也是为什么我在1楼改动后的程序中没有加上这8个字节的原因(可不是老学童老眼昏花了,呵呵,开车连路牌都看不清还说不花),将原先程序中‘+8’改成‘x 8’(相当于LJCLWYF坛友在2楼‘SLD 3’)
3) 既然要仿真,就必须符合实际情况,即建立多个数据段,否则,充其量只能仿真#StationNo=1。
4) 缺少对#apointer指针的进一步计算,#apointer应该是用于进一步决定读取哪个或那些字符,这个部分数据在#apointer的第2~5字节中(0字节和1字节是#DB_NO,在这里是没有什么意义,这也是为什么rx9934坛友为什么会提出质疑的原因吧)。

...
L W [AR1,P#0.0]
T #DB_NO //读取DB
之后应该是:
L D[AR1,P#2.0]
T #address //字符串中的偏移量,
正如楼上重新激活坛友所说#address的数据类型不对,应该是DW类型

对于楼主的专研精神要给个赞!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。