老地方冰果室交流區

歡迎冰果室讀者在此交流
現在的時間是 08/22/2019 3:04 pm

所有顯示的時間為 UTC + 8 小時




發表新文章 回覆主題  [ 29 篇文章 ]  前往頁數 上一頁  12
發表人 內容
 文章主題 :
文章發表於 : 05/22/2008 5:41 pm 
離線
新生訓練中

註冊時間: 09/28/2005 1:11 am
文章: 12
rlong 寫:
如果電腦都沒出現錯誤訊息那就要檢查硬體接線了

用示波器檢查輸出端是否有訊號輸出?

輸出的 2,3,5 腳是否接到輸入的 3,2,5 腳?

建議參考Apple的範例,執行一下

kernResult = FindModems(&serialPortIterator);
result = GetModemPath(serialPortIterator);
IOObjectRelease(serialPortIterator); // Release the iterator.

以取得正確的 Path 並且確認他們的存在,才去 OpenSerialPort( )。


各位先進你好,小弟目前是使用 KeySpan USA19-HS,在使用 Apple sample code 取得 path 時,取到的結果是
Modem found with BSD path: /dev/cu.Bluetooth-Modem
Error opening serial port /dev/cu.Bluetooth-Modem - Resource busy(16).
但是我要用的 path 應該要是 /dev/tty.KeySerial1 ,這是 KeySpan 的公用程式帶出來的路徑,這該怎麼解決呢?

:roll:


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 05/22/2008 6:11 pm 
離線
新生訓練中

註冊時間: 09/28/2005 1:11 am
文章: 12
Dannier 寫:
謝謝!

已經解決了因為我的RS232接腳接錯了...真不好意思

可是問題又來了

我把程式寫成cocoa後發現

我不能用while loop 因為這樣彩球會狂轉 久了就變成沒有回應了

請問是用 startPeriodicEvents 嗎? 可是我不知道要怎麼利用

我對cocoa的event還不是很了解

還是有別的方法可以讓cocoa 程式可以一直做某件事而不會hang住

抱歉因為我對 cocoa 的知識也很一知半解

感謝高手的指點!!


我參考了Dannier 大大的 code , 再加上 NSTimer 目前有連到 serial port 上,
但是讀到的資料卻是錯的,可以請各位幫我看看問題在哪嗎??

連線條件 : 9600,7,N,2,Non-flow control

int fd, res;
struct termios oldtio, newtio;
char buf[256];

printf("Start Open Serial ...\n");
fd = open(RS232Path, O_RDWR|O_NOCTTY|O_NONBLOCK);

