但是主機端的讀取還是會受限于串口端通信速率(因為網絡端速率遠高于串口速率),如此,在多主機同時讀取時,雖然不會引起數據沖突,但是在多個主機同時快速讀取的時候,仍然會等到串口端排隊處理。
前文指路:
《串口服務器——多主機網關介紹及使用方法》
《串口服務器——簡單協議轉換介紹及使用方法》
本節先給大家介紹一種針對多個主機讀取相同相同寄存器或線圈數據時,給到一種高速率解決方案——存儲型網關。存儲型網關特別適用于讀取固定寄存器內容且適用于多主機高速刷新數據場景。
存儲型網關原理上來說,就是在串口服務器內部開辟一塊單獨的數據暫存區域,將前一個主機讀取的內容進行存儲,如在指令存儲時間內,其余主機再次讀取數據,為了減少延遲,串口服務器將在存儲區間內將數據直接取出并回復給第二個查詢的主機。并且在主機任意查詢一次數據后,如串口服務器沒有讀取其余主機內容(串口總線閑置),將按照讀取先后順序自動輪詢歷史查詢指令。歷史查詢指令最大可存儲50條。
優點在于當主機讀取任意指令后,串口服務器會按照輪詢時間間隔定時查詢歷史輪詢指令,并將數據一直更新,確保后續查詢的指令內容是最新的。當歷史存取指令長時間無主機讀取,存儲時間超過指令存儲時間后,會將指令自動清空,避免浪費存儲資源。
存儲型網關與多主機網關使用方式一致,本處只使用Modbus Pool與Modbus Slave作為展示,PLC/HMI等參照此進行鏈路連接。
如何配置參數在前面的文章中已經做出講解,本節不再單獨介紹。
使用EBYTE網絡配置工具查看當前串口服務器參數情況,IP需要修改為與電腦同一網段,設置串口服務器為TCP服務器模式,記錄當前本機IP和本地端口。
打開ModBus Slave軟件模擬從機,連接方式使用串口,選擇串口服務器的串口號、連接參數(波特率、數據位、校驗位、停止位,這里采用默認115200,8N1)
數據返回內容選擇從機ID為1,功能碼選擇03,寄存器地址選擇為0,數量為10(稍后讀取也為這個參數)。
打開ModBus Pool軟件,連接方式選擇為ModBus TCP/IP,目標IP設置為串口服務器IP地址,目標端口設置為串口服務器本地端口(192.168.0.113/8887)超時時間可使用默認。
讀取參數也選用從機ID為1,功能碼選擇03,寄存器地址選擇為0,數量為10。參照此參數可以連接6個主機,如下圖。
存儲型網關缺點在于第一次讀取指令邏輯還是在于主動向串口端輪詢,因此首條查詢指令時間會偏長一點,配置型網關優點在于可以將要查詢的指令預先配置給串口服務器,在串口服務器上電后將主動按照指令順序進行讀取,完成后將數據返回內容存儲在內部空間中,只要主機在指令存儲時間內進行讀取,串口服務器將立即將數據進行返回。
配置時,只需將要查詢的指令進行配置,無需輸入ModBus CRC校驗,設備將自動進行校驗,在輸入框中輸入指令后,點擊添加即可,此時設備會校驗當前輸入是否是標準指令,如不滿足格式將無法添加,如下圖:
添加完成后,保存配置,重啟設備即可,設備重啟完成后即開始按照輪詢時間間隔想串口查詢數據,如指令超時時間到了之后還未返回正確數據,將自動跳過該指令,繼續進行下一條指令查詢。最大可配置50條指令,如需要添加多余指令則需要將前期配置指令進行刪除。
無主機讀取數據,串口服務器也會按照輪詢時間間隔定時查詢歷史輪詢指令,并將數據一直更新,確保后續查詢的指令內容是最新的。
本處使用Modbus Pool與Modbus Slave展示查詢指令效果,PLC/HMI等參照此進行鏈路連接。
使用EBYTE網絡配置工具查看當前串口服務器參數情況,IP需要修改為與電腦同一網段,設置串口服務器為TCP服務器模式,記錄當前本機IP和本地端口。
打開ModBus Slave軟件模擬從機,連接方式使用串口,選擇串口服務器的串口號、連接參數(波特率、數據位、校驗位、停止位,這里采用默認115200,8N1)
數據返回內容選擇從機ID為1,功能碼選擇03,寄存器地址選擇為0,數量為10(稍后讀取也為這個參數)。
打開ModBus Pool軟件,連接方式選擇為ModBus TCP/IP,目標IP設置為串口服務器IP地址,目標端口設置為串口服務器本地端口(192.168.0.113/8887)超時時間可使用默認。
讀取參數也選用從機ID為1,功能碼選擇03,寄存器地址選擇為0,數量為10。參照此參數可以連接6個主機,如下圖。
串口服務器_數傳電臺_4G DTU_遙控開關_LoRa/ZigBee/WiFi/藍牙模塊-成都億佰特電子科技有限公司官網
串口是單片機重要的片上資源,通過串口搭配不同的電平轉換芯片,可以實現不同的通訊協議/接口,如RS232、RS485等,通過與模組的AT指令還可以實現藍牙、wifi等通訊,所以學會單片機的串口很重要。今天,蝸牛兄跟大家分享一下串口的基本知識。
串行通訊是指僅用一根接收線和一根發送線就能將數據以位進行傳輸的一種通訊方式。盡管串行通訊的比按字節傳輸的并行通信慢,但是串口可以在僅僅使用兩根線的情況下就能實現數據的傳輸。
典型的串口通信使用3根線完成,分別是地線、發送、接收。由于串口通信是異步的,所以端口能夠在一根線上發送數據同時在另一根線上接收數據。
串口通信最重要的參數是波特率、數據位、停止位和奇偶的校驗。對于兩個需要進行串口通信的端口,這些參數必須匹配,這也是能夠實現串口通訊的前提。
圖1:串行通訊示數據傳輸意圖
最初數據是模擬信號輸出簡單過程量,后來儀表接口出現了RS232接口,這種接口可以實現點對點的通信方式,但這種方式不能實現聯網功能,這就促生了RS485。
我們知道串口通信的數據傳輸都是0和1,在單總線、I2C、UART中都是通過一根線的高低電平來判斷邏輯1或者邏輯0,但這種信號線的GND再與其他設備形成共地模式的通信,這種共地模式傳輸容易產生干擾,并且抗干擾性能也比較弱。所以差分通信、支持多機通信、抗干擾強的RS485就被廣泛的使用了。
RS485通信最大特點就是傳輸速度可以達到10Mb/s以上,傳輸距離可以達到3000米左右。大家需要注意的是雖然485最大速度和最大傳輸距離都很大,但是傳輸的速度是會隨距離的增加而變慢的,所以兩者是不可以兼得的。
串口通訊的物理層有很多標準,例如上面提到的,我們主要講解RS-232標準,RS-232標準主要規定了信號的用途、通訊接口以及信號的電平標準。
在上面的通訊方式中,兩個通訊設備的"DB9接口"之間通過串口信號線建立起連接,串口信號線中使用"RS-232標準"傳輸數據信號。由于RS-232電平標準的信號不能直接被控制器直接識別,所以這些信號會經過一個"電平轉換芯片"轉換成控制器能識別的"TTL校準"的電平信號,才能實現通訊。
下圖為DB9標準串口通訊接口:
DB9引腳說明:
上表中的是計算機端的DB9公頭標準接法,由于兩個通訊設備之間的收發信號(RXD與TXD)應交叉相連,所以調制調解器端的DB9母頭的收發信號接法一般與公頭的相反,兩個設備之間連接時,只要使用"直通型"的串口線連接起來即可。
串口線中的RTS、CTS、DSR、DTR及DCD信號,使用邏輯 1表示信號有效,邏輯0表示信號無效。例如,當計算機端控制DTR信號線表示為邏輯1時,它是為了告知遠端的調制調解器,本機已準備好接收數據,0則表示還沒準備就緒。
波特率是指數據信號對載波的調制速率,它用單位時間內載波調制狀態改變的次數來表示;
比如波特率為9600bps;代表的就是每秒中傳輸9600bit,也就是相當于每一秒中劃分成了9600等份。
因此,那么每1bit的時間就是1/9600秒=104.1666...us。約0.1ms。既然是9600等份,即每1bit緊接著下一個比特,不存在額外的間隔。兩臺設備要想實現串口通訊,這收發端設置的波特率必須相同,否則是沒辦法實現通訊的。
收發波特率一致可以實現通訊:
收發波特率不一致,導致RX端不能正常接收:
起始位: 起始位必須是持續一個比特時間的邏輯0電平,標志傳輸一個字符的開始,接收方可用起始位使自己的接收時鐘與發送方的數據同步。
數據位: 數據位緊跟在起始位之后,是通信中的真正有效信息。數據位的位數可以由通信雙方共同約定。傳輸數據時先傳送字符的低位,后傳送字符的高位。
奇偶校驗位: 奇偶校驗位僅占一位,用于進行奇校驗或偶校驗,奇偶檢驗位不是必須有的。如果是奇校驗,需要保證傳輸的數據總共有奇數個邏輯高位;如果是偶校驗,需要保證傳輸的數據總共有偶數個邏輯高位。
停止位: 停止位可以是是1位、1.5位或2位,可以由軟件設定。它一定是邏輯1電平,標志著傳輸一個字符的結束。
空閑位: 空閑位是指從一個字符的停止位結束到下一個字符的起始位開始,表示線路處于空閑狀態,必須由高電平來填充。
單工: 數據傳輸只支持數據在一個方向上傳輸;
半雙工: 允許數據在兩個方向上傳輸,但某一時刻只允許數據在一個方向上傳輸,實際上是一種切換方向的單工通信,不需要獨立的接收端和發送端,兩者可合并為一個端口;
全雙工: 允許數據同時在兩個方向上傳輸,因此全雙工通信是兩個單工方式的結合,需要獨立的接收端和發送端。
STM32串口通信接口有兩種,分別是:UART(通用異步收發器)、USART(通用同步異步收發器),對于大容量STM32F10x系列芯片,分別由3個USART和兩個UART。
TXD:數據發送引腳;RXD:數據輸入引腳
對于兩芯片的間的連接,兩個芯片GND共地,同時TXD和RXD交叉連接,這樣兩個芯片間可進行TTL電平通信。
但如果對于芯片和PC機相連,除了共地條件外,不能使用如上的直接交叉連接,雖然兩者都有TXD和RXD引腳,但通常PC機使用的是RS232接口(9針),通常是TXC和RXD經過電平轉換得到,故如果要使芯片與PC機的RS232接口直接通信,需要將芯片的輸入輸出端口也電平轉換為RS232類型,再交叉連接,二者的電平標準不同:
單片機的點評標準(TTL電平):+5V表示1,0V表示0;
RS232電平標準:+15/+13V表示0,-15/-13表示1。
因此單片機與PC機進行串口通信應該遵循:在單片機串口與上位機給出的RS232口之間,通過電平轉換電路實現TTL電平與RS232電平間的轉換.
如果使用USB轉串口也可以實現串口通訊,USB轉串口電路圖如下所示
硬件筆記本,一起學習電路設計、PCB設計、仿真、調試以及EMC知識
更多干貨文章請點擊關注:
搞懂元器件,就搞懂了電路的一半
一起學習吧:
硬件筆記本|加群
聲明:本號對所有原創、轉載文章的陳述與觀點均保持中立,推送文章僅供讀者學習和交流。文章、圖片等版權歸原作者享有,如有侵權,聯系刪除。
嘍大家好!買了一個PM2.5的傳感器,現在線我已經接好了,連接到電腦,通過串口傳輸,現在一直在傳輸,主要是中間兩個數值,05現在代表是5PM2.5,45。
給它放點煙,稍稍上升了一點,現在高了,這個是高位,高位已經非常大了,前面一個字節,一個一就100多,就是15乘128,非常大的數字了,爆表了基本上可以說是,現在又恢復了。
這個不太好的一點就是它沒有風扇,里面沒有風扇,空氣不怎么會流動,在室內不流動的情況下它就可能檢測不出來,要有風的地方才比較好。
暫時先這樣,之后做一個藍牙的空氣PM2.5檢測設備,這個10多塊錢的,可能要換一個沒有風扇不怎么好用,換一個質量好一點的。
本期就是這些,咱們下回再見。