Re: [請益] 如何用php連接rs232

看板PHP作者 (宅是一種生活態度)時間16年前 (2009/02/26 19:51), 編輯推噓4(402)
留言6則, 4人參與, 最新討論串2/2 (看更多)
我解決了這個問題了,所以我把我的經驗PO上來, 希望有跟我一樣問題的人,可以得到一點幫助 一開始,我嘗試用php與機器連接,然後丟一個訊息給機器, 讓它可以傳回我想要的訊息 (這個部份如果有問題的人,可能要先看一下關於modbus的資料, 通常,你必須要有那台機器的modbus的通訊協定的資料,你才會 知道你丟什麼,機器傳什麼回來) 於是我先使用rs232通訊測試軟體,與機器連接,並丟訊息給機器, 結果當然是成功得到我需要的訊息回來 (這裡先打出我所丟的訊息)=>05 03 01 57 00 01 35 A2 於是我嘗試使用php來達到相同的效果,但都失敗 失敗的例子: $str = "05 03 01 57 00 01 35 A2"; $str[0]= "05"; $str[1]= "03"; $str[2]= "01"; $str[3]= "57"; $str[4]= "00"; $str[5]= "01"; $str[6]= "35"; $str[7]= "A2"; 我想,可能會有人認為我可以試試其他的型態,例如十進位, 或十六進位之類的,基本上能試的我都試了,我可以說我把有可能的, 或是我自己都覺得不太可能的,都試過了,都不能成功 在一位朋友的指導下,我終於知道, 最重要的部份在於,我跟本就不知道我丟了什麼出去 所以最重要的就是,我要去收我丟的東西 有兩種辦法可以做到 第一種是去下載軟體 (在這裡引用別人的文章,畢竟是從上面得知的) http://blog.linym.net/archives/157 不過我剛剛上去看,連結好像掛了 第二種是你將rs232的傳送pin和接收pin用電線接起來 然後你再寫程傳送和接收,就可以了 http://tw.knowledge.yahoo.com/question/?qid=1406010617842 (把2跟3接起來) 成功的例子: <?php `mode com4: BAUD=9600 PARITY=N data=8 stop=1 xon=off`; $fp = fopen ("COM4:", "w+"); if (!$fp) { echo "Uh-oh. Port not opened."; } else { $str = chr(5).chr(3).chr(1).chr(87).chr(0).chr(1).chr(53).chr(162); fputs ($fp, $str); sleep(1); $rec = fgets ($fp); echo hexdec(dechex(ord($rec[3])).dechex(ord($rec[4]))); } fclose($fp); ?> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.45.148

02/26 21:02, , 1F
用pack/unpack來組/解binary string會比較方便吧?
02/26 21:02, 1F

02/26 22:37, , 2F
`mode........`; 這一句是直接設定 com port..
02/26 22:37, 2F

02/26 22:37, , 3F
完整文件要看哪個章節?所有 dos 指令都能執行嗎?
02/26 22:37, 3F

02/26 22:46, , 4F
Execution Operators,酷..不過好多好相近的....
02/26 22:46, 4F

02/27 01:09, , 5F
酷~
02/27 01:09, 5F

02/27 02:27, , 6F
分享好文有下有推~
02/27 02:27, 6F
文章代碼(AID): #19fe9GyG (PHP)
文章代碼(AID): #19fe9GyG (PHP)