用循环语句编写移位程序用于次品剔除

已锁定

看雪001

  • 帖子

    2436
  • 精华

    88
  • 被关注

    236

论坛等级:至圣

注册时间:2012-04-25

钻石 钻石 如何晋级?

用循环语句编写移位程序用于次品剔除

1978

2

2013-03-21 11:09:46

假设需要 M0.6->M0.7;
M0.5->M0.6;
M0.4->M0.5;
M0.3->M0.4;
……
M1.0->M1.1;

可能马上就想到移位指令“SHL_W”。但假如实际需要32位以上的移位,又如何实现?
按照上面愚公移山的思路,“……而山不加增,何苦而不平?”,莫说是32位,即使100位、1000位也总是这样移动的,我想机器实际上应该也是按愚公移山法来执行操作的吧。
然而,人不同于机器的地方,在于人具有抽象思维,善于用抽象语言来描述机器语言。
人们把上面那段有规律的思路描述为“循环”。
下面是用循环逻辑对一个80位数据进行移位:
FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1


VAR_TEMP
TEMP0 : DWORD ;
TEMP1 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =

OPN DB 3; //打开数据块
L L#80; //最大剔除距离(不要超过数据块长度 位)
M001: T #TEMP1; //最后一位
L L#1;
-D ;
T #TEMP0; //倒数第二位
A DBX [#TEMP0]; //将倒数第二位的数据(状态)移动到倒数第一位
= DBX [#TEMP1];
L #TEMP1;
LOOP M001; //将倒数第三位的数据(状态)移动到倒数第二位
A "N*品"; //……直至将第一位的数据(状态)移动数第二位
= DBX 0.0; //将“NG”信号移动第一位
END_FUNCTION

不论是80位,或是1000位的移动,只需要将“L#80”换成你需要移动的长度,剩下的语句都不变。
从这个例子来看,机器需要执行千万遍的指令,人只需要简单数行即可描述。
用循环语句编写移位程序用于次品剔除 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54711条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。