個人資料
歸檔
正文

RS232

(2021-01-22 15:06:11) 下一個

這可能是最簡單的通信規程,但是應用中也可能遇到問題。我琢磨了一下如何說清楚。

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

Syntax Example
return Vout ch VOUT? VOUT1?
return Iout ch IOUT?
set Out ch on/off :OUTPut[1|2|3|4][:STATe] ON|OFF :OUT1:STAT ON
Query Output ch :OUTPut[1|2|3|4][:STATe] ? :OUT2:STAT?
set ch voltage VSET: VSET1:0.75
set ch current ISET:
 
set OVP :OUTPut[1|2|3|4]:OVP
set OCP :OUTPut[1|2|3|4]:OCP
turn OVP on/off :OUTPut[1|2|3|4]:OVP:STATe
turn OVP on/off :OUTPut[1|2|3|4]:OCP:STATe
query OVP :OUTPut[1|2|3|4]:OVP?
query OCP :OUTPut[1|2|3|4]:OCP?
 
*IDN?
*RST
*CLS
:SYSTem:ERRor? read/clear last error
:SYSTem:CLEar clear errors
[*]SAV|RCL save/recall setup_mem_NRf
[:SYSTem:]REMote
[:SYSTem:]LOCal
 
:SYSTem:BAUDrate:USB|RS232[9600|19200|38400|57600|115200]

 

 

 

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.