首页 上一页 1 2 下一页 尾页

求PLC高手给这个运算一个科学合理的解释 点击:415 | 回复:24



青岛黄工

    
  • [版主]
  • 精华:3帖
  • 求助:54帖
  • 帖子:108帖 | 4776回
  • 年度积分:0
  • 历史总积分:24297
  • 注册:2007年4月02日
发表于:2012-01-31 15:43:33
楼主
求助帖5分-已结帖

如题,碰到一个有趣的问题,今天贴出来,期望高手们多多来讨论一下,给个科学合理的解释

如下图,我要做双字乘法,用了如下数据寄存器。

闭合R10,DT200中为什么写不进去数

 

 

如下图,闭合R11,又可以写进去了,

 

 

谁能从计算机原理角度给个科学合理的解释阿。



楼主最近还看过



宝马760LI

  • 精华:2帖
  • 求助:11帖
  • 帖子:186帖 | 4421回
  • 年度积分:0
  • 历史总积分:25033
  • 注册:2005年11月18日
发表于:2012-01-31 16:19:22
1楼

你发群主里的软件如水。李总,他是这方面专家。让他看看,他是很少来论坛。

steelen

  • 精华:1帖
  • 求助:2帖
  • 帖子:190帖 | 1497回
  • 年度积分:0
  • 历史总积分:5172
  • 注册:2002年3月15日
发表于:2012-01-31 16:22:17
2楼

唉,定义2个变量

DW u,V,R

r=U*V不就得了

干嘛非要抱着类似汇编的语言

 

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-01-31 16:45:57
3楼
回复内容:
对:steelen关于唉,定义2个变量DW u,V,Rr=U*V不就得了干嘛非要抱着类似汇编的语言 内容的回复:


如果寄存器使用范围不出来好,发生溢出,什么高级语言也没救哦

welfare87

  • 精华:1帖
  • 求助:4帖
  • 帖子:53帖 | 2827回
  • 年度积分:0
  • 历史总积分:25853
  • 注册:2009年2月20日
发表于:2012-01-31 19:44:06
4楼
把上升沿去掉试试,或把R10换个X0,由外部输入试试

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-01-31 20:54:41
5楼
回复内容:
对:welfare87关于把上升沿去掉试试,或把R10换个X0,由外部输入试试 内容的回复:


把R10换X0,有什么区别吗?还多了个CPU读取输入端子映射区的操作,觉得不行。

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:27帖 | 3065回
  • 年度积分:0
  • 历史总积分:12427
  • 注册:2008年9月18日
发表于:2012-02-01 08:52:03
6楼
引用 青岛黄工 的回复内容:回复内容:对:welfare87关于把上升沿去掉试试,或把R10换个X0,由外部输入试试 内容的回复:把R10换X0,有什么区别吗?还多了个CPU读取输入端子映射区的操作,觉得不行。



你用的仕么PLC  啊, 不如查查  编程手册................

sunnycit

  • 精华:0帖
  • 求助:4帖
  • 帖子:5帖 | 72回
  • 年度积分:0
  • 历史总积分:240
  • 注册:2009年11月22日
发表于:2012-02-01 10:47:57
7楼
回复内容:
对:welfare87关于把上升沿去掉试试,或把R10换个X0,由外部输入试试 内容的回复:


你看懂没?

sunnycit

  • 精华:0帖
  • 求助:4帖
  • 帖子:5帖 | 72回
  • 年度积分:0
  • 历史总积分:240
  • 注册:2009年11月22日
发表于:2012-02-01 10:49:16
8楼
本来一行程序变两行会出错

芳季

  • [版主]
  • 精华:5帖
  • 求助:7帖
  • 帖子:105帖 | 5336回
  • 年度积分:0
  • 历史总积分:20165
  • 注册:2003年1月31日
发表于:2012-02-01 13:19:35
9楼

DT198使用了198 199 200 201四个地址。所以头一个边缘指令写不进去,写进去了右马上被改回。

而后一个是一直连续写的,所以可以覆盖前面的乘法的结果。

以上仅以三菱FX的思路推测。

如有不对,当做灌水。

通讯网

  • 精华:11帖
  • 求助:2帖
  • 帖子:464帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-02-01 14:10:37
10楼
引用 芳季 的回复内容:DT198使用了198 199 200 201四个地址。所以头一个边缘指令写不进去,写进去了右马上被改回。而后一个是一直连续写的,所以可以覆盖前面的乘法的结果。以上仅以三菱FX的思路推测。如有不对,当做灌水。



