简单的编程,谁能试试? 点击:0 | 回复:120



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2004-02-10 16:13:00
楼主
河内塔游戏的编程算法, 手机上的河内塔游戏,一般人都很熟悉,现在把它用PLC语言,实现出来,不知有人会否, 就是,假设有N个圆片在A柱上,从小到大,分别为,1,2,。。。N,三个塔柱分别为A,B ,C,现要从A移动到C,以为B过度,也是从小到大排列,移动的过程,只能小圆片放在大圆片上,不能反。计算结果放在连续地址列,指针数就是移动的次数,三个塔之间的移动的方式一共六种,A—B,A—C,B—C,B—A,C—A,C—B,在地址中只要以代码的形式例如 1,2,3,4,5,6,就行, 计算的结果在连续地址中,地址存的六种移动方式的次序,最终能完全实现由A到B的移动。 地址的长度为:2的N次方-1,也就是需要移动的次数, 哪位高人能试试,不一定要用代码,把算法详细讲解也可以。 .........



gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2003-12-22 19:22:00
1楼
难道真的工控网上没有高手了么 真的没有人会么? 还是高手在默默的等待啊,

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2003-12-22 19:24:00
2楼
如果真的没有人会, 那我真的是很遗憾了,

踢球者7

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 14回
  • 年度积分:0
  • 历史总积分:34
  • 注册:2003年12月26日
发表于:2003-12-22 20:33:00
3楼
我菜故我不能

rickyxu

  • 精华:1帖
  • 求助:0帖
  • 帖子:2帖 | 50回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年12月01日
发表于:2003-12-23 13:36:00
4楼
出自http://www.zjedu.org/xdjyjs/90/346.htm 例2 河内塔问题。   这是一个古老传说中的问题:有3个高塔与64个直径互不相同的环,开始时这些环按尺寸大小依次堆在一个塔上,最大的在最下面。由一些僧侣把初始塔上的环移到另外一个塔上,每天只能移动一个,且移好后必须仍旧使大的在下面,按序堆放,其间可利用第三个塔暂时存放环。传说预言僧侣们完成任务之时,就是世界的末日。我们不知道僧侣们何时开始他们的工作,但可以考虑建立数学模型,借用计算机算出所要用的时间。算法思想是:若僧侣们能把上面的63个环从初始塔依次移到临时塔上,则就可将最大的环移到结束塔上,并依次把其它63个环从临时塔移到结束塔。   采用Pascal语言编程简略如下:   Procedure Tower(n: nonneight; start, finish, other: towernames);   IF n>0 then begin   Tower (n-1, start, other, finish);   Writeln (“ move top ring from”, start, “to”, finish);   Tower (n-1, other, finish, start)   end;    上述程序中writeln是一个差分方程,其中W(o)=0是初始条件,W(n)=2n-1是这个差分方程的解。可得河内塔问题的解是W(64)=264-1,大约是1.84×1019天,即约5.05×1014世纪。真是太长的时间了,难怪有“世界末日”的预言。

不懂不想装懂

  • 精华:2帖
  • 求助:0帖
  • 帖子:67帖 | 87回
  • 年度积分:0
  • 历史总积分:230
  • 注册:2003年11月07日
发表于:2003-12-23 14:11:00
5楼
不是不会,只是你要告诉我们用什么机械工具,用手还需要PLC干嘛?

rickyxu

  • 精华:1帖
  • 求助:0帖
  • 帖子:2帖 | 50回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年12月01日
发表于:2003-12-23 14:24:00
6楼
真考脑子.好在有GOOGLE.

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2003-12-23 19:55:00
7楼
to rickyxu: 呵呵,你的算法是对的, 但是,你用的Pascal编的话,但对于软件而言象VB,VC,都是最简单不过的递归算法,应该都会,但是我需要的是形象的PLC语言,它是两种概念,甚至再形象的来讲就是能用PLC把它的实际移动能给控制起来,假设有六个机械手在搬,分别负责6种移动次序,也就是你控制六个DO点的顺序, 呵呵,谁再想想,试试? 。。。。。。。。

aaa22222222

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 6回
  • 年度积分:0
  • 历史总积分:15
  • 注册:2003年11月12日
发表于:2003-12-23 20:10:00
8楼
机械手的原理请告诉我,我没见过,或许我能试 试

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2003-12-23 20:25:00
9楼
六个机械手, 六个DO驱动, 分别代表六种移动方式: 1、A-B 2、A-C 3、B-C 4、B-A 5、C-A 6、C-B 每次只移动一个,试试看?

