[問題] RS232 傳輸不穩定

看板LinuxDev作者 (尼莫)時間11年前 (2013/12/31 14:34), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/2 (看更多)
最近在嘗試使用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

01/05 14:11, , 1F
個人經驗這種線好壞差很多,別省小錢
01/05 14:11, 1F

01/05 14:12, , 2F
以前DEBUG半天換條線啥事都沒有,先確定線是OK的
01/05 14:12, 2F

01/06 08:23, , 3F
usb轉rs232的還是FTDI的晶片比較穩定
01/06 08:23, 3F
文章代碼(AID): #1ImcLpA8 (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #1ImcLpA8 (LinuxDev)