Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 8800|回復: 11
打印 上一主題 下一主題

自己寫得C控制AI馬達程式

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-4-7 23:54:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 S013078 於 2009-4-7 23:56 編輯

#include <windows.h>
#include <stdio.h>
#include <rs232.h>
int main(int argc, char *argv[])
{
       DCB dcb;
       HANDLE hCom;//開檔案  
       BOOL fSuccess;//bool=0.1
       //DWORD nBytesRead;//雙字元
       COMSTAT cs;//com1狀態
       char *head="255";
       unsigned long checksum=3,Data=32,Data2=125,Data3=93;
       char *pcCommPort = "COM1";
      
      hCom = CreateFile(pcCommPort,//開啟COM1
              GENERIC_READ | GENERIC_WRITE,//允許讀跟寫
              0, //通訊設備必須以獨佔方式打開
              NULL,//無安全屬性
              OPEN_EXISTING,  //通訊設備以存在
              0,
              NULL );
                       
   if (hCom == INVALID_HANDLE_VALUE) //違法的值
     
      {
        printf ("開啟錯誤");
        system("pause");
        return(1) ;
       }
       fSuccess = GetCommState(hCom, &dcb);   
        if (!fSuccess)   
       {           
        printf ("GetCommState failed with error %d.\n", GetLastError()); //Handle the error.
         return (2);
           }
     
      fSuccess = GetCommState(hCom, &dcb);//取得com1狀態
      
      dcb.BaudRate = CBR_9600; // 傳輸率
      dcb.ByteSize = 8; // 資料位元長度
      dcb.Parity = NOPARITY; // 沒有偶同位元
      dcb.StopBits = ONESTOPBIT; // 一個停止位元
               
    if (!fSuccess)
       {
         printf ("通訊設定錯誤");
         system("pause");
         return (3);
         }
      //ReadFile(hCom,BufferofData, cs.cbInQue, &nBytesRead, NULL);
            
      WriteFile(hCom,head,Data,&checksum,NULL);
      WriteFile(hCom,head,Data2,&checksum,NULL);
      WriteFile(hCom,head,Data3,&checksum,NULL);

     //用CreateFile 獲得的文件標題,
     //輸出緩衝區的第一個位置,
     //要求輸出的字節數,
     //實際輸出的字節數,
     //重操作方式數據的地址
      system("pause");
      }

編譯可以通過但是不會動,想知道錯在哪
馬達的記憶體位址0XFF=255
馬達的編號是0
速度是1
角度是125
2#
發表於 2009-4-8 14:06:11 | 只看該作者
你用這個程式試看看吧,看看送出去的碼跟你送的是否相同

rs232-AI.rar

232.62 KB, 下載次數: 2160

3#
 樓主| 發表於 2009-4-8 16:15:27 | 只看該作者
2# crazyking


我剛剛開啟來完全不會用 @@


鮑率部份跟我馬達附贈程式中的不同

我想知道我步驟是否有錯??????
4#
發表於 2009-4-8 16:23:49 | 只看該作者
鮑率程式中郁設是19200,n,8,1,你可以先用AI馬達的工具程式修改馬達鮑率,然後可以在開啟通訊埠下方輸入是用哪個COM PORT,如果是COM1 就輸入1,然後按下開啟通訊埠就可以操作
在操作命令那頁,你可以先選ID(下拉式選單),然後點選上方任一功能,ID後方的方塊會顯示出送出的HEX值
你可以用來確認一下跟你送的資料一不一樣,如果馬達有回傳,也會顯示
你再試看看有問題再說吧
5#
 樓主| 發表於 2009-4-8 17:23:14 | 只看該作者
4# crazyking


剛看過送的資料不一樣 你的是16進位 我是用10進位

因為我是看學長的VB程式去改寫C的

剛用你給的程式跑過後,馬達還是沒動

是我不會用吧!!!但裡頭是使用16進位方式傳送資料

我先去用16進位丟看看
6#
發表於 2009-4-8 17:54:00 | 只看該作者
其實你要先確認馬達的鮑率跟ID設定正確,我用的馬達是701,所以你也要確認馬達是否相同,另外你可以找一下RS232的傳輸軟體,然後手動送資料看看,附上一個RS232軟體你可以先手動測試看看

Terminal.EXE

332 KB, 下載次數: 1859

7#
 樓主| 發表於 2009-4-9 16:11:10 | 只看該作者
6# crazyking

昨天測試結果失敗 *_*|||


你的rs232-ai馬達程式是自己撰寫的嗎!?


我猜想是不是連線的部分 com1->板子 的部分是不是我忽略了
8#
發表於 2009-4-9 16:19:13 | 只看該作者
程式是自己寫的,也經過許多次的測試與使用,AI馬達的RS232是TTL準位,跟PC連需要經過MAX232之類的IC轉換準位
9#
 樓主| 發表於 2009-4-9 20:10:44 | 只看該作者
8# crazyking

剛完看你的說法

似乎我漏掉很多步驟@@


我比較想先練習看看 用簡單的程式碼啟動馬達

現在卡關了..首先我開啟COM1也設定好COM1
(9600.8.0.1)

下一步用WriteFile(hCom,head,Data,&checksum,NULL);丟出字串
           //用CreateFile 獲得的文件標題,
          //輸出緩衝區的第一個位置,
        //要求輸出的字節數,
       //實際輸出的字節數,
      //重操作方式數據的地址                                          
是不是我只丟到COM1里頭馬達並沒有接收到@@
10#
發表於 2009-4-9 20:29:29 | 只看該作者
既然要一步一步來,那我建議你先用我第二次的Terminal.EXE 先送資料看看,如果要驗證送出去的對不對,就把com port的2,3兩隻腳短路,看看資料對不對,然後如果要測試馬達,除了信號準位跟RX,TX方向要對,也可以用
Terminal.EXE 試著送看看,這樣才能找到問題
11#
 樓主| 發表於 2009-4-9 23:16:34 | 只看該作者
10# crazyking

我剛在說明書上有提到RX,TX


但英文不強 實在有看沒有懂


只能看圖猜故事 哈


我想知道RX,TX這兩個是??????


是不是寫入跟輸出???
12#
發表於 2009-6-2 22:51:08 | 只看該作者
[quote] 10# crazyking  

我剛在說明書上有提到RX,TX
RX -->接收PIN
TX -->傳送PIN
如果妳對於訊號有問題.最簡單的方法.直接接到視波器上.看波型是否會上下挑動(在送訊號時)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-24 10:15 , Processed in 0.193251 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表