2009 (2)
2010 (1)
2014 (58)
2015 (74)
2016 (71)
2017 (67)
2018 (37)
2020 (57)
2021 (47)
2022 (69)
2023 (45)
這可能是最簡單的通信規程,但是應用中也可能遇到問題。我琢磨了一下如何說清楚。
1. Linux termios.h
Linux PC多有RTS / CTS流控製的硬件驅動,DTR / DSR流控製要自己編碼,通過IOCTL。DTR / DSR流可簡化為單向即DTR控製。另一種控製是XON-XOF軟件流控製。
RTS / CTS:DTE設備端的RTS=1/0=請求發給我/不要發給我;CTS是另一端的類似請求。兩端都是DTE即無modem的通信時,每端的RTS接去另一端CTS來滿足通信要求。DTR / DSR流量控製,DTR信號就像從RTS引腳發送的信號,而DSR引腳就像CTS引腳。
下麵貼圖是最常見的Null-modem電纜和9-25腳適配器內聯線。隻用DTR時是單向流量控製。為了解決Linux不支持DTR/DSR的問題,可將終端子DTR與CTS相連後去計算機的DSR,還可將終端的DSR接計算機上的RTS引腳。
RTS的原始用法和命名用在Null-modem下很易誤解。DTE(終端或計算機)和DCE(調製解調器)的RTS/CTS是同名相連,調製解調器通過RTS接受對方的請求發送,發送CTS以回應。Monitor:
https://www.virtual-serial-port.org/articles/serial-port-monitor-linux/
https://www.amazon.com/gp/product/B08CDQ76Q8/ref=ppx_yo_dt_b_asin_title_o00_s00
Posix guide:https://www.cmrr.umn.edu/~strupp/serial.html#2_4
OnlineGDB編譯器:https://www.onlinegdb.com/
2. HP電源用的DTR / DSR協議
電源置DTR為1表示可接受,置0時計算機再發送的數據不得超過10個字符。要禁用DTR / DSR握手,電源端DTR不接並置DSR為1;且應降低波特率。在以下情況下,電源會將DTR線設置為FALSE:
2.1 電源的輸入緩衝區已滿時(大約100字符)。當緩衝區有空時會複原,除非下麵的情況阻止了它;
2.2 當電源收到了消息終止符準備處理該消息時,例如處理查詢命令。電源在發送期間會置DTR為0,在發送每個字T符之前監測DSR線,其為1時才發送。如果DSR為0且電源的DTR也為0,將造成死鎖,除非PC端將電源DSR置1。在PC端將電源DSR清0的情況下,解除死鎖的方法是在PC端發送ctrl-c,這將中止進程並丟棄未發出的數據(等效於IEEE-488設備的clear)。
3. 實踐
s/w monitor: https://download.cnet.com/IO-Ninja/3001-2085_4-10872608.html
h/w monitor: https://www.amazon.com/gp/product/B08CDQ76Q8
此類電源用USB-232電纜接PC有許多問題,包括同牌產品有的工作有的不行。
通過Null-Modem電纜看:電源端接上後其端DSR/DCD一直為1,運行Linux自編程序,通訊期間DTR/RTS為1,RX/TX閃爍。靜態時PC端則DSR/DCD/CTS一直為1。如果不用交叉電纜,靜態時電源端是DTR/DCD一直亮,PC端是DTR/DCD/RTS一直亮。這些意味著,無論哪一端,要通訊時DTR/RTS應置1,等DSR/CTS為1才能發送。至於是DTR/DSR還是RTS/CTS規程,兩端需要統一。
控製DTR/DSR:http://embeddedguruji.blogspot.com/2019/02/serial-port-programming-part-10.html PC端軟件應常置於DTR為1,每次發送前查DSR,為1則發送否則等待,每個命令後等1.2秒。實踐表明DSR為0後電源多半死鎖,常伴有按鍵無用,顯示失常,非斷電不能恢複。
https://www.eevblog.com/forum/testgear/34401a-serial-interface-problems/
https://www.keysight.com/main/software.jspx?ckey=2175637&id=2175637
http://sine.ni.com/apps/utf8/niid_web_display.model_page?p_model_id=232
4. HP SCPI
*RST *CLS *IDN? => "HEWLETT-PACKARD,E3632A,0,1.2-5.0-1.0"
DISP:TEXT DISPlay:TEXT:CLEar DISPlay OFF|ON
APPLy 3.5,1.5 VOLT {|MAX|MIN|UP|DOWN|?} CURR {|MAX|MIN|UP|DOWN|?}
CURR:STEP 0.01 CURR UP CURR DOWN
CURR? VOLT? APPLy? =>“15.00000, 4.00000”
OUTPut {OFF|ON|?}
SYSTem:BEEPer SYSTem:VERSion? => "1995.0"
設置限壓限流:
VOLT:PROT {|MIN|MAX} #Set the OVP level.
VOLT:PROT:STAT {OFF|ON) #Disable or enable the OVP circuit.
VOLT:PROT:CLE #Clear the tripped OVP circuit.
5. Lecroy power supply
T3PS33203P 2x0~32V/3A, 1.8V-2.5V-3.3V-5V/5A, 207W
T3PS43203P 2x0~32V/3A, 0~15V/1A, 0~5V/1A, 212 W