一西门子S7200 CPU224如何编程 点击:1008 | 回复:13



永刚

    
  • 精华:10帖
  • 求助:2帖
  • 帖子:75帖 | 345回
  • 年度积分:0
  • 历史总积分:678
  • 注册:2004年2月05日
发表于:2012-09-03 11:02:59
楼主

编程目的:7个开关量变成3个输出量。

7个开关量任意相加组合,任意组合后有1个开关量闭合时,继电器Q0.5输出。任意组合后有2个开关量闭合后,继电器Q0.4输出。

任意组合后有3个开关量闭合后,继电器Q0.5 Q0.4同时输出。任意组合后有4个开关量闭合后,继电器Q0.3输出。任意组合后有5个开关量闭合后,继电器Q0.3 Q0.5同时输出。任意组合后有6个开关量闭合后,继电器Q0.3 Q0.4同时输出。任意组合后有7个开关量闭合后,Q0.3 Q0.4 Q0.5同时输出。

我是一菜鸟,请大家帮忙。,我感觉就是8421码和实属转换比较的问题。请高手指教。




云锋

  • 精华:1帖
  • 求助:4帖
  • 帖子:252帖 | 5541回
  • 年度积分:0
  • 历史总积分:30376
  • 注册:2005年6月24日
发表于:2012-09-03 12:38:10
1楼

楼主是拿这程序练手,学习吧。

因为,实际应用中暂时没接触到这方面的。

秦君

  • 精华:8帖
  • 求助:22帖
  • 帖子:148帖 | 4867回
  • 年度积分:1651
  • 历史总积分:39896
  • 注册:2005年6月28日
发表于:2012-09-03 14:29:44
2楼

用一个字节(例如VB0的低七位)表示7个开关量。任意组合后有1个开关量闭合时就有VB0=1或者VB0=2或者VB0=4或者VB0=8……直到VB0=64  的情况下就有  继电器Q0.5输出。其他类推。                                 

mxz--0506

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 27回
  • 年度积分:0
  • 历史总积分:70
  • 注册:2006年3月13日
发表于:2012-09-03 14:39:39
3楼

这样的题应该是在练习中用的,在实际中不会这样用,不过这样的也不难  参考一下楼上 就可以了

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-09-03 15:19:13
4楼

用S7-200给你编个程序,供参考:

芳季

  • [版主]
  • 精华:5帖
  • 求助:5帖
  • 帖子:86帖 | 5336回
  • 年度积分:0
  • 历史总积分:20165
  • 注册:2003年1月31日
发表于:2012-09-03 23:19:05
5楼

这是一个ON位数判断。你就抓住“ON位数”这关键字去搜索,必定能找到。

先去西门子官网论坛逛逛。

阿水--王者之师

  • 精华:23帖
  • 求助:347帖
  • 帖子:1611帖 | 22281回
  • 年度积分:37
  • 历史总积分:98482
  • 注册:2007年3月22日
发表于:2012-09-04 08:15:56
6楼
    小小鸟飞过, 什么也不会, 只是来看看,帮顶 ! 

陈急思汗-王者之师

  • 精华:0帖
  • 求助:4帖
  • 帖子:16帖 | 370回
  • 年度积分:0
  • 历史总积分:3835
  • 注册:2011年12月17日
发表于:2012-09-04 09:24:12
7楼

支持4楼,支持贴程序出来,支持各种逻辑的程序出现

永刚

  • 精华:10帖
  • 求助:2帖
  • 帖子:75帖 | 345回
  • 年度积分:0
  • 历史总积分:678
  • 注册:2004年2月05日
发表于:2012-09-04 13:18:00
8楼

谢谢各位老兄

我的PLC怎么没反应了啊,SF/DIAG灯亮 RUN灯亮,于电脑也通讯不上,拨开关也没反应。这是什么情况啊。

 

zhangsanjian

  • 精华:0帖
  • 求助:3帖
  • 帖子:8帖 | 387回
  • 年度积分:1400
  • 历史总积分:1888
  • 注册:2006年2月06日
发表于:2012-09-05 13:46:27
9楼
宋伯生编著<pllc编程使用指南>的表决子程序可用,和王者之老师异曲同工

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2012-09-06 09:41:48
10楼

这是一个有趣的问题, 有时间 好好研究一下...............

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2012-09-06 10:23:50
11楼

用C 语言实现,大概是这样的,

定义 , BYTE(CHAR) 类型变量 VB1,假设VB1里面存储了 7位变量,I0.0~I0.6, 那么用一个For循环,检测每一位是否是1,然后计数,在循环完成后,判断计数值,即可知道有几个 位时1 了;然后根据计数值做相应的输出即可;

 

示例 :

unsigned char      VB1; //定义  变量,假设VB1中存储了 7位BOOL 量;

 

int CheckBit(unsignedcharVB1)  // 检测VB1中有几个位是1 ,做计数,然后返回计数值;

{

       int  i=0;

       unsigned char  nBYTE;

       int                 count;

       nBYTE=VB1;

       for(i=1;i<7;i++)

       {

             if(nBYTE & 0x1)              //  检测最低位是否是1,如果是 计数加1

                  count++;

              nBYTE=nBYTE>>1;  // 变量向右移动 一位,1 BIT 位,

        }

        return count;  / /    返回计数值,就是变量里面 有几个位 是 1;

}

 

int  main()

{

        if(1==CheckBit)

              ........ 1 个开关闭合,输出一个Q 0.5点;

         if(2==CheckBit)

              ........ 1 个开关闭合,输出一个Q0.4 点;

         if(3==CheckBit)

              ........ 1 个开关闭合,输出Q0.4 ,Q0.5点;

}

 

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2012-09-06 10:29:48
12楼

上面 main 函数里面写错了;

int  main()

{

        unsigned  char  VB1;

        VB1= IB0;          // 假设VB1 存储了 I0.0~I0.6 这7个位;

        if(1==CheckBit(VB1));

              ........ 1 个开关闭合,输出一个Q 0.5点;

         if(2==CheckBit(VB1))

              ........ 1 个开关闭合,输出一个Q0.4 点;

         if(3==CheckBit(VB1))

              ........ 1 个开关闭合,输出Q0.4 ,Q0.5点;

         return 0;

}

skysuzhen

  • 精华:0帖
  • 求助:1帖
  • 帖子:15帖 | 1092回
  • 年度积分:32
  • 历史总积分:2061
  • 注册:2008年7月31日
发表于:2013-03-05 20:27:29
13楼
飘过,学习中......

热门招聘
相关主题

官方公众号

智造工程师