资源描述:
《通讯接口通讯和底层决策文档.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、通讯和底层决策文档根据Robocup系统的四个子系统的分类,串口通讯的任务是将决策系统确定的每个机器人的轮速发送出去.考虑到SendCommand()是每个机器人的在BasicAct()中调用的函数,所以把通讯的相关函数放在Player类中,m_hComm存在于程序运行的始终,并与实例无关,设为静态变量,InitComm()需操作m_hComm,故设为静态函数,其它与实例无关的函数也定义成静态函数。//inPlayer.hstaticHANDLEm_hComm;voidSendCommand();staticintInitCo
2、mm(intComm_num,intbaud);staticBOOLWriteABuffer(char*lpBuf,DWORDdwToWrite);staticvoidSendCommandofAll();staticvoidSendSingleCommand(constunsignedcharcommand);SendCommand()为每个机器人单独调用的函数,作用是将设置到该机器人(g_MyTeam[i])中去的速度m_vL,m_vR通过串口发送出去。其他各函数的功能及有关说明见函数中的注释。//inPlayer.cpp
3、//功能:初始化串口//参数:Comm串口号,1或2;baud::波特率//返回:若成功返回1,失败则返回-1intPlayer::InitComm(intComm_num,intbaud){CStringstrCommNum;if(1==Comm_num)strCommNum="COM1";elsestrCommNum="COM2";m_hComm=CreateFile(strCommNum,GENERIC_READ
4、GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0
5、);if(m_hComm==INVALID_HANDLE_VALUE)//){AfxMessageBox("串口初始化失败");return-1;}//erroropeningport;abort//设置DCB结构DCBdcb;FillMemory(&dcb,sizeof(dcb),0);dcb.DCBlength=sizeof(dcb);CStringstr;CStringstr1;str1.Format("%d",baud);str=str1+",n,8,1";BOOLb=BuildCommDCB(str,&dcb);//
6、将参数写进dcbif(!b)//若失败{AfxMessageBox("buildcommdcbfailed!");return-1;}if(!SetCommState(m_hComm,&dcb))//根据dcb设置串口状态,若失败{AfxMessageBox("串口初始化失败!");return-1;}return1;}//功能:先设定命令字command,再用SendSingleCommand(command)将该命令字发送出去//命令为1个字节:最高三位小车编号001-100为1(g_MyTeam[0])到4(g_MyTe
7、am[3])号,000为5号第四位为左右轮标识:0:左,1:右轮第五位为速度方向:0:向前;1:向后最低三位为速度大小:000-111从小到大八档速度//参数:无//返回:无voidPlayer::SendCommand()//将单个小车的速度发送出去{unsignedcharcommand;//一个字节unsignedchartemp;//暂存command//先发左轮再发右轮for(unsignedcharj=0;j<=1;j++)//j=0为左轮,j=1为右轮{//设定小车编号if(this->Get_Num()==4)
8、//为5号时发送000temp=0;else{temp=this->Get_Num()+1;temp<<=5;//左移5位得到高三位,小车编号}//设定左右轮标识unsignedcharcharv;charv=(unsignedchar)j<<4;temp=temp
9、charv;//第四位左右轮//设定速度方向unsignedcharmask;intt=1;if(j==0){mask=((*this).Get_vL()<0?(t<<3):0);}else//j==1{mask=((*this).Get_vR()<0?(t<<3
10、):0);}temp=temp
11、mask;//第五位速度方向,速度向后为1,向前为0//设定速度大小intm_floor=0;//0-7if(j==0)//分别设置速度,最低三位{m_floor=(int)floor((fabs((*this).Get_vL())/(MAX_