小弟在某寶買了數字舵機及其控制板,利用usb轉ttl串口控制,根據賣家提供的協議小弟在vs2010撰寫了一個簡單的c++的16進制串口發送程式如下。
#include<Windows.h>
#include<iostream>
int main()
{
HANDLE hcom;
hcom=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hcom==INVALID_HANDLE_VALUE)
{
return -1;
}
SetupComm(hcom,1024,1024);
DCB dcb;
GetCommState(hcom,&dcb);
dcb.BaudRate=9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=1;
SetCommState(hcom,&dcb);
char data[]={0x55,0x55,0x08,0x03,0x01,0xE8,0x03,0x01,0xD0,0x07};
DWORD dwWrittenLen=0;
if(!WriteFile(hcom,data,8,&dwWrittenLen,NULL))
{
return -1;
}
CloseHandle(hcom);
return 0;
}
利用此發送程式發送無法控制舵機
而選擇串口除錯工具發送資料卻可以達到控制效果
如下圖所示

兩者發送的資料都是根據協議來的,都是正確的,相關設定一樣為什么會出現在vs2010上無法達到串口控制效果。希望得到各位解答
uj5u.com熱心網友回復:
無法達到控制效果的意思,舵機沒有任何回應,usb轉ttL模塊上顯示已有資料發出。uj5u.com熱心網友回復:
你確定,你自己寫的程式,發出的16進制資料是正確的????從編輯框中,獲取的是字串,你確定,你自己轉換后的資料是對的????
uj5u.com熱心網友回復:
指令都是按照他們的協議寫的,下圖是他們協議截圖
,按控制板的反饋來說,確實應該資料發錯了。這樣寫char data[]={0x55,0x55,0x08,0x03,0x01,0xE8,0x03,0x01,0xD0,0x07};是有問題的嗎?
uj5u.com熱心網友回復:
程式發的資料和串口的資料不一樣,uj5u.com熱心網友回復:
串口助手上面是已經勾選16進制的。所以只發了資料部分。在vs2010上加了0x。串口助手和vs2010發送資料不同,但都是滿足協議要求寫的。uj5u.com熱心網友回復:
if(!WriteFile(hcom,data,8,&dwWrittenLen,NULL)) 應該是10個位元組吧if(!WriteFile(hcom,data,10,&dwWrittenLen,NULL)) 試試看
uj5u.com熱心網友回復:
小心駛得萬年船。uj5u.com熱心網友回復:
推薦使用portmon軟體輔助除錯串口通信程式。uj5u.com熱心網友回復:
各位,在vs2010上的程式編譯出現上面這個警告資訊。
uj5u.com熱心網友回復:
0x55,0x55,0x08,0x03,0x01,0xE8,0x03,0x01,0xD0,0x07};你這個資料和串口里的資料都不一樣
uj5u.com熱心網友回復:
把接收線和發送線短接,就好了,看看發出去的是什么資料uj5u.com熱心網友回復:
發送資料長度和資料不一致吧轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/8966.html
標籤:網絡編程
上一篇:MFC改變控制元件顏色