回家

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 28回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2003年7月05日
发表于:2003-12-23 21:00:00
10楼
有意思。不知道有没时间限制。 我刚学plc基本编程,很想试试。 明天我还来看看。 如果不急,我的mail:yxw139@sohu.com 争取考试前交卷行不行?

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2003-12-23 21:21:00
11楼
呵呵, 时间没有限制, 只要你肯钻研就行, 。。。。。。。。。。。

rickyxu

  • 精华:1帖
  • 求助:0帖
  • 帖子:2帖 | 50回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年12月01日
发表于:2003-12-23 22:35:00
12楼
SCL

Zane

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 44回
  • 年度积分:0
  • 历史总积分:107
  • 注册:2001年12月28日
发表于:2003-12-24 11:27:00
13楼
这在古代也许还有些工程意义,到了现在也只是练练脑子而已。 EASY。

回家

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 28回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2003年7月05日
发表于:2003-12-24 13:40:00
14楼
能不能麻烦小楼先生在讲详细点。 我今天没找到“河内塔游戏”。 不好意思,没玩过不清楚他的游戏规则。 按说三个拄,没理由用六个机械臂。正反转,三角形排法,三台电机 加上相应的传感器就可以满足。不知道这样理解对不对? 当然要求六个就按六个来考虑好了。只是希望知道为什么。 谢谢。

不懂不想装懂

  • 精华:2帖
  • 求助:0帖
  • 帖子:67帖 | 87回
  • 年度积分:0
  • 历史总积分:230
  • 注册:2003年11月07日
发表于:2003-12-24 16:20:00
15楼
小楼兄: 今天中午上来看了这个东东,下午想了一会,谈点个人感想,不知道是不是愚人之见。 光靠PLC没有办法实现你说的那些动作,如果N确定,那么只要知道移动方法,就可以直接编写,顶多比较耗费步数罢了(这里还有一个PLC能够容纳的步数问题,因此小型PLC不可能容纳N数值太大的程序)。但是当N不确定的时候,首先你必须考虑通用性,N为何值时都能适应。其实这个东东的原理无非是三个步骤 一。先将N-1到1的那堆东西由A移动到B 二。将N移动到C, 三然后就是重复一,只不过由B移动到C。 这里让人头疼的就是这个步骤一如何得出,N数值小还可以通过排序的方法得出结论,对于没有玩过这玩意的人来说,要搞懂它的原理就比较难了 现在我大致的思路有了,只是这里是不是只能通过PLC编程,真正模拟试验的时候是不是还能加点元气件,有特殊功能的那种。 不知道我说的你是否能看懂,谢谢

回家

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 28回
  • 年度积分:0
  • 历史总积分:85
  • 注册:2003年7月05日
发表于:2003-12-24 18:20:00
16楼
楼上兄说的在理。 不过我倒认为这是个挑战。 我准备先用三拄九环试试自己的所学。只是不知道怎么才能试试。 不少说可以下载的虚拟软件,我这菜鸟一个都下不下来。 不管他,编完再说

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2003-12-24 18:38:00
17楼
TO 回家: 具体的实现方法,几个电机,正反转,那都是小事情,重要的是算法,你怎么把逻辑实现出来, TO ZANE: 算法是程序的灵魂,你觉得是练脑子,我觉得是代表一个人的思维能力,思维方式,在西门子论坛上,看的出来你也是高人,但是我现在提的这个问题,就是针对思维,你觉得是简单,简单表述一下,怎么样? TO 不懂不想装懂: 呵呵,你说的很对,如果知道N的数值,你直接输入PLC里,但那是流水帐式的输出,你把主要的工作交给你自己来实现了,或者说,你自己经过复杂的思维,具体该动做哪一步,是你直接告诉PLC,那这道题目就没有意思了,我这道题目就是把你的思维,加到PLC上,转变成它能动作的方式,你的基本思路是正确的,这里不用考虑N多大的问题,重要的是算法。

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2003-12-24 18:49:00
18楼
TO 不懂不想装懂: 你如果会点VB,VC之类的话就可以把这个算法很简单的编出来,果,然后用PLC输出来模拟实验,与VB仿真出来的结果比较一下,你可以把PLC执行这个算法的动作时间加长,比如说每几秒输出一次,就能看出对不对了。

rickyxu

  • 精华:1帖
  • 求助:0帖
  • 帖子:2帖 | 50回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年12月01日
发表于:2003-12-24 19:17:00
19楼
SCL is the Pascal, VB, C++ for PLC programming.

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14399帖 | 54471回
  • 年度积分:0
  • 历史总积分:579
  • 注册:2008年9月08日
发表于:2003-12-24 19:45:00
20楼
to rickyxu 真不好意思,我不明白,什么叫SCL,有点愚昧,还请见谅,呵呵,

相关主题

官方公众号

智造工程师
首页 上一页 1 2 3 4 5 6 下一页 尾页