關(guān) 閉

新聞中心

EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于CAN總線的集散控制系統(tǒng)智能節(jié)點(diǎn)的設(shè)計(jì)

基于CAN總線的集散控制系統(tǒng)智能節(jié)點(diǎn)的設(shè)計(jì)

作者: 時(shí)間:2009-08-14 來源:網(wǎng)絡(luò) 收藏
 b.報(bào)文發(fā)送部分

本文引用地址:http://butianyuan.cn/article/163649.htm

  unsignedcharcan_send(MSG_STRUCTsmsg)

 ?。?/p>

  unsignedcharv;

  inti;

  v=*(unsignedchar*)(BASE_+2);

  if(v0x08)/*判斷是否可以發(fā)送數(shù)據(jù)*/

 ?。鹶=smsg.id>>3;/*標(biāo)識符送識別碼寄存器*/

 ?。╱nsignedchar*)(BASE_+10)=v;

  v=*(unsignedchar*)(BASE_+10);

  v=smsg.id7;/*識別碼0-2位、RTR、DLC*/

  v=5;

  v+=smsg.dlen;

 ?。╱nsignedchar*)(BASE_CAN+11)=v;

  for(i=0;i

 ?。╱nsignedchar*)(BASE_CAN+12+i)=smsg.data[i];}

 ?。╱nsignedchar*)(BASE_CAN+1)=0x01;

  return(1);

 ?。?/p>

  else

 ?。鹯eturn(0);}

 ?。?/p>

  c.報(bào)文接收部分
  

  unsignedcharcan_receive()

 ?。?/p>

  MSG_STRUCTrmsg;

  inti;

  unsignedcharbuf1,buf2;

  while((*(unsignedchar*)(BASE_CAN+2))0x01)/*判斷是否有可接收信息*/

  {buf1=*(unsignedchar*)(BASE_CAN+20);/*將一幀信息取出*/

  buf2=*(unsignedchar*)(BASE_CAN+21);

  rmsg.dlen=buf20x0f;/*數(shù)據(jù)長度*/

  for(i=0;irmsg.dlen;i++)/*取出數(shù)據(jù)*/

 ?。鹯msg.data[i]=*(unsignedchar*)(BASE_CAN+22+i);}

  *(unsignedchar*)(BASE_CAN+1)=0x04;/*釋放接收緩沖器*/

  rmsg.rtr=(buf2>>4)0x01;/*遠(yuǎn)程幀*/

  rmsg.id=buf1;/*取出報(bào)文標(biāo)識符*/

  rmsg.id=3;

  rmsg.id|=(buf2>>5)0x06;

  switch(rmsg.id)/*按標(biāo)識符轉(zhuǎn)入不同的數(shù)據(jù)處理程序*/

  case……

 ?。?/p>

  ……}

  break;

  case……

 ?。?/p>

 ?。?/p>

5.結(jié)束語

  本文的創(chuàng)新點(diǎn)在于:將現(xiàn)場引入到中,克服了傳統(tǒng)的串行通訊的實(shí)時(shí)性不強(qiáng),通訊可靠性差的問題。所給出的CAN已應(yīng)用于某發(fā)電廠的中,經(jīng)過一年多的運(yùn)行情況發(fā)現(xiàn)該方案具有較好的可靠性、實(shí)時(shí)性和靈活性。CAN不僅可以應(yīng)用于集散控制系統(tǒng),還可以用于其它分布式控制系統(tǒng)。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