2016年4月20日 星期三

學習筆記 MODBUS

MODBUS Application Protocol

Application Layer Messaging Protocol

是應用層的通訊協定,提供 Client/Server 通訊在兩個裝置或網路之間。一般用在 Serial Line 的傳輸上面,後來也有發展出 TCP/IP 的應用。

在1979年創立的標準,為 de facto 工業標準,常用在各種自動化設備之間的通訊。

MODBUS 是 Request/Reply Protocol ,答詢模式的協定,利用 Function Code 指定不同的行為。 Function Code 是組成 PDU的要素,用來建立架構進行 MODBUS 的 Transaction

MODBUS Communication Stack


Example of MODBUS Network Architecture

MODBUS 透過 Gateway 可用在不同網路間的連接,一對一的連接可以用 RS232,一對多用RS485,有多個 Client 可用 TCP/IP, Gateway 可用來做封包的轉送用來連接的不同類型的網路。

HMI:人機界面, PLC:邏輯控制器

 MODBUS Protocol Description

PDU( Protocol Data Unit)獨立於底層的通訊層,與傳遞的方式無關,PDU 被用來指定封包的功能和MODBUS SLAVE 的行為。

ADU( Application Data Unit)用來指定到不同的匯流排(buses)或網路,定址到某個 BUS上的指定的 Slave Address。

Address 的內容為一個 byte,定址的使用範圍從0到255,0為廣播位址(broadcast),1到127一般可用位址,128到255保留。通常 MODBUS Address 在裝置上事先分配好了,也可以由自己設定想要的 slave address。





MODBUS Slave device 

Delta(台達電子) 

在 MODBUS 網路上以Master/Slaver架構運作,除了Master裝置以外其餘的一個或多個設備皆為 Slave Device,也就是在MODBUS的網路上,只會允許一個Master裝置的存在,這是在spec終究規範好的,否則的話如果有兩個master同時發出request的訊號,會造成網路上的衝突,發生不可預期的反應。

PLC ( Programmable Logic Controller)
可程式邏輯控制器

PC可以用 RS232 或 RS485 與PLC相連進行設定和編程,預設通訊格式為 (ASCII, 9600, 7, E, 1),與PC相連時,PC 端為 Master 而 PLC 端為 Slave。

載入程式後,PLC透過設定好的程式,PLC 端主動或被觸發動作產生 MODBUS 的指令傳送給 BUS 上的某個 MODBUS Slave。


TC ( Temperature Controller)
溫度控制器

在 MODBUS 上作為 MODBUS Slave 的角色



學習筆記 UART PC16550D Universal Asynchronous Receiver/Transmitter

UART

UART(Universal Asynchronous Receiver/Transmitter)
通用非同步接收發送機,是硬體的一部分,將資料由序列通訊與並列通訊作傳輸轉換。UART通常用在與其他通訊界面的連接上,如RS232、RS485。

是對應各種非同步串行通信口的接口標準和匯流排標準,它規定了通信口的電氣特性、傳輸速率、連接特性和接口的機械特性等內容。

實際上是屬於通信網路中的實體層(Physical Layer)的概念,即電氣特性,與通信協定沒有直接關係。而通信協定,是屬於通信網路中的資料鏈結層(Data Link Layer)的概念,規範了被傳送資料的格式。

COM 是 PC(個人計算機)上,非同步串行通信口的簡寫。由於歷史原因,IBM的PC外部接口配置為RS232,成為實際上的PC界默認標準,最早就是由 IBM 所使用,所以後來繼續沿用,現在 PC 機的 COM 均為 RS232。若配有多個非同步串行通信口,則分別稱為COM1、COM2... 。在裝置管理員中可以找到。


與同步傳輸的差異在於 Clock 信號的有無,在傳遞訊號時會用起始位元來表示資料訊框的開始,以結束位元當作資料的終止,結束位元可能會有不同個數的選擇,則依據不同的鮑率需要選擇不同的結束位元數目,一般以資料傳輸位元在小於4%的畸變的考量下去決定最高的鮑率和結束位元數目。

USART
在 UART 上追加同步方式。

PC16550D