回答正确。谁家的都一样。。呵呵。。

通讯网

  • 精华:11帖
  • 求助:2帖
  • 帖子:464帖 | 10265回
  • 年度积分:0
  • 历史总积分:24711
  • 注册:2004年7月09日
发表于:2012-02-01 14:11:33
11楼
要是把R1也DF了,结果还是一样。

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-02-01 20:38:22
12楼
回复内容:
对:miy_gongkong关于引用 青岛黄工 的回复内容:回复内容:对:welfare87关于把上升沿去掉试试,或把R10换个X0,由外部输入试试 内容的回复:把R10换X0,有什么区别吗?还多了个CPU读取输入端子映射区的操作,觉得不行。 你用的仕么PLC  啊, 不如查查  编程手册................ 内容的回复:


用的PLC就是我自认为还比较熟悉的,松下的,,就是想在这儿讨论一下,这现象的根本原理。

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-02-01 20:43:05
13楼
回复内容:
对:芳季关于DT198使用了198 199 200 201四个地址。所以头一个边缘指令写不进去,写进去了右马上被改回。而后一个是一直连续写的,所以可以覆盖前面的乘法的结果。以上仅以三菱FX的思路推测。如有不对,当做灌水。内容的回复:

不错的,是这样的,这个算法现象,应该是计算机原理决定的,在这儿给看到的朋友提个醒,编程的时候,别踩雷

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-02-01 20:44:37
14楼
希望高手能给个基本的原理性的解释,让我们知道雷区的真实面目。

chenshiji2006

  • [版主]
  • 精华:25帖
  • 求助:20帖
  • 帖子:532帖 | 7001回
  • 年度积分:16
  • 历史总积分:66978
  • 注册:2010年6月26日
发表于:2012-02-01 22:22:30
15楼
确实是芳记所说的那样踩雷了。。。关于松下PLC要是只做四则运算的话我还是觉得用松下新版本的软件可以做个功能块,调用功能块。。。黄工要是要新版本的软件的话可以站短我。。。我也是上次去松下那培训的时候他们工程师那拷贝来的。。。

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-02-02 09:01:04
16楼
回复内容:
对:chenshiji2006关于确实是芳记所说的那样踩雷了。。。关于松下PLC要是只做四则运算的话我还是觉得用松下新版本的软件可以做个功能块,调用功能块。。。黄工要是要新版本的软件的话可以站短我。。。我也是上次去松下那培训的时候他们工程师那拷贝来的。。。 内容的回复:


呵呵,先谢谢了,短信已发,更希望能共享出来

wrilk

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 56回
  • 年度积分:0
  • 历史总积分:524
  • 注册:2006年6月18日
发表于:2012-02-02 18:34:00
17楼

r10上升沿将30写入双字dt200后,(r11为off未执行相应指令)代码段执行完成,

下次扫描时候寄存器双字dt200中的数据为30,此时代码双字乘执行的结果为1200存放于四字dt198,

拆开即双字dt198中数据为1200,双字dt200中数据又变成了0。

所以上升操作的结果貌似没变化。

而r11被置on时则不管扫描到它之前双字dt200中的数据是多少,

反正扫描到此处时30被写入了双字dt200,代码段扫描完毕,

下次运算到双字乘的结果其实还是将0写入了双字dt200,只是r11仍然将30重新写了回去。

 

wrilk

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 56回
  • 年度积分:0
  • 历史总积分:524
  • 注册:2006年6月18日
发表于:2012-02-02 18:38:55
18楼
用pro时变量地址系统自动分配确实就不会出现类似的问题。

大话东游

  • 精华:2帖
  • 求助:6帖
  • 帖子:46帖 | 1815回
  • 年度积分:0
  • 历史总积分:8255
  • 注册:2008年12月19日
发表于:2012-02-02 19:46:23
19楼
循环扫描的原因,因为最后两个程序是和双线圈的原理差不多,在R10接通时,DT200中是有数值的,但是到了下一步,R11没有闭合,DT200中的数值没有传送进去,DT200为0,所以结果DT200中的值写不进去,当R11闭合时,把数值写进了DT200,就可以运算了,DT198/DT200/DT202,我觉得这三个数并没有冲突,因为计算的数值没有大于一个字的值,如果大于65535(无符号),可能就不一样了,没有试过。不知道我分析的对不对啊?

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-02-02 22:25:32
20楼
谢谢各位的讨论,改天准备做个检测程序,将这个计算过程中,这几个寄存器中数值的变化,保存下来,放上来咱们再分析分析。

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页