FC( IN: IDB_IN WORD
AI_1 REAL
AI_2 REAL
AI_3 REAL
TEMP: DB_POINTER DWORD
)
{
L #db_in
T MW 152
OPN DB [MW 152]
//打开DB块,DB块中共存储30个浮点数,分10组,每组3;
//顺序存储,如:A1、B1、C1、A2、B2、C2。。。,我需要
//每次循环写三个数值到A、B、C中
L P#DBX 0.0
LAR1
//建立指针,指向DB块的0.0;
L MW 160
L 12
*D
SLD 3
+AR1
//MW160是一个记数循环点,从0~10循环变化;
//循环记数点*12,再移位成指针型数,再加上初始指针;
(我的理解是3个实数为一组,这样每组间隔是12个字节)
L #AI_1
T DBD [AR1,P#0.0]
L #AI_2
T DBD [AR1,P#4.0]
L #AI_3
T DBD [AR1,P#8.0]
//每次MW160循环后,依次把AI_1,2,3送至每组中
//三个浮点数中去, P#4.0我的理解是第二个
//浮点数B与第一个A相差4个字节,所以指针加4;
INC MW160 //循环记数加1;
A(
L MW 160 //判断是否超过10组;
L 10
>=I
)
JNB END
L 0
T MW 160
END: NOP 0
}
//跳转,没有直接在FC里做循环,因为一直做不成
//功,在模拟运行中一直看不到MW160的变化,
//所以就用FC本身的循环运行来做记数循环
//以上程序运行下来,CPU一直出现DB块WRITE的地址超出范围错误,
Event 1 of 100: Event ID 16# 2523
Area length error when writing
Global DB, double-word access, Access address: 77
请问!!!问题出在哪里,
还有那个循环的问题,FC内建循环,是不是在MONITOR状态看不到记数值的变化???