TI(Texas Instruments, 德州儀器)的 UART晶片,帶有FIFO功能。


UART演進

16550 可以選擇是否要ENABLE FIFO,切換有無FIFO的模式。Mode 16450和 Mode FIFO,在1645並沒有FIFO的功能。 16550加了FIFO,有16 bytes 緩衝,即深度16 bytes,寬8 bits。
(資料來源:wiki )

Basic Configuration

用在 CPU BUS和通訊界面之間互相的連接,此處的 DATA BUS為 8 bits的匯流排,為 Intel 8086/8088(16位元CPU)所使用,利用 8 bits BUS  並列讀寫 D0 到 D7 八個位元,將串列換成序列資料到傳輸介面。

相對來說,8 個位元的並列傳輸要傳輸 8 bits 的資料只需要一個 tick 的時間,串列傳輸卻需要重複傳輸八次,需要八倍的時間也就是八個 tick 的時間,光是效率上就差了八倍。但是就距離而言,串列傳輸的傳送長度比並列傳輸要大得多,因為在並列傳輸上,每條信號線到達目的端時間點可能不同,或者有不同的相位差,造成信號的偏差,所以一般並列式傳輸的距離較短。

圖中 EIA-DRIVERS 可以為 RS232或RS485 由DRIVER的類型決定,DRIVER晶片轉換PC16550D的 TTL 電壓到interface對應的電壓範圍進行通訊。

PC16550D腳位

資料傳輸

D0-D7 並列 資料(parallel)
SIN串列資料(serial)
SOUT

WR/RD 讀寫控制(PIN方向)

晶片選擇

CS0/CS1/CS2
有三條線,代表最多可以有2的3次方,即8個不同裝置


MODEM控制

RI (鈴聲指示)
DCD(載波偵測)
DSR
CTS(清除以傳送)
DTR
RTS(準備傳送)

現在通常已經沒有一定要實作的必要,但是都會保留下來。還是可以當作判斷有沒有在進行通訊中。

中斷信號

INTR

DMA信號

TXRDY
RXRDY


Register 位址選擇

A0/A1/A2
ADS

Address 就根據 IO base加上相對的暫存器位置。


PC16550D Function Block Diagram

左邊區塊為晶片的邏輯控制,Register Address 的選擇和讀寫的控制。

中間為 Register 的種類,如 Line Control, Divisor Latch, Modem Control, Interrupt Enable, FIFO Control 控制類型的,和狀態讀取的 Line Status, Modem Status, Interrupt ID,還有接受和傳送用的Register, Receiver Buffer, Transmitter Holding。 

右上接收的移位暫存器,接收完畢後送到Receiver Buffer 然後Data Ready旗標 ,右中為傳送的移位暫存器,







各暫存器(Register)種類

利用 Address Line 可以定址到不同 Register 進行讀寫,如 address 0 同時是接收(RBR)和發射(THR)的暫存器,可是進行 Read 和 Write 不同行為,卻是對應到兩個不同暫存器。還有另一個位元 DLAB為1時,定址到 address 0 也會對應到不同暫存器 Divisor Latch(LS,MS)。在最一開始設定暫存器時,需要注意當時寫入的是哪個暫存器。

以下是各暫存器內容



Registers Addressing






中斷(INTERRUPT)控制

當有中斷信號產生時,原本執行中的行程被中斷,必須要處理中斷服務常式內的程序,等到 ISR 執行完後返回原本中斷的地方,繼續當初正在執行的動作。


當各種 interrupt 有被致能時,只要對應的 Register 行為產生,INTR pin就會發出 interrupt信號,譬如說 Receiver Buffer Register 接收滿了,對應的 Interrupt Data Ready(DR) 中斷信號就會產生。

由於晶片上只有一個 INTR 的腳位,只要有任何中斷信號發生,INTR pin 信號就會舉起,等等待 CPU 執行對應的動作 INTR 電壓準位才會降下,像是讀取 RBR,硬體動作就會自動將 INTR 內容清除為 0。為了知道中斷信號產生時,這個信號是從誰而來,每個中斷信號會分到不同的優先權等級,代表不同類型的行為。

分成四個等級,如接收錯誤、接收完成、發送、MODEM控制。