这是一段选自2000年版s7-200可编程控制器系统手册的一段例程,例程为模拟量处理:
SBR 1
LDB= SMB8, 16#19
NOT
S Q1.0, 1
LDB= SMB9, 16#00
NOT
AB= SMB9, 16#04
S Q1.1 1
RET
以上子程序按书中所说,为检查模拟量处理扩展模块是否存在及电源是否存在故障,问题如下:
1. 在特殊寄存器中,表示模块是否存在是它的第8位,即smb8的m位,0表示存在,1表示不存在,那么比较指令应该是判断m位是否等于0,可为什么是16进制数的19那。同样,smb9判断的是第1位和第2位即t位和f位,是否为0或1,可为什么是16进制数的00和04。
2. 在这段程序里不应该有RET指令,因为这个指令都是有条件返回指令,可这段程序是无条件返回,程序会自动执行的。而且如果把这段程序用软件写下来,在编译时这条语句会发生错误。
3. smb9判断的第1位和第2位即t位和f位,出现错误时都是1,可第1位加了取反指令,第2位也应该加呀,为什么未加,另外,两种错误信号,应该是或的关系呀?
因为是西门子的官方手册,请各位朋友帮忙判断一下,是我错了,还是手册错啦!这段程序可以拿过来直接用吗?
最佳答案
1. 可为什么是16进制数的19?
SMB8为模块ID寄存器,各位意义详见系统说明书。19表示模板为模拟量,且为4AI,2AQ.
16进制数的19,即0001 1001(m t t a i i q q):
a=1为模拟量;
ii=10为4AI;
qq=01为2AQ
SMB9, 16#00,SMB9, 16#04为何意?
SMB9为模块错误寄存器:
判断第0位:端子块松动;
判断第2位:无用户电源错误;
2. 在这段程序里不应该有RET指令?
可根据实际应用进行修改。
3. smb9判断的第1位和第2位即t位和f位,出现错误时都是1,可第1位加了取反指令,第2位也应该加呀,为什么未加,另外,两种错误信号,应该是或的关系呀?
SMB9, 16#00,SMB9, 16#04:是判断第0位与第2位。在实际应用中可根据SMB9的约定进行编程。
请不要死钻这段例程,这段例程也是截取的。只要理解SMB8与SMB9的用法就可自己编程,做个试验,什么都有了。
最新系统手册:
<S7-200 可编程控制器系统手册>下载:
http://www2.ad.siemens.com.cn/download/Upload/AS/manual/1017[2].pdf
提问者对于答案的评价:
谢谢大家,阿鸣的答案很详细,启发很大。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc313766.html