发表于:2011/4/6 11:48:37
#0楼
上一篇日志的程序只能循环移位1位。在此基础上使用循环指令(LOOP),可以连续循环移位多位。
FC的输入数据IN(DWord)是要移位的双字,Bit_No(Int)是移位位数。输出数据OUT(DWord)是移位的结果。本文以输入IN的低20位数据连续循环移位1~20位为例。Tmp1和Tmp2分别用来暂存移位后的数据和移位次数剩余值。L1.4是Tmp1(LD0)的第20位。
将L1.4改为LD0的其他位,可以改变要移位数据的位数。例如改为L2.4时,被移位数据的位数为12位。
L #IN
T #Tmp1 //保存被移位的双字
L #Bit_No
BACK: T #Tmp2 //保存移位次数剩余值
L 1
L #Tmp1
RLD //循环移位1位
T #Tmp1
A L 1.4
S L 3.0 // Tmp1的第20位为1则将最低位置位
AN L 1.4
R L 3.0 // Tmp1第20位为0则将最低位复位
CLR
= L 1.4 //将Tmp1第20位清零
L #Tmp2 //取移位次数剩余值
LOOP BACK //减1后非零则返回
L #Tmp1
T #OUT //输出循环移位的结果
CALL FC 1
IN :=MD10
Bit_No:=MW14
OUT :=MD16
用十六进制格式监控MD10和MD16,移位次数MW14的值最好是4的整倍数,监控比较方便。
我是廖常初,是一个高校的老师,曾在企业从事机械、电气技术工作,长期从事工业控制和PLC应用的教学、科研和工程应用工作。博客中的日志除注明外均为原创。愿意在此与大家探讨工控的问题!
廖常初工控博客地址:http://blog.gkong.com/blog.asp?name=liaochangchu
我曾写过几本小书: 《PLC编程及应用》第3版(S7-200)、《S7-300/400 PLC应用技术》第3版、《FX系列PLC编程及应用》第2版、《S7-200 PLC编程及应用》、《PLC基础及应用》第2版(FX系列大专教材)、《西门子人机界面(触摸屏)组态与应用技术》、《西门子工业通信网络组态编程与故障诊断》、《S7-1200 PLC编程及应用》第2版、《跟我动手学S7-300/400 PLC》、《跟我动手学FX系列PLC》
机械工业出版社廖常初图书专题:http://www.gkong.com/zt/liaochangchu/
廖常初工控博客地址:http://blog.gkong.com/blog.asp?name=liaochangchu
我曾写过几本小书: 《PLC编程及应用》第3版(S7-200)、《S7-300/400 PLC应用技术》第3版、《FX系列PLC编程及应用》第2版、《S7-200 PLC编程及应用》、《PLC基础及应用》第2版(FX系列大专教材)、《西门子人机界面(触摸屏)组态与应用技术》、《西门子工业通信网络组态编程与故障诊断》、《S7-1200 PLC编程及应用》第2版、《跟我动手学S7-300/400 PLC》、《跟我动手学FX系列PLC》
机械工业出版社廖常初图书专题:http://www.gkong.com/zt/liaochangchu/