@@@ 实战高级语言直接访问OMRON PLC [ 二 ] 点击:2829 | 回复:6



尐お槑孨/叶宏

    
  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2012-06-30 10:16:20
楼主

 

工控中有一些小的人机系统用高级语言有它的优势,高速、保密、小巧。而用WINCC之类的有一种 杀鸡用牛刀的感觉,速慢、庞大、没法加密,而高级语言中最缺乏的一种访问接口,如OPC、MODIBUS、直接通讯等,得自已编写。上次成功的实现了OPC与MODIBUS子程序,上一周又编好了与S7-200 PPI通迅的子程序,在此程序的基础上,又编出了与OMRON PLC的通迅子程序。

     除了S7-200 226外,我还有一只CPM2A PLC,为我试

验提供了硬件条件:

我用两根线,一根是OMRON原配的232串口线,一只是国内仿制的

USB-CIF02线,可用于笔记本,需要安装一个驱动,用来将USB接口

仿成232串口,所以,实质仍是串口与PLC通迅。




尐お槑孨/叶宏

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2012-06-30 10:33:49
1楼

百度网站为我们提供了一种巨大的书库,这是九十年代之前是无法想象的事,

有关PLC通迅的对话协议都可以搜到,还能搜到源程序,把大家的智慧集成到了

一起。言归正传,OMRON的对话协议比S7-200 PPI简单多了:

         因为原资料是WORD格式,有表格线,没法贴过来。

可以发现,OMRON的命令字都是ASCII字符,所以,地址等都要从数字量

转换成 十六进字符串或十进字符串,校验码也一样,先用异或求和后,把

把结果转换为16进字符串,所以,它的命令字字符只用7位二进符就够了,

缺省232通迅参数是: 9600,e7,2.这 是与S7-200 PLC不同之处。

 

 

神仙姐姐林雪薇老师

 

尐お槑孨/叶宏

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2012-06-30 10:50:25
2楼

实战经验:

1.  OMRON通迅参数要设成 9600,e,7,2   而西门子S7-200 要设成 9600,e, 8,1,

    用缺省通迅参数的好处是,不需设定PLC,就能直接使用,这个速度足够在高级语言

   互相访问;

 2.  OMRON 的通讯字比西门子的PPI要简单多了,注意的是: 用 OMRON 命令写 PLC时,

    PLC要用命令字设成 “监控”“编程”态,否则,在“运行”态,你是没有写进去的,

   而S7-200没有这一规矩;

 3.  OMRON命令中,都用ASC字符,所以,地址值要转换成 四位十进制字符串,而校验

      码要转换成 两个十六进制字符串,这许多人会搞不清这名堂。

 4. OMRON PLC 是以16位即一个字当成基本单元,而S7-200是以8位二进制即一个字节作为

     单元。所以,OMRON要用短整数作为数组单元。

 

 

香港嫩模代表、宅男女神、萌版赫本的Angelababy

尐お槑孨/叶宏

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2012-06-30 10:53:33
3楼

void    OMRON::cal_fcs(char *buf,int size)
{
        int cl=size-4;
        BYTE fcs=0;
        for (int i=0;i<cl;i++)
            fcs^=buf【i】;
        sprintf(&buf【cl】,"%02hX*\r",(short)fcs);
}
// 这是校验码的子程序,最后转换成两位十六进字符

 

 

/*-----------------
    调用方式:
        omron=new OMRON();
        omron->MSComm=MSComm1;
        omron->timeout=50;          // 50ms
        omron->InitMSComm();
        MSComm1->PortOpen=true;
        ShowMessage(omron->GetCPU());
        omron->SetMode(2);         // 2:监控可写方式
        short buf【1024】;
        omron->ReadNW(_IR,100,2,buf);
        short buf1=0x80;
        omron->WriteW(_DM,20,&buf1);
        omron->WriteBit(_IR,10,0,true);
        MSCOmm1->PortOpen=false;
        delete  omron;

-----------------*/

 这就是调用方法,足够简单,称为对象封装。

尐お槑孨/叶宏

  • 精华:3帖
  • 求助:0帖
  • 帖子:114帖 | 3593回
  • 年度积分:0
  • 历史总积分:7688
  • 注册:2008年3月16日
发表于:2012-06-30 11:00:22
4楼

牛人吃瓜还能吃出个老二,奇!

 

 

 一刀下去,造就了两张脸.jpg

plq

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1076回
  • 年度积分:0
  • 历史总积分:1442
  • 注册:2008年3月16日
发表于:2012-07-02 23:43:44
5楼
原话引用:“OMRON的对话协议比S7-200 PPI简单多了”!关注关注!

Tianjun

  • 精华:3帖
  • 求助:41帖
  • 帖子:510帖 | 5540回
  • 年度积分:76
  • 历史总积分:32331
  • 注册:2006年9月20日
发表于:2012-07-03 04:38:05
6楼
学习了                                                    

热门招聘
相关主题

官方公众号

智造工程师