基于CAN總線的集散控制系統(tǒng)智能節(jié)點的設(shè)計
unsignedcharcan_send(MSG_STRUCTsmsg)
?。?/p>
unsignedcharv;
inti;
v=*(unsignedchar*)(BASE_CAN+2);
if(v0x08)/*判斷是否可以發(fā)送數(shù)據(jù)*/
{v=smsg.id>>3;/*標(biāo)識符送識別碼寄存器*/
?。╱nsignedchar*)(BASE_CAN+10)=v;
v=*(unsignedchar*)(BASE_CAN+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.報文接收部分
unsignedcharcan_receive()
{
MSG_STRUCTrmsg;
inti;
unsignedcharbuf1,buf2;
while((*(unsignedchar*)(BASE_CAN+2))0x01)/*判斷是否有可接收信息*/
?。鸼uf1=*(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);}
?。╱nsignedchar*)(BASE_CAN+1)=0x04;/*釋放接收緩沖器*/
rmsg.rtr=(buf2>>4)0x01;/*遠程幀*/
rmsg.id=buf1;/*取出報文標(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)新點在于:將現(xiàn)場總線引入到集散控制系統(tǒng)中,克服了傳統(tǒng)的串行通訊集散控制系統(tǒng)的實時性不強,通訊可靠性差的問題。所給出的CAN智能節(jié)點已應(yīng)用于某發(fā)電廠的集散控制系統(tǒng)中,經(jīng)過一年多的運行情況發(fā)現(xiàn)該設(shè)計方案具有較好的可靠性、實時性和靈活性。CAN智能節(jié)點不僅可以應(yīng)用于集散控制系統(tǒng),還可以用于其它分布式控制系統(tǒng)。
評論