S013078 發表於 2009-4-7 23:54:17

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

本帖最後由 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

crazyking 發表於 2009-4-8 14:06:11

你用這個程式試看看吧,看看送出去的碼跟你送的是否相同

S013078 發表於 2009-4-8 16:15:27

2# crazyking


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


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

我想知道我步驟是否有錯??????

crazyking 發表於 2009-4-8 16:23:49

鮑率程式中郁設是19200,n,8,1,你可以先用AI馬達的工具程式修改馬達鮑率,然後可以在開啟通訊埠下方輸入是用哪個COM PORT,如果是COM1 就輸入1,然後按下開啟通訊埠就可以操作
在操作命令那頁,你可以先選ID(下拉式選單),然後點選上方任一功能,ID後方的方塊會顯示出送出的HEX值
你可以用來確認一下跟你送的資料一不一樣,如果馬達有回傳,也會顯示
你再試看看有問題再說吧

S013078 發表於 2009-4-8 17:23:14

4# crazyking


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

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

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

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

我先去用16進位丟看看

crazyking 發表於 2009-4-8 17:54:00

其實你要先確認馬達的鮑率跟ID設定正確,我用的馬達是701,所以你也要確認馬達是否相同,另外你可以找一下RS232的傳輸軟體,然後手動送資料看看,附上一個RS232軟體你可以先手動測試看看

S013078 發表於 2009-4-9 16:11:10

6# crazyking

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


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


我猜想是不是連線的部分 com1->板子 的部分是不是我忽略了

crazyking 發表於 2009-4-9 16:19:13

程式是自己寫的,也經過許多次的測試與使用,AI馬達的RS232是TTL準位,跟PC連需要經過MAX232之類的IC轉換準位

S013078 發表於 2009-4-9 20:10:44

8# crazyking

剛完看你的說法

似乎我漏掉很多步驟@@


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

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

下一步用WriteFile(hCom,head,Data,&checksum,NULL);丟出字串
         //用CreateFile 獲得的文件標題,
          //輸出緩衝區的第一個位置,
      //要求輸出的字節數,
       //實際輸出的字節數,
      //重操作方式數據的地址                                          
是不是我只丟到COM1里頭馬達並沒有接收到@@

crazyking 發表於 2009-4-9 20:29:29

既然要一步一步來,那我建議你先用我第二次的Terminal.EXE 先送資料看看,如果要驗證送出去的對不對,就把com port的2,3兩隻腳短路,看看資料對不對,然後如果要測試馬達,除了信號準位跟RX,TX方向要對,也可以用
Terminal.EXE 試著送看看,這樣才能找到問題

S013078 發表於 2009-4-9 23:16:34

10# crazyking

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


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


只能看圖猜故事 哈


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


是不是寫入跟輸出???

yase 發表於 2009-6-2 22:51:08

10# crazyking

我剛在說明書上有提到RX,TX
RX -->接收PIN
TX -->傳送PIN
如果妳對於訊號有問題.最簡單的方法.直接接到視波器上.看波型是否會上下挑動(在送訊號時)
頁: [1]
查看完整版本: 自己寫得C控制AI馬達程式