求助!fx2n加485BD与ADAM模块的通讯问题 点击:1051 | 回复:7



赵作阳

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 2回
  • 年度积分:0
  • 历史总积分:14
  • 注册:2003年11月10日
发表于:2004-01-02 09:47:00
楼主
我现在用一台FX2n通过485BD与几个ADAM模块通信,进行数据采集和监控 有没有人可以指导我一下,在PLC如何编制程序? 多谢大家,急用



GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-12-22 16:07:00
1楼
不会写 PLC 的程序? 还是不知模块的通讯协议?

赵作阳

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 2回
  • 年度积分:0
  • 历史总积分:14
  • 注册:2003年11月10日
发表于:2003-12-29 14:09:00
2楼
不好意思,都不会。可否执教一下,或者推荐一下应该参考什么资料?

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-12-29 14:17:00
3楼
这类模丢的通信协议很简单, 送个 command, 然后等回应即可. 说明书上可查到 command 格式.

opal

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 48回
  • 年度积分:0
  • 历史总积分:61
  • 注册:2002年4月23日
发表于:2003-12-29 16:38:00
4楼
对,关键是掌握PLC的编程,ADAM的采集非常简单。 比如,只要发送#01,就可以采集地址为01的模块的所有通道的值了。 具体ADAM模块的指令集可以参考手册。

yhsu

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 98回
  • 年度积分:0
  • 历史总积分:126
  • 注册:2002年7月04日
发表于:2003-12-30 16:05:00
5楼
可以用协议转换的方式来减少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]; } } //1~10 Module Quest and respone end for(iPt=1;iPt<=336;iPt++){ iChk=iChk+cSendOut[iPt]; } cSendOut[337]=*(&iChk); cSendOut[338]=(iChk>>8); LedOn(); ToCom4Bufn(cSendOut,339); WaitTransmitOver4(); DelayMs(50); ToCom4Bufn(cSendRpt,47); WaitTransmitOver4(); LedOff(); } DisableWDT(); RestoreCom4(); RestoreCom2(); }

yhsu

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 98回
  • 年度积分:0
  • 历史总积分:126
  • 注册:2002年7月04日
发表于:2003-12-30 16:08:00
6楼
可以用协议转换的方式来减少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]; } } //1~10 Module Quest and respone end for(iPt=1;iPt<=336;iPt++){ iChk=iChk+cSendOut[iPt]; } cSendOut[337]=*(&iChk); cSendOut[338]=(iChk>>8); LedOn(); ToCom4Bufn(cSendOut,339); WaitTransmitOver4(); DelayMs(50); ToCom4Bufn(cSendRpt,47); WaitTransmitOver4(); LedOff(); } DisableWDT(); RestoreCom4(); RestoreCom2(); }

赵作阳

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 2回
  • 年度积分:0
  • 历史总积分:14
  • 注册:2003年11月10日
发表于:2004-01-02 09:47:00
7楼
多谢大家的指导 我用的是ADAM4019

热门招聘
相关主题

官方公众号

智造工程师