[英]Failing to communicate with digital dial indicator via USB serial python library
I have this digital dial indicator: Helios-Preisser Digimet 1722-502". It comes with a capacity to output its reading over a USB serial cable. The USB cable is a special 4 pin connector on the end that plugs into the calipers and a另一端正常 USB。
雖然該設備帶有特殊軟件,但我正在嘗試編寫一個基本的 python 庫來與它通信。 下面是解釋數據通信協議的手冊片段
我正在使用 python 串行庫並設法進行一些通信。 這是我到目前為止所擁有的
import serial
ser = serial.Serial(port ='/dev/tty.usbserial-MA4LOCLF', baudrate=4800,parity=serial.PARITY_EVEN, bytesize=serial.SEVENBITS,stopbits=serial.STOPBITS_TWO, dsrdtr=True, xonxoff=True)
# press the small red button on the cable. This generates a data entry
In [77]: ser.inWaiting()
Out[77]: 8
In [78]: ser.read(8)
Out[78]: '+000.00\r'
因此,這在使用模式時非常有用,通過按下插入百分表的電纜上的紅色小按鈕來請求數據
但是,還有另一種模式可以請求數據輸入。 這是手冊中描述為“通過外圍設備請求進行數據傳輸”的模式,其中必須將 DataRequest 引腳脈沖為低電平 T1(100ms<T1<1000ms)。 我幾乎隨機嘗試了所有可能的組合,我認為可以使此數據請求正常工作,但無濟於事。 使用串行庫中的寫入 function 的所有嘗試均無效
In [79]: ser.write('0\r')
Out[79]: 2
In [80]: ser.inWaiting()
Out[80]: 0
我有點沒有想法。 我知道這種模式有效,因為當您下載(僅在 Windows 中)設備隨附的軟件時,您可以發送該請求。 所以必須有一種方法可以使用 python 串行庫來模擬這個請求,但我被卡住了,我什至不知道如何繼續。 任何幫助,將不勝感激。 謝謝
pyserial 支持(或者應該,但最終取決於驅動程序而不是 pyserial 本身)一個 function 來更改端口控制線的 state。
你需要做這樣的事情:
ser.setDTR(False)
time.sleep(0.5)
ser.setDTR(True)
如果您在獲得所需值后立即從端口讀取數據。
為了使時間或多或少正確,您應該將代碼作為腳本而不是逐行運行。
好的,經過多次“搞砸”之后,我能夠調試這個問題並找到解決方案,但它肯定不是一個線性過程。 我應該指出,由於 Marcos G. 的建議,我走上了正確的道路,他指出您確實可以直接使用 pyserial 控制 dtr 行。
這是答案。 在對 web 進行了更多搜索之后,我發現了這個鏈接,它提供了關於如何在 mac 上對串行連接進行故障排除的建議。 這個 Coolterm 軟件非常有用。
我下載了它,它允許您在與設備實時通信時監控各種 RTS 和 DTS(和其他)線路的 state。 超級好用!
這向我表明:
這是下面的代碼
import time
import serial
ser = serial.Serial(port ='/dev/tty.usbserial-MA4LOCLF', baudrate=4800,parity=serial.PARITY_EVEN, bytesize=serial.SEVENBITS,stopbits=serial.STOPBITS_TWO, dsrdtr=True)
ser.dtr=False
ser.rts=False
# request one reading every second
while(1):
ser.rts=True
time.sleep(0.1)
ser.rts=False
time.sleep(0.1)
print ser.read(ser.inWaiting())
time.sleep(1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.