RE::plc和ADAM4019通讯急!急! 点击:1156 | 回复:6



老丁

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 3回
  • 年度积分:0
  • 历史总积分:74
  • 注册:2003年12月06日
发表于:2004-02-16 09:49:00
楼主
plc与外部设备通讯,来获取数据,作为控制的动力,ADAM模块4019(即下面所说的4000)   他能作为外部设备,采集环境情况,转化为数据,和plc用485协议通讯,告诉它环境情况   现在遇到的问题是怎样从plc中识别读取ADAM模块4019传进来的数据   下面是工控网的回帖,有更好的方法吗?   如果没有,能不能近一部对下面的进行一下指点。   谢谢:)   ~~~非常感谢发件人~~~~~~~   -----邮件原件-----    *省略掉一部分*   可以用协议转换的方式来减少PLC的开发。   用协议转换器将7000或4000或其他智能IO设   备转换为三菱的格式,直接将数据发到PLC的D寄存器。   以下是用7188协议转换的源码:(有关7188 可以到网上找到很多资料)   #include"..\..\lib\i7188.h"   void main(void)   { unsigned char i7018Req[4]={0x23,0x30,0x31,0x0d};   unsigned char i7018Res[33];   unsigned char cSendOut[339]; //15 +1 +1 + 4 X iCh +2   unsigned char cSendRpt[47];   int iTemp,iErrorNo,iPt;   int iMd=10,iCh=80,iChk=0; //iMd<16   cSendOut[0]=0x05;   cSendOut[1]=0x30;   cSendOut[2]=0x30;   cSendOut[3]=0x46;   cSendOut[4]=0x46;   cSendOut[5]=0x57;   cSendOut[6]=0x57;   cSendOut[7]=0x30;   cSendOut[8]=0x44;   cSendOut[9]=0x30;   cSendOut[10]=0x33;   cSendOut[11]=0x38;   cSendOut[12]=0x34;   cSendOut[13]=0x31; //iMd 1   cSendOut[14]=0x30; //iMd 0   cSendOut[15]=0x38; //iCh 8   cSendOut[16]=0x30; //iCh 0   cSendRpt[0]=0x44;   cSendRpt[1]=0x30;   cSendRpt[2]=0x35;   cSendRpt[3]=0x30;   cSendRpt[4]=0x30;   cSendRpt[5]=0x31; //iMd 1   cSendRpt[6]=0x30; //iMd 0   InstallCom2(9600L,8,0,1);   InstallCom4(115200L,8,0);   EnableWDT();   for(;;){   RefreshWDT();   for(iTemp=1;iTemp<=iMd;iTemp++){ //1~10 Module Quest and   respone start   if(iTemp<10){   i7018Req[1]=0x30+iTemp/10;   i7018Req[2]=0x30+iTemp%10;   }   else{   i7018Req[1]=0x30;   i7018Req[2]=0x41+iTemp%10;   }   SendCmdTo7000(2,i7018Req,0);   RefreshWDT();   iErrorNo=ReceiveResponseFrom7000(2,i7018Res,1000,0);   cSendRpt[7+(iTemp-1)*4]=0x30;   cSendRpt[8+(iTemp-1)*4]=0x30;   cSendRpt[9+(iTemp-1)*4]=0x30;   cSendRpt[10+(iTemp-1)*4]=0x30;   if(iErrorNo!=0){   for(iPt=0;iPt<33;iPt++){   i7018Res[iPt]=0x66;   cSendRpt[7+(iTemp-1)*4]=0x66;   cSendRpt[8+(iTemp-1)*4]=0x66;   cSendRpt[9+(iTemp-1)*4]=0x66;   cSendRpt[10+(iTemp-1)*4]=0x66;   }   }   for(iPt=0;iPt<=32;iPt++){   cSendOut[17+iPt+(iTemp-1)*32]=i7018Res[iPt+1];   }   *省略掉一部分*   }   DisableWDT();   RestoreCom4();   RestoreCom2();



GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2004-02-13 15:46:00
1楼
别人的建议是... PLC === 7188 === 7000/4000 您想问的是... PLC === 7000/4000 是吧?

老丁

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 3回
  • 年度积分:0
  • 历史总积分:74
  • 注册:2003年12月06日
发表于:2004-02-13 19:33:00
2楼
谢谢,GaryLin: 我想问的是... PLC === 4000行不行? 如果不行,PLC === 7188 === 4000 行不行? 7188究竟是什么样的卡(全称) 起什么样的作用

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2004-02-14 20:32:00
3楼
只要双方有提供 RS-485 接口, 您就可以将其接在一起. 剩下的问题在于... 如何通信? 7000/4000 的通信协议非常简单, 使用 ASCII 格式, 查一下说明书即可知. 例: #AA(CR) 这 4 个字符所组成的 command 即可向 7017/4017 取得 AI 数据. (其中 AA 是位置 ID: 0x00 ~ 0xFF) PLC programming, 我不清楚, 只要该 PLC 能送出 ASCII 字串符, 那应该就能达到通信的目的了. 这您得再查查看. 泓格I-7188嵌入式控制器 http://www.icpdas.com.cn/products/7188/7188_index_c.htm 如同一台微型 PC, 您可用 Turbo C 来开发程序, 并下载至 7188 上运行. 提供丰富的例程. 在此例子中, 7188 是用作双方的协议转换. 这是很常见的用法.若是该 PLC 无法送出 ASCII command, 那加一个 7188 在中间作转换, 的确是可以达到效果的. 而协议的转换, 您可以参考上述例程.

老丁

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 3回
  • 年度积分:0
  • 历史总积分:74
  • 注册:2003年12月06日
发表于:2004-02-15 16:59:00
4楼
我现在受困于怎样将4019中的数据引入程序,连线方式为compuer=====4520====4019 您能给我写个最基本的例子吗? 如在turboC中实现从4019中读1通道数据,并将它打印出来 谢谢您 main() { ?????? printf(" ??? "); }

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2004-02-16 09:49:00
5楼
研华应该有提供例程吧?! 抓来看看吧! 不然也可参考泓格的 DCON_DOS 写法. http://www.icpdas.com/download/7000/7000.htm

交流的天空

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 93回
  • 年度积分:0
  • 历史总积分:114
  • 注册:2003年3月18日
发表于:2004-03-03 14:02:00
6楼
打电话问研华要一下吧,有例程吧!

热门招聘
相关主题

官方公众号

智造工程师