自己寫得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 你用這個程式試看看吧,看看送出去的碼跟你送的是否相同 2# crazyking
我剛剛開啟來完全不會用 @@
鮑率部份跟我馬達附贈程式中的不同
我想知道我步驟是否有錯?????? 鮑率程式中郁設是19200,n,8,1,你可以先用AI馬達的工具程式修改馬達鮑率,然後可以在開啟通訊埠下方輸入是用哪個COM PORT,如果是COM1 就輸入1,然後按下開啟通訊埠就可以操作
在操作命令那頁,你可以先選ID(下拉式選單),然後點選上方任一功能,ID後方的方塊會顯示出送出的HEX值
你可以用來確認一下跟你送的資料一不一樣,如果馬達有回傳,也會顯示
你再試看看有問題再說吧 4# crazyking
剛看過送的資料不一樣 你的是16進位 我是用10進位
因為我是看學長的VB程式去改寫C的
剛用你給的程式跑過後,馬達還是沒動
是我不會用吧!!!但裡頭是使用16進位方式傳送資料
我先去用16進位丟看看 其實你要先確認馬達的鮑率跟ID設定正確,我用的馬達是701,所以你也要確認馬達是否相同,另外你可以找一下RS232的傳輸軟體,然後手動送資料看看,附上一個RS232軟體你可以先手動測試看看 6# crazyking
昨天測試結果失敗 *_*|||
你的rs232-ai馬達程式是自己撰寫的嗎!?
我猜想是不是連線的部分 com1->板子 的部分是不是我忽略了 程式是自己寫的,也經過許多次的測試與使用,AI馬達的RS232是TTL準位,跟PC連需要經過MAX232之類的IC轉換準位 8# crazyking
剛完看你的說法
似乎我漏掉很多步驟@@
我比較想先練習看看 用簡單的程式碼啟動馬達
現在卡關了..首先我開啟COM1也設定好COM1
(9600.8.0.1)
下一步用WriteFile(hCom,head,Data,&checksum,NULL);丟出字串
//用CreateFile 獲得的文件標題,
//輸出緩衝區的第一個位置,
//要求輸出的字節數,
//實際輸出的字節數,
//重操作方式數據的地址
是不是我只丟到COM1里頭馬達並沒有接收到@@ 既然要一步一步來,那我建議你先用我第二次的Terminal.EXE 先送資料看看,如果要驗證送出去的對不對,就把com port的2,3兩隻腳短路,看看資料對不對,然後如果要測試馬達,除了信號準位跟RX,TX方向要對,也可以用
Terminal.EXE 試著送看看,這樣才能找到問題 10# crazyking
我剛在說明書上有提到RX,TX
但英文不強 實在有看沒有懂
只能看圖猜故事 哈
我想知道RX,TX這兩個是??????
是不是寫入跟輸出??? 10# crazyking
我剛在說明書上有提到RX,TX
RX -->接收PIN
TX -->傳送PIN
如果妳對於訊號有問題.最簡單的方法.直接接到視波器上.看波型是否會上下挑動(在送訊號時)
頁:
[1]