SIEMENS S7-200 100个VD数字相加 点击:4933 | 回复:18



枫子子

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:249
  • 注册:2003年2月11日
发表于:2005-07-07 14:09:00
楼主
SIEMENS S7-200 100个VD数字相加。求救



蒋祝乾

  • 精华:0帖
  • 求助:0帖
  • 帖子:47帖 | 480回
  • 年度积分:0
  • 历史总积分:1129
  • 注册:2003年5月20日
发表于:2005-07-07 14:58:00
1楼
使用FOR NEXT 命令!

枫子子

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:249
  • 注册:2003年2月11日
发表于:2005-07-07 17:03:00
2楼
我要做的是VD0+VD4+VD8+VD12+......+VD396,如果直接最简单的办法相加当然可以,但是很占空间。好像用FOR NEXT 命令做也比较困难的,用用指针来做,但是PLC这样的东西写起来不够灵活,很难搞啊。各位朋友有没有好的办法啊?考虑成本我用的CPU221只有4K的程序空间,谢谢了

chp351577

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 156回
  • 年度积分:0
  • 历史总积分:441
  • 注册:2003年10月11日
发表于:2005-07-07 21:22:00
3楼
用指针来做,写起来非常灵活,做一个子程序.用循环语句也行,循环中间加一个看门狗复位指令即可

microtomato

  • 精华:1帖
  • 求助:0帖
  • 帖子:84帖 | 1476回
  • 年度积分:0
  • 历史总积分:2078
  • 注册:2001年11月02日
发表于:2005-07-07 22:31:00
4楼
给个源代码: 首先定义几个局部变量: 符号 变量类型 数据类型 -------------------------- ResOut OUT DWORD Index TEMP WORD AC1_BAK TEMP DWORD AddRes TEMP DWORD 网络 1 LD Always_On MOVD AC1, #AC1_BAK MOVD &VB0, AC1 MOVD VD0, #AddRes 网络 2 LD Always_On FOR #Index, +1, +100 网络 3 LD Always_On +D +4, AC1 +D *AC1, #AddRes 网络 4 NEXT 网络 5 LD Always_On MOVD #AC1_BAK, AC1 MOVD #AddRes, #ResOut 没有机器,无法测试。如果你正好有机器,可以测试1下

枫子子

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:249
  • 注册:2003年2月11日
发表于:2005-07-11 11:25:00
5楼
刚看到消息,晚上回去试一试效果,谢谢先了

卡可

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 25回
  • 年度积分:0
  • 历史总积分:64
  • 注册:2004年3月12日
发表于:2005-07-11 12:49:00
6楼
microtomato: 仗义啊

李承亮

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 88回
  • 年度积分:0
  • 历史总积分:143
  • 注册:2002年8月09日
发表于:2005-07-11 16:48:00
7楼
Network1 LD SM0.0 MOVD VD0, VD400 MOVD &VB0, LD10 MOVW +1, MW0 Network2 LBL 1 Network3 LD SM0.0 +D +4, LD10 +D *LD10, VD400 +I +1, MW0 AW<= MW0, +100 JMP 1 也没试过,VD400是结果,MW0是记数的

李承亮

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 88回
  • 年度积分:0
  • 历史总积分:143
  • 注册:2002年8月09日
发表于:2005-07-11 16:56:00
8楼
就是指针最简单的用法,如果能保证不超范围就行,如果不能保证是否超出范围就得加入判断溢出位麻烦些....Good Luck!!!

鸡蛋饼...

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 315回
  • 年度积分:0
  • 历史总积分:414
  • 注册:2003年8月26日
发表于:2005-07-14 16:16:00
9楼
程序经过PLC运行测试过。 主程序: NETWORK 1 LD SM0.0 CALL SBR_0:SBR0, &VB0, 100, #t_1:LD0 /////其中100为100个数,#t_1:LD0 为存储返回值 子程序:SBR0 add symbol type data type ------------------------------------------------------ LD0 in_1 in dword //存储&vb0 lw4 in_2 in word //存个数, 如 100 ld6 out_1 out dword //返回值 ld10 temp_1 temp dword lw14 temp_2 temp word ---------------------------------------------------------------- NETWORK1 LD SM0.0 MOVD 0, #temp_1:LD10 FOR #temp_2:LW14, 1, #in_2:LW4 NETWORK2 LD SM0.0 +D *#in_1:*LD0, #temp_1:LD10 +D 4, #in_1:LD0 NETWORK3 NEXT NETWORK4 LD SM0.0 MOVD #temp_1:LD10, #out_1:LD6

枫子子

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:249
  • 注册:2003年2月11日
发表于:2005-07-18 11:39:00
10楼
TO:鸡蛋饼 你好,对下面的不理解,编程时提示错误   主程序:   NETWORK 1      LD SM0.0   CALL SBR_0:SBR0, &VB0, 100, #t_1:LD0 /////其中100为100个数,#t_1:LD0 为存储返回值

鸡蛋饼...

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 315回
  • 年度积分:0
  • 历史总积分:414
  • 注册:2003年8月26日
发表于:2005-07-18 14:10:00
11楼
一般不会错的,,我是在PLC测试运行过的, 下面是调用子程序SBR0,,当然首先要建立SBR0了。 其中 #t_1:LD0 为局部变量,是在主程序中定义的,你定义时要注意,不要只是名字一样,即t_1一样,,地址也要一样,即LD0也要一样。 你可以把错误信息发上来,,我看看。。。。

枫子子

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:249
  • 注册:2003年2月11日
发表于:2005-07-18 14:25:00
12楼
非常感谢,搞定了!

枫子子

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:249
  • 注册:2003年2月11日
发表于:2005-07-18 16:08:00
13楼
TO:鸡蛋饼 下面我的这段程序想实现这样的功能,可以吗? 如果VD990里面本来数据是0,当M5.5第一次VD4=VD0,第二次VD8=VD4......... 如果VD990里面本来数据不是0,假如是5(对应VD16),当M5.5第一次VD20=VD16,第二次VD24=VD20......... 当M5.5导通一次,VD990+1=VD990 主程序 网络1 LD M5.5 CALL SBR_1, &VB0, VD990 子程序 SBR_1 LD0 in_1 in dword LD4 in_2 in dword LD8 temp_1 temp dword 网络1 LD SM0.0 MOVD #in_2, #in_1 MOVD *#in_1, #temp_1 +D 1, #in_1 MOVD #temp_1, #in_1

鸡蛋饼...

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 315回
  • 年度积分:0
  • 历史总积分:414
  • 注册:2003年8月26日
发表于:2005-07-18 17:10:00
14楼
如果有PLC的话自己测试一下不就行了吗?

枫子子

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:249
  • 注册:2003年2月11日
发表于:2005-07-18 17:30:00
15楼
昨天晚上我已经出机了。用了最土的办法做的。还是谢谢你,以后我做同样的工程的时候在测试了,谢谢

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 61回
  • 年度积分:0
  • 历史总积分:55
  • 注册:2008年2月22日
发表于:2013-09-25 11:38:47
16楼

主程序/从VB100开始的VW0个字节相加,结果等于VW2



子程序


  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 61回
  • 年度积分:0
  • 历史总积分:55
  • 注册:2008年2月22日
发表于:2013-09-25 11:54:49
17楼

在PLC上调试结果如下图所示:

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 61回
  • 年度积分:0
  • 历史总积分:55
  • 注册:2008年2月22日
发表于:2013-09-25 12:26:31
18楼

VD0+VD4+VD8+VD12+......+VD396  结果等于VD1000

主程序


子程序




热门招聘
相关主题

官方公众号

智造工程师