Fw: [問題] RS232 傳輸不穩定
※ [本文轉錄自 LinuxDev 看板 #1ImcLpA8 ]
作者: nec716 (尼莫) 看板: LinuxDev
標題: [問題] RS232 傳輸不穩定
時間: Tue Dec 31 14:34:22 2013
最近在嘗試使用RS232 發送指令與設備溝通
找了一些網路上的範例與資料
並且利用兩條 "USB 轉 RS232"溝通兩個VM
使用cutecom 來檢查發送結果
程式目前已經擁有發送指令的功能
但是在傳送上會有不太穩定的狀況
測試的角色與環境有以下幾種
1. main.cpp (VMplayer with Ubuntu 13.10) VM_A
2. cutecom (VMplayer with Ubuntu 13.10) VM_A
3. cutecom (VMplayer with Ubuntu 13.10) VM_B
4. 廠商的測試程式 (Win 8.1)
5. 欲溝通的設備
目前 2 3 4 5 之間的相互溝通都沒有問題
但是使用我寫出來的程式(1) 則有時候會失敗
接收端會接收不到資料
當1發生失敗後 再使用2便無法與 3 4 5溝通
必須拔除USB後 甚至將VM重開2 才能正常與 3 4 5溝通
因此猜測是否是程式流程上 或是 設定上有什麼問題
麻煩各位前輩幫我看看
程式碼如下
int main()
{
string s = "10 02 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 10 03 02 ";
string cmdStr;
clearStrSpace(&s, &cmdStr);
if (!cmdCheck(&cmdStr))
exit(-1);
unsigned char *hexCmd = new unsigned char[cmdStr.length()+1];
strToHexCmd(&cmdStr, hexCmd, cmdStr.length());
//以上為字串處理 將字串轉為hex 處理結果存於hexCmd中
int fp, res;
struct termios oldtio,newtio;
fp=open(MODEMDEVICE ,O_RDWR|O_NDELAY|O_NOCTTY);
if (fp <0) { perror (MODEMDEVICE); exit(-1);}
tcgetattr(fp,&oldtio); // 儲存目前的序列埠設定。
bzero(&newtio, sizeof(newtio)); // 清除結構體以放入新的序列埠設定值。
newtio.c_cflag=BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = 0;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
tcflush(fp,TCIOFLUSH); // 清除發送緩衝區的資料
tcsetattr(fp,TCSANOW,&newtio); // 啟動序列埠的設定。
unsigned char buf[2];
for(int i = 0; i < cmdStr.length()/2; i++)
{
buf[0] = hexCmd[i];
res += write(fp, buf, 1);
usleep(1);
}
cout << "Res =" << res << endl;
tcsetattr(fp,TCSANOW,&oldtio); // 回存舊的序列埠設定值
close(fp); // 關閉MODEMDEVICE
cout << "Done" << endl;
return 0;
}
以上麻煩各位前輩幫我看看
程式流程 或是 設定上有什麼問題
另外 在網路上的程式碼中
我發現有些程式這兩個動作
tcsetattr(fp,TCSANOW,&oldtio);
close(fp);
有些是先做close 才回復設定
有疑問的地方在於 fp做了close之後
不是應該沒有意義了嗎
為什麼還能夠做tcsetattr呢
問題有點多 在這邊先謝謝各位前輩了╭(─╴╴─)╮
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.171.189
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: nec716 (114.32.171.189), 時間: 12/31/2013 15:04:16
→
12/31 17:25, , 1F
12/31 17:25, 1F
→
12/31 17:27, , 2F
12/31 17:27, 2F
→
12/31 17:28, , 3F
12/31 17:28, 3F
→
12/31 17:30, , 4F
12/31 17:30, 4F
推
12/31 23:12, , 5F
12/31 23:12, 5F
→
12/31 23:12, , 6F
12/31 23:12, 6F
→
01/02 09:09, , 7F
01/02 09:09, 7F
推
01/02 22:34, , 8F
01/02 22:34, 8F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章