if (fd < 0)
printf("Serial Open Fail...\n");
perror(RS232Path);
serialopen = FALSE;
exit(1);
}
else {
printf("Serial Open OK ...\n");

tcgetattr(fd, &oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BaudRate|CS7|CLOCAL|CREAD|HUPCL|CSTOPB;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = ICANON;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
serialopen = TRUE;

printf("Reading...\n");
}

- (void) handleTimer: (NSTimer *) timer
{

int xx;
printf("Timer Run.....\n");

if (serialopen) {
res = read(fd, buf, 256);
buf[res]=0;

printf("res=%d buf=%s\n", res, buf);

for (xx=0; xx<res; xx++)
printf("res=%d,buf=%x\n", xx, buf[xx]);

if (buf[0] == 0) printf("Empty! ");

for (xx=0; xx<256; xx++)
buf[xx]=0;
}
}

*********** Debug view *************
Timer Run.....
res=48 buf=б\240\263\261\261\273\263\266\263\273\263\262\256\262\215б\240\263\261\261\273\263\266\263\273\263\262\256\262\215б\240\263\261\261\273\263\266\262\273\263\262\256\262\215
res=0,buf=ffffffd0
res=1,buf=ffffffb1
res=2,buf=ffffffa0
res=3,buf=ffffffb3
res=4,buf=ffffffb1
res=5,buf=ffffffb1
res=6,buf=ffffffbb
res=7,buf=ffffffb3
res=8,buf=ffffffb6
.......
***********************************
以 ZTerm 獲得的正確的資料是 P1 311;363;32.1 這種格式~


:?


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 05/23/2008 9:28 am 
離線
嗜冰客
頭像

註冊時間: 04/30/2001 1:01 am
文章: 1530
來自: 新竹
KK Chang 寫:
各位先進你好,小弟目前是使用 KeySpan USA19-HS,在使用 Apple sample code 取得 path 時,取到的結果是
Modem found with BSD path: /dev/cu.Bluetooth-Modem
Error opening serial port /dev/cu.Bluetooth-Modem - Resource busy(16).
但是我要用的 path 應該要是 /dev/tty.KeySerial1 ,這是 KeySpan 的公用程式帶出來的路徑,這該怎麼解決呢?

:roll:


GetModemPath(io_iterator_t serialPortIterator) 所抓到的 bsdPath[] 是一個 Array 不是單一 String, 你所顯示的是 Array 中的第一個成員 char *bsdPath[0]

往往一部電腦不只一個 RS232 。 :shock:

_________________
I love OPERA !


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 05/23/2008 2:24 pm 
離線
新生訓練中

註冊時間: 09/28/2005 1:11 am
文章: 12
rlong 寫:
KK Chang 寫:
各位先進你好,小弟目前是使用 KeySpan USA19-HS,在使用 Apple sample code 取得 path 時,取到的結果是
Modem found with BSD path: /dev/cu.Bluetooth-Modem
Error opening serial port /dev/cu.Bluetooth-Modem - Resource busy(16).
但是我要用的 path 應該要是 /dev/tty.KeySerial1 ,這是 KeySpan 的公用程式帶出來的路徑,這該怎麼解決呢?

:roll:


GetModemPath(io_iterator_t serialPortIterator) 所抓到的 bsdPath[] 是一個 Array 不是單一 String, 你所顯示的是 Array 中的第一個成員 char *bsdPath[0]

往往一部電腦不只一個 RS232 。 :shock:


我查了一會,我發現應該是要變更查詢的 service,才能查到我要的 KeySerial,
目前我先直接指定 bsdPath 跳過這問題,這樣做已經可以連到儀器了。
:)
目前我比較頭痛是為何獲得資料的 ASCII 字串,看起來都是錯誤的,但是確定
有連上設備,因為儀器的 remote 關掉,資料也就跟著停了,現在必較擔心是
不是起始的 RS232 設定就錯了,因為 Mac OS 所提供的狀態參數非常多,我
試了很久但還是找不出來,因為我連接的儀器只用到2、3、7 這幾隻腳,太多
的參數反而讓我有點亂,還請大家幫我指點一下迷津了~
;)


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 05/23/2008 5:04 pm 
離線
嗜冰客
頭像

註冊時間: 04/30/2001 1:01 am
文章: 1530
來自: 新竹
KK Chang 寫:
newtio.c_cflag = BaudRate|CS7|CLOCAL|CREAD|HUPCL|CSTOPB;

:?


CS7 改成 CS8 試試,BaudRate 也是很重要的須與你的儀器相同。

_________________
I love OPERA !


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 05/23/2008 7:20 pm 
離線
新生訓練中

註冊時間: 09/28/2005 1:11 am
文章: 12
Update 一下狀況~
我搜尋了國外的網站討論,發現他們用 AMSerialTest 在寫 Serial Port,
所以我也抓下來試試,但是跟我遇到的問題一樣,接收到的資料變成亂碼
反之 ZTerm 則不會,所以現在困擾中~~
:roll:


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 06/02/2008 12:27 am 
離線
新生訓練中

註冊時間: 09/28/2005 1:11 am
文章: 12
自己再上來 update 一下~
問題解決了 .....
結果是 encode 的問題,一般我們用的 ASCII 是 7 位元的,我不清楚為何
Mac OS 會用 8 位元來處理,後來我是用另一台 NB 傳送一些字元過來,才
發現這些 data 都固定大了一定數值,所以後來再加上 AND 0x7F 之後就解
決了,感謝各位的指導~

:D


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 06/04/2008 10:59 pm 
離線
新生訓練中

註冊時間: 04/05/2008 10:19 pm
文章: 7
來自: 中央大學
不好意思~問個笨問題
AND 0x7F
請問要加在哪?
XD


回頂端
 個人資料  
 
 文章主題 :
文章發表於 : 06/05/2008 8:49 am 
離線
新生訓練中

註冊時間: 09/28/2005 1:11 am
文章: 12
Dannier 寫:
不好意思~問個笨問題
AND 0x7F
請問要加在哪?
XD


因為傳進來的 data 放在 buf 中,所以要使用資料前就先對 buf 的每個 byte 作
去掉第八個 bit 的動作( AND 0x7F)


回頂端
 個人資料  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 29 篇文章 ]  前往頁數 上一頁  12

所有顯示的時間為 UTC + 8 小時


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
POWERED_BY
正體中文語系由 竹貓星球 維護製作