`

一套基于模板匹配的语音识别技术。提取语音的特征,并建立模板库,可以将语音识别技术应用于机器人

 
阅读更多
  1. 视图类,废话少说,看看带注释的源码
  2. #include"stdafx.h"
  3. #include"robot.h"
  4. #include"Label.h"
  5. #include"robotDoc.h"
  6. #include"robotView.h"
  7. #ifdef_DEBUG
  8. #definenewDEBUG_NEW
  9. #undefTHIS_FILE
  10. staticcharTHIS_FILE[]=__FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. //CRobotView
  14. IMPLEMENT_DYNCREATE(CRobotView,CFormView)
  15. BEGIN_MESSAGE_MAP(CRobotView,CFormView)
  16. //{{AFX_MSG_MAP(CRobotView)
  17. ON_WM_CTLCOLOR()
  18. ON_WM_TIMER()
  19. //}}AFX_MSG_MAP
  20. ON_MESSAGE(WM_COMMNOTIFY,OnCommNotify)
  21. END_MESSAGE_MAP()
  22. /////////////////////////////////////////////////////////////////////////////
  23. //CRobotViewconstruction/destruction
  24. CRobotView::CRobotView()
  25. :CFormView(CRobotView::IDD)
  26. {
  27. //{{AFX_DATA_INIT(CRobotView)
  28. //}}AFX_DATA_INIT
  29. //TODO:addconstructioncodehere
  30. m_ncomand1=10;
  31. m_bflag=0;
  32. m_nsudu=1;
  33. m_ngzq=0;
  34. m_nguanjie;
  35. m_nfangxiang;
  36. m_nmsg[0]=0;
  37. m_njishu=0;
  38. m_nmsg[1]=0;
  39. m_nmsg[2]=0;
  40. m_nmsg[3]=0;
  41. m_nmsg[4]=0;
  42. m_nsum=0;
  43. m_ndelay=0;
  44. nLength=0;
  45. m_recflag=1;
  46. m_failflag=1;
  47. m_brush.CreateSolidBrush(RGB(40,98,122));//生成一绿色刷子
  48. }
  49. CRobotView::~CRobotView()
  50. {
  51. }
  52. voidCRobotView::DoDataExchange(CDataExchange*pDX)
  53. {
  54. CFormView::DoDataExchange(pDX);
  55. //{{AFX_DATA_MAP(CRobotView)
  56. //DDX_Control(pDX,IDC_EDIT1,m_edit1);
  57. DDX_Control(pDX,IDC_STATIC_LINK,m_link);
  58. DDX_Control(pDX,IDC_STATIC_1,m_ml);
  59. DDX_Control(pDX,IDC_STATIC_4,m_workpart);
  60. DDX_Control(pDX,IDC_STATIC_COMMAND,m_command);
  61. DDX_Control(pDX,IDC_STATIC_STATUS,m_static);
  62. DDX_Control(pDX,IDC_STATIC_BUCHANG,m_buchangshu);
  63. DDX_Control(pDX,IDC_STATIC_5,m_buchang);
  64. DDX_Control(pDX,IDC_STATIC_3,m_sudu);
  65. DDX_Control(pDX,IDC_STATIC_2,m_zhuangtai);
  66. //}}AFX_DATA_MAP
  67. }
  68. BOOLCRobotView::PreCreateWindow(CREATESTRUCT&cs)
  69. {
  70. //TODO:ModifytheWindowclassorstylesherebymodifying
  71. //theCREATESTRUCTcs
  72. returnCFormView::PreCreateWindow(cs);
  73. }
  74. /////////////////////////////////////////////////////////////////////////////
  75. //CRobotViewdiagnostics
  76. #ifdef_DEBUG
  77. voidCRobotView::AssertValid()const
  78. {
  79. CFormView::AssertValid();
  80. }
  81. voidCRobotView::Dump(CDumpContext&dc)const
  82. {
  83. CFormView::Dump(dc);
  84. }
  85. CRobotDoc*CRobotView::GetDocument()//non-debugversionisinline
  86. {
  87. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRobotDoc)));
  88. return(CRobotDoc*)m_pDocument;
  89. }
  90. #endif//_DEBUG
  91. /////////////////////////////////////////////////////////////////////////////
  92. //CRobotViewmessagehandlers
  93. voidCRobotView::OnDraw(CDC*pDC)
  94. {
  95. //TODO:Addyourspecializedcodehereand/orcallthebaseclass
  96. SuduDisplay(m_nsudu);
  97. GzqDisplay(m_ngzq);
  98. }
  99. voidCRobotView::OnInitialUpdate()
  100. {
  101. CFormView::OnInitialUpdate();
  102. //TODO:Addyourspecializedcodehereand/orcallthebaseclass
  103. m_link.SetLink(TRUE)
  104. .SetTextColor(RGB(0,0,255))
  105. .SetFontUnderline(TRUE)
  106. .SetLinkCursor(AfxGetApp()->LoadCursor(IDC_ICON1));
  107. m_command.SetFontSize(24)
  108. .SetFontName("Terminal")
  109. .SetTextColor(RGB(240,240,40));
  110. m_static.SetFontSize(24)
  111. .SetTextColor(RGB(240,240,40));
  112. m_workpart.SetFontSize(24)
  113. .SetFontBold(TRUE)
  114. .SetTextColor(RGB(0,240,0));
  115. m_buchangshu.SetFontSize(24)
  116. .SetTextColor(RGB(240,240,40));
  117. m_buchang.SetFontSize(24)
  118. .SetFontBold(TRUE)
  119. .SetTextColor(RGB(0,240,0));
  120. m_sudu.SetFontSize(24)
  121. .SetFontBold(TRUE)
  122. .SetTextColor(RGB(0,240,0));
  123. m_zhuangtai.SetFontSize(24)
  124. .SetFontBold(TRUE)
  125. .SetTextColor(RGB(0,240,0));
  126. m_ml.SetFontSize(24)
  127. .SetLinkCursor(AfxGetApp()->LoadCursor(IDC_ICON1))
  128. .SetFontBold(TRUE)
  129. .SetTextColor(RGB(0,240,0));
  130. GetParentFrame()->RecalcLayout();
  131. ResizeParentToFit();
  132. }
  133. LRESULTCRobotView::WindowProc(UINTmessage,WPARAMwParam,LPARAMlParam)
  134. {
  135. //TODO:Addyourspecializedcodehereand/orcallthebaseclass
  136. if(message==(WM_USER+1002))
  137. ProcessMessage(wParam,lParam);
  138. elseif(message==(WM_USER+1003))
  139. ProcessMyMessage();
  140. returnCFormView::WindowProc(message,wParam,lParam);
  141. }
  142. voidCRobotView::ProcessMessage(WPARAMwParam,LPARAMlParam)
  143. {
  144. CRobotDoc*pDoc=GetDocument();
  145. char*l[57]={"零","一","二",///012
  146. "三","四","五","六","七","八","九","执行","各关节归零","大臂正转",///12
  147. "大臂反转","小臂正转","小臂反转","手腕正转","手腕反转","手爪张开","手爪闭合","上升","下降","大臂运行",///13--22
  148. "大臂负运行","小臂运行","小臂负运行","手腕运行","手腕负运行","手爪运行","手爪负运行","升降运行",////23---30
  149. "升降负运行","大臂归零","小臂归零","手腕归零","手爪归零","升降归零","速度加","原点记忆",///31---38
  150. "系统复位","示教盒","","","回原点","速度减","区号加","区号减","单步再现","周期再现",///39---48
  151. "连续再现","返回","继续","数据记忆","读取数据","设置串口","打开串口","关闭串口"};
  152. CStringstrcomand;
  153. CStringstrstatus;
  154. m_recflag=1;
  155. if(!pDoc->m_bConnected)
  156. {
  157. KillTimer(1);
  158. MessageBox("请先打开串口");
  159. return;
  160. }
  161. if(wParam==100)
  162. {
  163. KillTimer(1);
  164. if(!m_failflag)
  165. {
  166. CWnd*pWnd=GetDlgItem(IDC_STATIC_5);
  167. pWnd->SetWindowText("");
  168. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  169. pWnd->SetWindowText("");
  170. pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  171. pWnd->SetWindowText("请输入新的命令");
  172. pWnd=GetDlgItem(IDC_STATIC_STATUS);
  173. pWnd->SetWindowText("执行完毕");
  174. m_ncomand1=0;
  175. }
  176. else
  177. MessageBox("请检查连线是否正确或下位机是否打开","通信失败",MB_ICONWARNING);
  178. }
  179. elseif(wParam>=11&&wParam<=56)
  180. {
  181. m_bflag=0;
  182. m_ncomand1=wParam;
  183. strcomand=l[m_ncomand1];
  184. CWnd*pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  185. pWnd->SetWindowText(strcomand);
  186. pWnd=GetDlgItem(IDC_STATIC_STATUS);
  187. pWnd->SetWindowText("");
  188. pWnd=GetDlgItem(IDC_STATIC_5);
  189. pWnd->SetWindowText("");
  190. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  191. pWnd->SetWindowText("");
  192. m_nsum=0;
  193. m_njishu=0;
  194. }
  195. elseif(wParam>=0&&wParam<=9)
  196. {
  197. if(m_ncomand1>=12&&m_ncomand1<=21)
  198. {
  199. m_bflag=1;
  200. m_nmsg[m_njishu]=wParam;
  201. //pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  202. //pWnd->SetWindowText(strcomand);
  203. CWnd*pWnd=GetDlgItem(IDC_STATIC_5);
  204. pWnd->SetWindowText("步长:");
  205. ++m_njishu;
  206. if(m_njishu==1)
  207. {
  208. CStringm_stemp;
  209. m_nsum=m_nmsg[0];
  210. m_stemp.Format("%d",m_nsum);
  211. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  212. pWnd->SetWindowText(m_stemp);
  213. }
  214. if(m_njishu==2)
  215. {
  216. CStringm_stemp;
  217. m_nsum=m_nmsg[0]*10+m_nmsg[1];
  218. m_stemp.Format("%d",m_nsum);
  219. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  220. pWnd->SetWindowText(m_stemp);
  221. }
  222. if(m_njishu==3)
  223. {
  224. CStringm_stemp;
  225. m_nsum=m_nmsg[0]*100+m_nmsg[1]*10+m_nmsg[2];
  226. //m_nmsg[0]=0;
  227. //m_nmsg[1]=0
  228. //m_nmsg[2]=0;
  229. //m_njishu=0;
  230. m_stemp.Format("%d",m_nsum);
  231. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  232. pWnd->SetWindowText(m_stemp);
  233. }
  234. if(m_njishu==4)
  235. {
  236. CStringm_stemp;
  237. m_nsum=m_nmsg[0]*1000+m_nmsg[1]*100+m_nmsg[2]*10+m_nmsg[3];
  238. m_stemp.Format("%d",m_nsum);
  239. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  240. pWnd->SetWindowText(m_stemp);
  241. }
  242. if(m_njishu>4)
  243. {
  244. m_njishu=1;
  245. m_nmsg[0]=m_nmsg[4];
  246. CStringm_stemp;
  247. m_nsum=m_nmsg[0];
  248. m_stemp.Format("%d",m_nsum);
  249. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  250. pWnd->SetWindowText(m_stemp);
  251. m_nmsg[1]=0;
  252. m_nmsg[2]=0;
  253. m_nmsg[3]=0;
  254. }
  255. }
  256. else
  257. ;//MessageBox("清先输入运动步数命令");
  258. }
  259. elseif(wParam=10)
  260. {SetTimer(1,500,NULL);
  261. if(m_ncomand1>=11&&m_ncomand1<=56)
  262. {
  263. if(!m_bflag)
  264. {
  265. strstatus="正在执行命令,请稍后.....";
  266. CWnd*pWnd=GetDlgItem(IDC_STATIC_STATUS);
  267. pWnd->SetWindowText(strstatus);
  268. Execute(m_ncomand1);
  269. }
  270. else//if(m_ncomand1>=12&&m_ncomand1<=21)
  271. {
  272. unsignedcharm_uhi,m_ulo;
  273. m_nmsg[0]=0;
  274. m_nmsg[1]=0;
  275. m_nmsg[2]=0;
  276. m_nmsg[3]=0;
  277. m_njishu=0;
  278. ///CWnd*pWnd=GetDlgItem(IDC_STATIC_STATUS);
  279. ///pWnd->SetWindowText("正在执行命令,请稍后.....");
  280. switch(m_ncomand1)
  281. {
  282. case(12):
  283. m_nguanjie=01;
  284. m_nfangxiang=00;
  285. m_uhi=(unsignedchar)(m_nsum/256);
  286. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  287. m_ndelay=(m_nsum+500)/m_nsudu;
  288. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  289. break;
  290. case(13):
  291. m_nguanjie=0x01;
  292. m_nfangxiang=0xff;
  293. m_uhi=(unsignedchar)(m_nsum/256);
  294. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  295. m_ndelay=(m_nsum+500)/m_nsudu;
  296. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  297. break;
  298. case(14):
  299. m_nguanjie=0x02;
  300. m_nfangxiang=0x00;
  301. m_uhi=(unsignedchar)(m_nsum/256);
  302. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  303. m_ndelay=(m_nsum)/(m_nsudu*3);
  304. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  305. break;
  306. case(15):
  307. m_nguanjie=0x02;
  308. m_nfangxiang=0xff;
  309. m_uhi=(unsignedchar)(m_nsum/256);
  310. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  311. m_ndelay=(m_nsum)/(m_nsudu*3);
  312. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  313. break;
  314. case(16):
  315. m_nguanjie=0x04;
  316. m_nfangxiang=0x00;
  317. m_uhi=(unsignedchar)(m_nsum/256);
  318. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  319. m_ndelay=(m_nsum+500)/m_nsudu;
  320. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  321. break;
  322. case(17):
  323. m_nguanjie=0x04;
  324. m_nfangxiang=0xff;
  325. m_uhi=(unsignedchar)(m_nsum/256);
  326. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  327. m_ndelay=(m_nsum+500)/m_nsudu;
  328. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  329. break;
  330. case(18):
  331. m_nguanjie=0x05;
  332. m_nfangxiang=0x00;
  333. m_uhi=(unsignedchar)(m_nsum/256);
  334. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  335. m_ndelay=(m_nsum+500)/m_nsudu;
  336. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  337. break;
  338. case(19):
  339. m_nguanjie=0x05;
  340. m_nfangxiang=0xff;
  341. m_uhi=(unsignedchar)(m_nsum/256);
  342. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  343. m_ndelay=(m_nsum+500)/m_nsudu;
  344. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  345. break;
  346. case(20):
  347. m_nguanjie=0x03;
  348. m_nfangxiang=0x00;
  349. m_uhi=(unsignedchar)(m_nsum/256);
  350. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  351. m_ndelay=(m_nsum+500)/(m_nsudu*2);
  352. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  353. break;
  354. case(21):
  355. m_nguanjie=0x03;
  356. m_nfangxiang=0xff;
  357. m_uhi=(unsignedchar)(m_nsum/256);
  358. m_ulo=(unsignedchar)(m_nsum-m_uhi*256);
  359. m_ndelay=(m_nsum+500)/(m_nsudu*2);
  360. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  361. break;
  362. }
  363. }
  364. m_failflag=1;}
  365. else
  366. MessageBox("清先输入命令");
  367. }
  368. else
  369. MessageBox("不能识别,请重新输入命令");
  370. }
  371. voidCRobotView::ProcessMyMessage()
  372. {
  373. CDC*PDc=GetDC();
  374. m_failflag=0;
  375. switch(m_ncomand1)
  376. {
  377. case(37):
  378. {
  379. m_nsudu++;
  380. if(m_nsudu==6)
  381. m_nsudu=1;
  382. OnDraw(PDc);
  383. }
  384. break;
  385. case(44):
  386. {
  387. m_nsudu--;
  388. if(m_nsudu==0)
  389. m_nsudu=5;
  390. OnDraw(PDc);
  391. }
  392. break;
  393. case(45):
  394. {
  395. m_ngzq++;
  396. if(m_ngzq==8)
  397. m_ngzq=0;
  398. OnDraw(PDc);
  399. }
  400. break;
  401. case(46):
  402. {
  403. m_ngzq--;
  404. if(m_ngzq==-1)
  405. m_ngzq=7;
  406. OnDraw(PDc);
  407. }
  408. break;
  409. }
  410. CWnd*pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  411. pWnd->SetWindowText("请输入新的命令");
  412. pWnd=GetDlgItem(IDC_STATIC_STATUS);
  413. pWnd->SetWindowText("执行完毕");
  414. m_ncomand1=0;
  415. //}
  416. //else
  417. //MessageBox("请检查连线是否正确或下位机是否打开","通信失败",MB_ICONWARNING);
  418. }
  419. voidCRobotView::SuduDisplay(intn)
  420. {
  421. CWnd*pWnd=GetDlgItem(IDC_STATIC_SUDU);
  422. CDC*pControlDC=pWnd->GetDC();
  423. pWnd->Invalidate();
  424. pWnd->UpdateWindow();
  425. pControlDC->SelectStockObject(BLACK_BRUSH);
  426. CBitmapmBit;
  427. CDCMemDC;
  428. MemDC.CreateCompatibleDC(NULL);
  429. switch(n)
  430. {
  431. case0:
  432. mBit.LoadBitmap(IDB_BMP10);
  433. break;
  434. case1:
  435. mBit.LoadBitmap(IDB_BMP11);
  436. break;
  437. case2:
  438. mBit.LoadBitmap(IDB_BMP12);
  439. break;
  440. case3:
  441. mBit.LoadBitmap(IDB_BMP13);
  442. break;
  443. case4:
  444. mBit.LoadBitmap(IDB_BMP14);
  445. break;
  446. case5:
  447. mBit.LoadBitmap(IDB_BMP15);
  448. break;
  449. default:
  450. //mBit.LoadBitmap(IDB_BMP0);
  451. MessageBox("error");
  452. }
  453. CBitmap*pOldBit=MemDC.SelectObject(&mBit);
  454. pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
  455. MemDC.SelectObject(pOldBit);
  456. }
  457. voidCRobotView::GzqDisplay(intn)
  458. {
  459. CWnd*pWnd=GetDlgItem(IDC_STATIC_GONGZUOQU);
  460. CDC*pControlDC=pWnd->GetDC();
  461. pWnd->Invalidate();
  462. pWnd->UpdateWindow();
  463. pControlDC->SelectStockObject(BLACK_BRUSH);
  464. CBitmapmBit;
  465. CDCMemDC;
  466. MemDC.CreateCompatibleDC(NULL);
  467. switch(n)
  468. {
  469. case0:
  470. mBit.LoadBitmap(IDB_BMP10);
  471. break;
  472. case1:
  473. mBit.LoadBitmap(IDB_BMP11);
  474. break;
  475. case2:
  476. mBit.LoadBitmap(IDB_BMP12);
  477. break;
  478. case3:
  479. mBit.LoadBitmap(IDB_BMP13);
  480. break;
  481. case4:
  482. mBit.LoadBitmap(IDB_BMP14);
  483. break;
  484. case5:
  485. mBit.LoadBitmap(IDB_BMP15);
  486. break;
  487. case6:
  488. mBit.LoadBitmap(IDB_BMP16);
  489. break;
  490. case7:
  491. mBit.LoadBitmap(IDB_BMP17);
  492. break;
  493. default:
  494. //mBit.LoadBitmap(IDB_BMP0);
  495. MessageBox("error");
  496. }
  497. CBitmap*pOldBit=MemDC.SelectObject(&mBit);
  498. pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
  499. MemDC.SelectObject(pOldBit);
  500. }
  501. voidCRobotView::Execute(intn)
  502. {
  503. CRobotDoc*pDoc=GetDocument();
  504. unsignedcharsend1;
  505. switch(n)
  506. {
  507. case(11):
  508. home();
  509. break;
  510. case(12):
  511. {//大臂正传
  512. unsignedcharsend[6]={0x53,0x01,0x00,0x00,0x07,0x18};
  513. for(inti=0;i<=5;i++)
  514. pDoc->WriteComm(&send[i],1);
  515. Sleep(2000/m_nsudu);
  516. break;
  517. }
  518. case(13):
  519. {
  520. unsignedcharsend[6]={0x53,0x01,0xff,0x00,0x07,0x18};
  521. for(inti=0;i<=5;i++)
  522. pDoc->WriteComm(&send[i],1);
  523. //pDoc->ReadComm(&buf,1);
  524. //if(nLength)
  525. ////{
  526. //str.Format("%d",buf);
  527. //m_edit1.SetSel(-1,0);
  528. //m_edit1.ReplaceSel(str);//向编辑视图中插入收到的字符
  529. //}
  530. //else
  531. //MessageBox("fjdklfjsdklgjsdfkl");
  532. Sleep(2000/m_nsudu);
  533. break;
  534. }
  535. case(14)://xiaobizhengzhuan
  536. {
  537. unsignedcharsend[6]={0x53,0x02,0x00,0x00,0x0f,0xe3};
  538. for(inti=0;i<=5;i++)
  539. pDoc->WriteComm(&send[i],1);
  540. Sleep(2000/m_nsudu);
  541. break;
  542. }
  543. case(15)://小臂反转
  544. {
  545. unsignedcharsend[6]={0x53,0x02,0xff,0x00,0x0f,0xe3};
  546. for(inti=0;i<=5;i++)
  547. pDoc->WriteComm(&send[i],1);
  548. Sleep(2000/m_nsudu);
  549. break;
  550. }
  551. case(16)://手腕正转
  552. {
  553. unsignedcharsend[6]={0x53,0x04,0x00,0x00,0x00,0xff};
  554. for(inti=0;i<=5;i++)
  555. pDoc->WriteComm(&send[i],1);
  556. Sleep(1000/m_nsudu);
  557. break;
  558. }
  559. case(17)://shouwanfanzhuan
  560. {
  561. unsignedcharsend[6]={0x53,0x04,0xff,0x00,0x00,0xff};
  562. for(inti=0;i<=5;i++)
  563. pDoc->WriteComm(&send[i],1);
  564. Sleep(1000/m_nsudu);
  565. }
  566. break;
  567. case(18)://shouzhuazhangkai
  568. {
  569. unsignedcharsend[6]={0x53,0x05,0x00,0x00,0x00,0x43};
  570. for(inti=0;i<=5;i++)
  571. pDoc->WriteComm(&send[i],1);
  572. Sleep(2000/m_nsudu);
  573. }
  574. break;
  575. case(19):
  576. {
  577. unsignedcharsend[6]={0x53,0x05,0xff,0x00,0x00,0xf3};
  578. for(inti=0;i<=5;i++)
  579. pDoc->WriteComm(&send[i],1);
  580. Sleep(2000/m_nsudu);
  581. }
  582. break;
  583. case(20)://shangsheng
  584. {
  585. unsignedcharsend[6]={0x53,0x03,0x00,0x00,0x02,0xe3};
  586. for(inti=0;i<=5;i++)
  587. pDoc->WriteComm(&send[i],1);
  588. Sleep(1000/m_nsudu);
  589. }
  590. break;
  591. case(21):
  592. {
  593. unsignedcharsend[6]={0x53,0x03,0xff,0x00,0x02,0xe3};
  594. for(inti=0;i<=5;i++)
  595. pDoc->WriteComm(&send[i],1);
  596. Sleep(1000/m_nsudu);
  597. }
  598. break;
  599. /*case(22)://dabiyunxing
  600. {
  601. unsignedcharsend[3]={0x63,0x01,0x00};
  602. for(inti=0;i<=2;i++)
  603. pDoc->WriteComm(&send[i],1);
  604. Sleep(2000);
  605. }
  606. break;
  607. case(23):
  608. {
  609. unsignedcharsend[3]={0x63,0x01,0xff};
  610. for(inti=0;i<=2;i++)
  611. pDoc->WriteComm(&send[i],1);
  612. Sleep(2000);
  613. }
  614. break;
  615. case(24)://xiaobiyunxing
  616. {
  617. unsignedcharsend[3]={0x63,0x02,0x00};
  618. for(inti=0;i<=2;i++)
  619. pDoc->WriteComm(&send[i],1);
  620. Sleep(2000);
  621. }
  622. break;
  623. case(25):
  624. {
  625. unsignedcharsend[3]={0x63,0x02,0xff};
  626. for(inti=0;i<=2;i++)
  627. pDoc->WriteComm(&send[i],1);
  628. Sleep(2000);
  629. }
  630. break;
  631. case(26)://shouwanyunxing
  632. {
  633. unsignedcharsend[3]={0x63,0x04,0x00};
  634. for(inti=0;i<=2;i++)
  635. pDoc->WriteComm(&send[i],1);
  636. Sleep(2000);
  637. }
  638. break;
  639. case(27):
  640. {
  641. unsignedcharsend[3]={0x63,0x04,0xff};
  642. for(inti=0;i<=2;i++)
  643. pDoc->WriteComm(&send[i],1);
  644. Sleep(2000);
  645. }
  646. break;
  647. case(28)://shouzhuayunxing
  648. {
  649. unsignedcharsend[3]={0x63,0x05,0x00};
  650. for(inti=0;i<=2;i++)
  651. pDoc->WriteComm(&send[i],1);
  652. Sleep(2000);
  653. }
  654. break;
  655. case(29):
  656. {
  657. unsignedcharsend[3]={0x63,0x05,0xff};
  658. for(inti=0;i<=2;i++)
  659. pDoc->WriteComm(&send[i],1);
  660. Sleep(2000);
  661. }
  662. break;
  663. case(30)://shengjiangyunxing
  664. {
  665. unsignedcharsend[3]={0x63,0x03,0x00};
  666. for(inti=0;i<=2;i++)
  667. pDoc->WriteComm(&send[i],1);
  668. Sleep(2000);
  669. }
  670. break;
  671. case(31):
  672. {
  673. unsignedcharsend[3]={0x63,0x05,0xff};
  674. for(inti=0;i<=2;i++)
  675. pDoc->WriteComm(&send[i],1);
  676. Sleep(2000);
  677. }
  678. break;
  679. */
  680. case(32)://dabiguiling
  681. {
  682. unsignedcharsend[2]={0xa3,0x01};
  683. for(inti=0;i<=1;i++)
  684. pDoc->WriteComm(&send[i],1);
  685. Sleep(18000);
  686. }
  687. break;
  688. case(33)://xiaobiguiling
  689. {
  690. unsignedcharsend[2]={0xa3,0x02};
  691. for(inti=0;i<=1;i++)
  692. pDoc->WriteComm(&send[i],1);
  693. Sleep(15000);
  694. }
  695. break;
  696. case(34)://shouwanguiling
  697. {
  698. unsignedcharsend[2]={0xa3,0x04};
  699. for(inti=0;i<=1;i++)
  700. pDoc->WriteComm(&send[i],1);
  701. Sleep(6000);
  702. }
  703. break;
  704. case(35)://shouzhuaguiling
  705. {
  706. unsignedcharsend[2]={0xa3,0x05};
  707. for(inti=0;i<=1;i++)
  708. pDoc->WriteComm(&send[i],1);
  709. Sleep(6000);
  710. }
  711. break;
  712. case(36)://shengjiangguiling
  713. {
  714. unsignedcharsend[2]={0xa3,0x03};
  715. for(inti=0;i<=1;i++)
  716. pDoc->WriteComm(&send[i],1);
  717. Sleep(10000);
  718. }
  719. break;
  720. case(37)://sudujia
  721. {
  722. send1=0xb3;
  723. pDoc->WriteComm(&send1,1);
  724. }
  725. Sleep(1000);
  726. break;
  727. case(38)://yuandianjiyi
  728. send1=0x73;
  729. pDoc->WriteComm(&send1,1);
  730. break;
  731. case(39):
  732. send1=0xc3;
  733. pDoc->WriteComm(&send1,1);
  734. break;
  735. case(40):
  736. send1=0xf6;
  737. pDoc->WriteComm(&send1,1);
  738. break;
  739. case(41):
  740. send1=0x83;
  741. pDoc->WriteComm(&send1,1);
  742. break;
  743. case(42):
  744. send1=0x93;
  745. pDoc->WriteComm(&send1,1);
  746. break;
  747. case(43):
  748. //{
  749. //unsignedcharsend[2]={0x86,0x03};
  750. //for(inti=0;i<=1;i++)
  751. //pDoc->WriteComm(&send[i],1);
  752. //Sleep(4000);
  753. //}
  754. send1=0x86;
  755. pDoc->WriteComm(&send1,1);
  756. break;
  757. case(44)://sudujian
  758. {
  759. send1=0xe3;
  760. pDoc->WriteComm(&send1,1);
  761. }
  762. break;
  763. case(45):
  764. {
  765. send1=0x12;
  766. pDoc->WriteComm(&send1,1);
  767. }
  768. break;
  769. case(46):
  770. {
  771. send1=0x22;
  772. pDoc->WriteComm(&send1,1);
  773. }
  774. break;
  775. case(47)://danbuzaixian
  776. send1=0x13;
  777. pDoc->WriteComm(&send1,1);
  778. Sleep(4000);
  779. break;
  780. case(48)://zhouqizaixian
  781. send1=0x23;
  782. pDoc->WriteComm(&send1,1);
  783. Sleep(8000);
  784. break;
  785. case(49)://lianxuzaixian
  786. send1=0x33;
  787. pDoc->WriteComm(&send1,1);
  788. break;
  789. case(50):
  790. //send1=0x32;
  791. //pDoc->WriteComm(&send1,1);
  792. break;
  793. case(51):
  794. break;
  795. case(52):
  796. send1=0x43;
  797. pDoc->WriteComm(&send1,1);
  798. break;
  799. case(53):
  800. break;
  801. case(54):
  802. pDoc->OnSetupcomm();
  803. break;
  804. case(55):
  805. pDoc->OnOpencomm();
  806. break;
  807. default:
  808. pDoc->OnClosecomm();
  809. break;
  810. }
  811. }
  812. //voidCRobotView::OnButton3()
  813. //{
  814. //TODO:Addyourcontrolnotificationhandlercodehere
  815. //SendMessage(WM_USER+1002,10,0);
  816. //}
  817. voidCRobotView::Execute_1(unsignedchara,unsignedcharb,unsignedcharc,unsignedchard,inte)
  818. {
  819. CRobotDoc*pDoc=GetDocument();
  820. unsignedcharsend[6]={0x53,a,b,0x00,c,d};
  821. for(inti=0;i<=5;i++)
  822. pDoc->WriteComm(&send[i],1);
  823. Sleep(m_ndelay);
  824. }
  825. HBRUSHCRobotView::OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
  826. {
  827. HBRUSHhbr=CFormView::OnCtlColor(pDC,pWnd,nCtlColor);
  828. //TODO:ChangeanyattributesoftheDChere
  829. switch(nCtlColor)
  830. {
  831. caseCTLCOLOR_DLG:
  832. {
  833. //pDC->SetBkMode(TRANSPARENT);
  834. returnm_brush;//返加绿色刷子
  835. }
  836. caseCTLCOLOR_STATIC:
  837. {
  838. //返加绿色刷子
  839. //pDC->SetBkMode(TRANSPARENT);
  840. returnm_brush;
  841. }
  842. }
  843. //TODO:Returnadifferentbrushifthedefaultisnotdesired
  844. returnhbr;
  845. }
  846. voidCRobotView::home()
  847. {
  848. SendMessage(WM_USER+1002,32,0);
  849. SendMessage(WM_USER+1002,10,0);
  850. Sleep(1000);
  851. SendMessage(WM_USER+1002,33,0);
  852. SendMessage(WM_USER+1002,10,0);
  853. Sleep(1000);
  854. SendMessage(WM_USER+1002,34,0);
  855. SendMessage(WM_USER+1002,10,0);
  856. Sleep(1000);
  857. SendMessage(WM_USER+1002,35,0);
  858. SendMessage(WM_USER+1002,10,0);
  859. Sleep(1000);
  860. SendMessage(WM_USER+1002,36,0);
  861. SendMessage(WM_USER+1002,10,0);
  862. Sleep(1000);
  863. }
  864. LRESULTCRobotView::OnCommNotify(WPARAMwParam,LPARAMlParam)
  865. {
  866. unsignedcharbuf;
  867. CWnd*pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  868. CStringstr1,str2;
  869. CRobotDoc*pDoc=GetDocument();
  870. m_recflag=0;
  871. if(!pDoc->m_bConnected||
  872. (wParam&EV_RXCHAR)!=EV_RXCHAR)//是否是EV_RXCHAR事件?
  873. {
  874. SetEvent(pDoc->m_hPostMsgEvent);//允许发送下一个WM_COMMNOTIFY消息
  875. return0L;
  876. }
  877. nLength=pDoc->ReadComm(&buf,1);
  878. if(nLength)
  879. {
  880. //str1.Format("%d",buf);
  881. //m_edit1.SetSel(-1,0);
  882. //m_edit1.ReplaceSel(str1);//向编辑视图中插入收到的字符
  883. str2="正在执行命令,请稍后.....";
  884. pWnd->SetWindowText(str2);
  885. SendMessage(WM_USER+1003);
  886. }
  887. SetEvent(pDoc->m_hPostMsgEvent);//允许发送下一个WM_COMMNOTIFY消息
  888. return0L;
  889. }
  890. voidCRobotView::OnTimer(UINTnIDEvent)
  891. {
  892. //TODO:Addyourmessagehandlercodehereand/orcalldefault
  893. SendMessage(WM_USER+1002,100);
  894. CFormView::OnTimer(nIDEvent);
  895. }

文档类

  1. #include"stdafx.h"
  2. #include"robot.h"
  3. #include"SetupDlg.h"
  4. #include"robotDoc.h"
  5. #ifdef_DEBUG
  6. #definenewDEBUG_NEW
  7. #undefTHIS_FILE
  8. staticcharTHIS_FILE[]=__FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. //CRobotDoc
  12. IMPLEMENT_DYNCREATE(CRobotDoc,CDocument)
  13. BEGIN_MESSAGE_MAP(CRobotDoc,CDocument)
  14. //{{AFX_MSG_MAP(CRobotDoc)
  15. ON_COMMAND(ID_SETUPCOMM,OnSetupcomm)
  16. ON_COMMAND(ID_CLOSECOMM,OnClosecomm)
  17. ON_COMMAND(ID_OPENCOMM,OnOpencomm)
  18. ON_UPDATE_COMMAND_UI(ID_OPENCOMM,OnUpdateOpencomm)
  19. ON_UPDATE_COMMAND_UI(ID_CLOSECOMM,OnUpdateClosecomm)
  20. ON_COMMAND(ID_ANJIANCTRL,OnAnjianctrl)
  21. ON_UPDATE_COMMAND_UI(ID_ANJIANCTRL,OnUpdateAnjianctrl)
  22. ON_COMMAND(ID_VOICECTRL,OnVoicectrl)
  23. ON_UPDATE_COMMAND_UI(ID_VOICECTRL,OnUpdateVoicectrl)
  24. ON_COMMAND(ID_HELP,OnHelp)
  25. //}}AFX_MSG_MAP
  26. END_MESSAGE_MAP()
  27. /////////////////////////////////////////////////////////////////////////////
  28. //CRobotDocconstruction/destruction
  29. CRobotDoc::CRobotDoc()
  30. {
  31. //TODO:addone-timeconstructioncodehere
  32. m_bConnected=FALSE;
  33. m_pThread=NULL;
  34. m_nBaud=244;
  35. m_nDataBits=8;
  36. m_nParity=1;
  37. m_sPort="COM1";
  38. m_nStopBits=0;
  39. m_bctrlmodal=FALSE;
  40. m_uCurrentBtn=ID_CLOSECOMM;
  41. }
  42. CRobotDoc::~CRobotDoc()
  43. {
  44. if(m_bConnected)
  45. CloseConnection();
  46. //删除事件句柄
  47. if(m_hPostMsgEvent)
  48. CloseHandle(m_hPostMsgEvent);
  49. if(m_osRead.hEvent)
  50. CloseHandle(m_osRead.hEvent);
  51. if(m_osWrite.hEvent)
  52. CloseHandle(m_osWrite.hEvent);
  53. }
  54. BOOLCRobotDoc::OnNewDocument()
  55. {
  56. if(!CDocument::OnNewDocument())
  57. returnFALSE;
  58. //TODO:addreinitializationcodehere
  59. //(SDIdocumentswillreusethisdocument)
  60. //为WM_COMMNOTIFY消息创建事件对象,手工重置,初始化为有信号的
  61. if((m_hPostMsgEvent=CreateEvent(NULL,TRUE,TRUE,NULL))==NULL)
  62. returnFALSE;
  63. memset(&m_osRead,0,sizeof(OVERLAPPED));
  64. memset(&m_osWrite,0,sizeof(OVERLAPPED));
  65. //为重叠读创建事件对象,手工重置,初始化为无信号的
  66. if((m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL))==NULL)
  67. returnFALSE;
  68. //为重叠写创建事件对象,手工重置,初始化为无信号的
  69. if((m_osWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL))==NULL)
  70. returnFALSE;
  71. returnTRUE;
  72. }
  73. /////////////////////////////////////////////////////////////////////////////
  74. //CRobotDocserialization
  75. voidCRobotDoc::Serialize(CArchive&ar)
  76. {
  77. if(ar.IsStoring())
  78. {
  79. //TODO:addstoringcodehere
  80. }
  81. else
  82. {
  83. //TODO:addloadingcodehere
  84. }
  85. }
  86. /////////////////////////////////////////////////////////////////////////////
  87. //CRobotDocdiagnostics
  88. #ifdef_DEBUG
  89. voidCRobotDoc::AssertValid()const
  90. {
  91. CDocument::AssertValid();
  92. }
  93. voidCRobotDoc::Dump(CDumpContext&dc)const
  94. {
  95. CDocument::Dump(dc);
  96. }
  97. #endif//_DEBUG
  98. /////////////////////////////////////////////////////////////////////////////
  99. //CRobotDoccommands
  100. voidCRobotDoc::OnSetupcomm()
  101. {
  102. //TODO:Addyourcommandhandlercodehere
  103. CSetupDlgdlg;
  104. CStringstr;
  105. dlg.m_bConnected=m_bConnected;
  106. dlg.m_sPort=m_sPort;
  107. str.Format("%d",m_nBaud);
  108. dlg.m_sBaud=str;
  109. str.Format("%d",m_nDataBits);
  110. dlg.m_sDataBits=str;
  111. dlg.m_nParity=m_nParity;
  112. dlg.m_nStopBits=m_nStopBits;
  113. //dlg.m_nFlowCtrl=m_nFlowCtrl;
  114. //dlg.m_bEcho=m_bEcho;
  115. //dlg.m_bNewLine=m_bNewLine;
  116. if(dlg.DoModal()==IDOK)
  117. {
  118. m_sPort=dlg.m_sPort;
  119. m_nBaud=atoi(dlg.m_sBaud);
  120. m_nDataBits=atoi(dlg.m_sDataBits);
  121. m_nParity=dlg.m_nParity;
  122. m_nStopBits=dlg.m_nStopBits;
  123. //m_nFlowCtrl=dlg.m_nFlowCtrl;
  124. //m_bEcho=dlg.m_bEcho;
  125. //m_bNewLine=dlg.m_bNewLine;
  126. if(m_bConnected)
  127. if(!ConfigConnection())
  128. AfxMessageBox("Can'trealizethesettings!");
  129. }
  130. }
  131. voidCRobotDoc::OnClosecomm()
  132. {
  133. //TODO:Addyourcommandhandlercodehere
  134. m_uCurrentBtn=ID_CLOSECOMM;
  135. CloseConnection();
  136. }
  137. voidCRobotDoc::OnOpencomm()
  138. {
  139. //TODO:Addyourcommandhandlercodehere
  140. m_uCurrentBtn=ID_OPENCOMM;
  141. if(!OpenConnection())
  142. AfxMessageBox("Can'topenconnection");
  143. }
  144. voidCRobotDoc::OnUpdateOpencomm(CCmdUI*pCmdUI)
  145. {
  146. //TODO:AddyourcommandupdateUIhandlercodehere
  147. //pCmdUI->Enable(!m_bConnected);
  148. pCmdUI->SetRadio(pCmdUI->m_nID==m_uCurrentBtn);
  149. }
  150. voidCRobotDoc::OnUpdateClosecomm(CCmdUI*pCmdUI)
  151. {
  152. //TODO:AddyourcommandupdateUIhandlercodehere
  153. //pCmdUI->Enable(m_bConnected);
  154. pCmdUI->SetRadio(pCmdUI->m_nID==m_uCurrentBtn);
  155. }
  156. voidCRobotDoc::OnAnjianctrl()
  157. {
  158. //TODO:Addyourcommandhandlercodehere
  159. }
  160. voidCRobotDoc::OnUpdateAnjianctrl(CCmdUI*pCmdUI)
  161. {
  162. //TODO:AddyourcommandupdateUIhandlercodehere
  163. }
  164. voidCRobotDoc::OnVoicectrl()
  165. {
  166. //TODO:Addyourcommandhandlercodehere
  167. //WinExec(NULL,NULL,_T("dutty.exe"),NULL,_T("D://ProgramFiles//Dutty//Dutty.exe"),NULL);
  168. WinExec(_T("D://ProgramFiles//Dutty//Dutty.exe"),SW_SHOW);
  169. m_bctrlmodal=TRUE;
  170. //STARTUPINFOstinfo;//启动窗口的信息
  171. //PROCESSINFOprocinfo;//进程的信息
  172. //CreateProcess(NULL,_T("dutty.exe"),NULL,NULL.FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&stinfo,&procinfo);
  173. }
  174. voidCRobotDoc::OnUpdateVoicectrl(CCmdUI*pCmdUI)
  175. {
  176. //TODO:AddyourcommandupdateUIhandlercodehere
  177. pCmdUI->Enable(!m_bctrlmodal);
  178. }
  179. UINTCommProc(LPVOIDpParam)
  180. {
  181. OVERLAPPEDos;
  182. DWORDdwMask,dwTrans;
  183. COMSTATComStat;
  184. DWORDdwErrorFlags;
  185. CRobotDoc*pDoc=(CRobotDoc*)pParam;
  186. memset(&os,0,sizeof(OVERLAPPED));
  187. os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
  188. if(os.hEvent==NULL)
  189. {
  190. AfxMessageBox("Can'tcreateeventobject!");
  191. return(UINT)-1;
  192. }
  193. while(pDoc->m_bConnected)
  194. {
  195. ClearCommError(pDoc->m_hCom,&dwErrorFlags,&ComStat);
  196. if(ComStat.cbInQue)//查询输入缓冲区中是否有字符,若有
  197. {
  198. //等待WM_COMMNOTIFY消息被处理完
  199. WaitForSingleObject(pDoc->m_hPostMsgEvent,INFINITE);
  200. ResetEvent(pDoc->m_hPostMsgEvent);
  201. PostMessage(pDoc->m_hTermWnd,WM_COMMNOTIFY,EV_RXCHAR,0);
  202. //通知视图
  203. continue;
  204. }
  205. dwMask=0;
  206. if(!WaitCommEvent(pDoc->m_hCom,&dwMask,&os))//重叠操作
  207. {
  208. //通信事件
  209. if(GetLastError()==ERROR_IO_PENDING)
  210. //无限等待重叠操作结果
  211. GetOverlappedResult(pDoc->m_hCom,&os,&dwTrans,TRUE);
  212. else
  213. {
  214. CloseHandle(os.hEvent);
  215. return(UINT)-1;
  216. }
  217. }
  218. }
  219. CloseHandle(os.hEvent);
  220. return0;
  221. }
  222. BOOLCRobotDoc::OpenConnection()
  223. {
  224. COMMTIMEOUTSTimeOuts;
  225. POSITIONfirstViewPos;
  226. CView*pView;
  227. firstViewPos=GetFirstViewPosition();
  228. pView=GetNextView(firstViewPos);
  229. m_hTermWnd=pView->GetSafeHwnd();
  230. if(m_bConnected)
  231. returnFALSE;
  232. m_hCom=CreateFile(m_sPort,GENERIC_READ|GENERIC_WRITE,0,NULL,
  233. OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
  234. NULL);//重叠方式
  235. if(m_hCom==INVALID_HANDLE_VALUE)
  236. //AfxMessageBox("dfhksdjfhsjkfhks",MB_OK);
  237. returnFALSE;
  238. SetupComm(m_hCom,1024,1024);
  239. SetCommMask(m_hCom,EV_RXCHAR);///////////////////!!!!!!!!!!!
  240. //把间隔超时设为最大,把总超时设为0将导致ReadFile立即返回并完成操作
  241. TimeOuts.ReadIntervalTimeout=MAXDWORD;
  242. TimeOuts.ReadTotalTimeoutMultiplier=0;
  243. TimeOuts.ReadTotalTimeoutConstant=0;
  244. /*设置写超时以指定WriteComm成员函数中的
  245. GetOverlappedResult函数的等待时间*/
  246. TimeOuts.WriteTotalTimeoutMultiplier=50;
  247. TimeOuts.WriteTotalTimeoutConstant=2000;
  248. SetCommTimeouts(m_hCom,&TimeOuts);
  249. if(ConfigConnection())
  250. {
  251. m_pThread=AfxBeginThread(CommProc,this,THREAD_PRIORITY_NORMAL,
  252. 0,CREATE_SUSPENDED,NULL);//创建并挂起线程
  253. if(m_pThread==NULL)
  254. {
  255. CloseHandle(m_hCom);
  256. returnFALSE;
  257. }
  258. else
  259. {
  260. m_bConnected=TRUE;
  261. m_pThread->ResumeThread();//恢复线程运行
  262. }
  263. }
  264. else
  265. {
  266. CloseHandle(m_hCom);
  267. returnFALSE;
  268. }
  269. returnTRUE;
  270. }
  271. voidCRobotDoc::CloseConnection()
  272. {
  273. if(!m_bConnected)return;
  274. m_bConnected=FALSE;
  275. //结束CommProc线程中WaitSingleObject函数的等待
  276. SetEvent(m_hPostMsgEvent);
  277. //结束CommProc线程中WaitCommEvent的等待
  278. SetCommMask(m_hCom,0);
  279. //等待辅助线程终止
  280. WaitForSingleObject(m_pThread->m_hThread,INFINITE);
  281. m_pThread=NULL;
  282. CloseHandle(m_hCom);
  283. }
  284. BOOLCRobotDoc::ConfigConnection()///设置DCB
  285. {
  286. DCBdcb;
  287. if(!GetCommState(m_hCom,&dcb))
  288. returnFALSE;
  289. dcb.fBinary=TRUE;
  290. dcb.BaudRate=m_nBaud;//波特率
  291. dcb.ByteSize=m_nDataBits;//每字节位数
  292. dcb.fParity=TRUE;
  293. switch(m_nParity)//校验设置
  294. {
  295. case0:dcb.Parity=NOPARITY;
  296. break;
  297. case1:dcb.Parity=EVENPARITY;
  298. break;
  299. case2:dcb.Parity=ODDPARITY;
  300. break;
  301. default:;
  302. }
  303. switch(m_nStopBits)//停止位
  304. {
  305. case0:dcb.StopBits=ONESTOPBIT;
  306. break;
  307. case1:dcb.StopBits=ONE5STOPBITS;
  308. break;
  309. case2:dcb.StopBits=TWOSTOPBITS;
  310. break;
  311. default:;
  312. }
  313. //硬件流控制设置
  314. //dcb.fOutxCtsFlow=m_nFlowCtrl==1;
  315. //dcb.fRtsControl=m_nFlowCtrl==1?RTS_CONTROL_HANDSHAKE:RTS_CONTROL_ENABLE;
  316. //XON/XOFF流控制设置
  317. //dcb.fInX=dcb.fOutX=m_nFlowCtrl==2;
  318. //dcb.XonChar=XON;
  319. //dcb.XoffChar=XOFF;
  320. //dcb.XonLim=50;
  321. //dcb.XoffLim=50;
  322. returnSetCommState(m_hCom,&dcb);
  323. }
  324. DWORDCRobotDoc::ReadComm(unsignedchar*buf,DWORDdwLength)
  325. {
  326. DWORDlength=0;
  327. COMSTATComStat;
  328. DWORDdwErrorFlags;
  329. ClearCommError(m_hCom,&dwErrorFlags,&ComStat);//清除错误标志
  330. length=min(dwLength,ComStat.cbInQue);
  331. ReadFile(m_hCom,buf,length,&length,&m_osRead);//将指定数量的字符从串行口输出
  332. returnlength;
  333. }
  334. //将指定数量的字符从串行口输出
  335. DWORDCRobotDoc::WriteComm(unsignedchar*buf,DWORDdwLength)
  336. {
  337. BOOLfState;
  338. DWORDlength=dwLength;
  339. COMSTATComStat;
  340. DWORDdwErrorFlags;
  341. ClearCommError(m_hCom,&dwErrorFlags,&ComStat);//清除错误标志
  342. fState=WriteFile(m_hCom,buf,length,&length,&m_osWrite);
  343. if(!fState){
  344. if(GetLastError()==ERROR_IO_PENDING)
  345. {
  346. GetOverlappedResult(m_hCom,&m_osWrite,&length,TRUE);//等待
  347. }
  348. else
  349. length=0;
  350. }
  351. returnlength;
  352. }
  353. //工作者线程,负责监视串行口
  354. voidCRobotDoc::OnHelp()
  355. {
  356. //TODO:Addyourcommandhandlercodehere
  357. //ShellExecute(NULL,NULL,_T("Jqrhelp.chm"),NULL,_T("e://机器人"),NULL);
  358. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics