看不懂的程序
刘玉蓉
发布于2014-10-15 17:05
77
0
标签:
LAR1 P#0.0
L #IN2
ITD
SLD 3
LAR2
OPN #IN0
CDB
L #IN1
M002: T #TEMP5
L DIW [AR1,P#0.0]
OPN "AM95_ALARMS_DB" DB211
T DBW [AR1,P#0.0]
OPN "HMI_ALARMS_DB" DB210
A DIX [AR2,P#0.0]
JC M003
L 0
M003: T DBW [AR1,P#0.0]
L 0
T DIW [AR1,P#0.0]
+AR1 P#2.0
+AR2 P#0.1
L #TEMP5
这段程序中,HMI的报警变量比如:DB210.DBX900.0,但我在程序里面找不到这个线圈,也没有W和D的变量,DB210是不是被分配到这段程序中了?请指点一下。
佳答案
这段程序注释如下:
LAR1 P#0.0 //将地址指针常数P#0.0直接装载到地址寄存器AR1中,即AR1=P#0.0
L #IN2 //将暂态变量#IN2的内容装载到累加器1中
ITD //将#IN2的内容中单字(16位)转换为双字整数(32位)
SLD 3 //将上述转换的无符号的双字型整数左移3位,左移后空出的位补0
LAR2 //将上述左移结果(累加器1中内容)写入地址寄存器AR2中
OPN #IN0 //打开以符号名为IN0的背景数据块
CDB //交换共享数据块和背景数据块的内容
L #IN1 //将暂态变量IN1的内容装入累加器1
M002: T #TEMP5 //把IN1中内容传送到暂态变量#TEMP5中
L DIW [AR1,P#0.0] //相当于DIW0(AR1=P#0.0,加上偏移量P#0.0)中内容装载到累加器1
OPN "AM95_ALARMS_DB" DB211//打开以符号名为"AM95_ALARMS_DB"数据块,即DB211
T DBW [AR1,P#0.0] //将DIW0 中内容传送到DBW0中,即将共享数据块DB211中字DIW0的内容传送到共享数据块DB210的字DBW0中
OPN "HMI_ALARMS_DB" DB210 //打开以符号名为"HMI_ALARMS_DB"的背景数据块,即DB210
A DIX [AR2,P#0.0] //将地址寄存器AR2中内容(暂态变量转换为双字整数后左移3位后的结果)加上偏移量P#0.0作为背景数据块DB210的数据字节位
JC M003 //如果逻辑操作结果为1则跳转到M003处
L 0 //将数字2#0000_0000_0000_0000装入累加器1
M003: T DBW [AR1,P#0.0]//将累加器1中内容0传送给共享数据块DB211的数据字DBW0
L 0 //将0装入累加器1
T DIW [AR1,P#0.0]//将累加器1中内容传给DIW0
+AR1 P#2.0 //将偏移量2.0加到地址寄存器AR1中
+AR2 P#0.1//将偏移量0.1加到地址寄存器AR2中
L #TEMP5//将暂态变量TEMP5内容装载到累加器1中
从以上注释可以看出,DB210 是背景数据块,其符号名为HMI_ALARMS_DB",由于暂态变量#IN2从这段程序无法找到具体的值,所以无法确认DIX [AR2,P#0.0]中地址寄存器AR2的具体值,它是一个背景数据块的某个数据字节的位。在这段程序中找不到DB210.DBX900.0,除非提供具体的暂态变量IN2的值。DB210被分配到这段程序中,但看不出对应的W和D的变量。