关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于CAN总线的集散控制系统智能节点的设计

基于CAN总线的集散控制系统智能节点的设计

作者: 时间:2009-08-14 来源:网络 收藏
 b.报文发送部分

本文引用地址:https://www.eepw.com.cn/article/163649.htm

  unsignedcharcan_send(MSG_STRUCTsmsg)

  {

  unsignedcharv;

  inti;

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

  if(v0x08)/*判断是否可以发送数据*/

  {v=smsg.id>>3;/*标识符送识别码寄存器*/

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

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

  v=smsg.id7;/*识别码0-2位、RTR、DLC*/

  v=5;

  v+=smsg.dlen;

  *(unsignedchar*)(BASE_CAN+11)=v;

  for(i=0;i

  {*(unsignedchar*)(BASE_CAN+12+i)=smsg.data[i];}

  *(unsignedchar*)(BASE_CAN+1)=0x01;

  return(1);

  }

  else

  {return(0);}

  }

  c.报文接收部分
  

  unsignedcharcan_receive()

  {

  MSG_STRUCTrmsg;

  inti;

  unsignedcharbuf1,buf2;

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

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

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

  rmsg.dlen=buf20x0f;/*数据长度*/

  for(i=0;irmsg.dlen;i++)/*取出数据*/

  {rmsg.data[i]=*(unsignedchar*)(BASE_CAN+22+i);}

  *(unsignedchar*)(BASE_CAN+1)=0x04;/*释放接收缓冲器*/

  rmsg.rtr=(buf2>>4)0x01;/*远程帧*/

  rmsg.id=buf1;/*取出报文标识符*/

  rmsg.id=3;

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

  switch(rmsg.id)/*按标识符转入不同的数据处理程序*/

  case……

  {……

  ……}

  break;

  case……

  }

  }

5.结束语

  本文的创新点在于:将现场引入到中,克服了传统的串行通讯的实时性不强,通讯可靠性差的问题。所给出的CAN已应用于某发电厂的中,经过一年多的运行情况发现该方案具有较好的可靠性、实时性和灵活性。CAN不仅可以应用于集散控制系统,还可以用于其它分布式控制系统。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