Linux下串口與工業協議的開發

來源:互聯網
上載者:User

標籤:

1、串口通訊原理

串口通訊定義

串口通訊:資料的串列傳送方式。串口通訊可分為同步通訊非同步通訊

同步通訊:按照軟體識別同步字元來實現資料的發送和接收。

  • 將許多字元組成一個資訊組進行發送
  • 要求發送時鐘和接收時鐘保持嚴格的同步
  • 效率相對高,對雙發時鐘的誤差要求也高

   

非同步通訊:利用字元的再同步技術的通訊方式。

  • 按字元一個一個進行傳輸
  • 每傳輸一個字元,就用起始位來通知對方,以此來重新核對收發雙方同步
  • 可靠性較高,但效率較低

  

  同步通訊按幀為單位傳輸,非同步通訊按字元為單位傳輸。(資料連結層)

9針串口管腳布局

  

串口通訊重要參數:

傳輸速率、資料位元、停止位、同位

串口通訊的測試:

串連com1和com2兩個串口,在/dev/ttyS0裝置檔案中寫入資料“Hello”,然後看/dev/ttyS1裝置檔案。串口裝置可以使用read/write直接存取。

ttyS0對應com1,ttyS1對應com2。

 

2、串口編程常用的API

串口參數設定

串口編程需要用到的標頭檔

1 #include <stdio.h>        /*標準輸入輸出*/2 #include <stdlib.h>       /*標準函數庫*/3 #include <unistd.h>      /*Unix標準函數定義*/4 #include <sys/types.h>  /*定義資料類型*/5 #include <sys/stat.h>    /*定義狀態相關的資料類型*/6 #include <fcntl.h>         /*檔案控制定義*/7 #include <termios.h>    /*POSIX終端控制定義*/8 #include <errno.h>       /*錯誤號碼定義*/9 #include <string.h>      /*字串功能函數*/

傳輸速率的設定

cfsetispeed() 設定輸入連接埠的傳輸速率

cfsetospeed() 設定輸出連接埠的傳輸速率

cfgetispeed() 擷取輸入連接埠的傳輸速率

cfgetospeed() 擷取輸出連接埠的傳輸速率

struct termios opt; 定義指向termios結構的指標opt

termios結構體

#define NCCS 19struct termios{    tcflag_t c_iflag;     //輸入參數    tcflag_t c_oflag;    //輸出參數    tcflag_t c_cflag;    //控制參數    tcflag_t c_ispeed;  //輸入傳輸速率    tcflag_t c_ospeed; //輸出傳輸速率    cc_t c_line;           //線控制    cc_t c_cc[NCCS];  //控制字元};

傳輸速率設定執行個體

cfsetispeed(&opt, B9600); //指定輸入傳輸速率為9600bpscfsetospeed(&opt, B9600); 

串口常見操作

fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY);  

int read(int fd, *buffer, length);

int write(int fd, *buffer, length);

int close(int fd);

串口控制流程程

  • 設定傳輸速率
  • 校正位和停止位的設定
  • 開啟串口
  • 發送串口資料
  • 讀取串口資料
  • 關閉串口

 

3、串口編程實踐

 

4、Modbus協議介紹

屬於應用程式層協議,用於電子控制器進行控制和通訊的通訊協議。通過此程式,控制器相互之間、控制器經由網路和器它裝置之間可以進行通訊。

ModBus的兩種常用傳輸模式:

ASCLL模式:在訊息中的每個8Bit位元組都作為兩個ASCLL字元發送,字元發送的時間間隔可達到1秒而不產生錯誤。

RTU模式:在同樣的傳輸速率下,可比ASCLL方式傳送更多的資料。(更為常用一些)

 

兩種模式的比較

功能代碼位

例:ModBus一個執行個體

  發送指令: 01 04 00 28 00 02 F1 C3 

 <slave address 1 Byte><Function 1 Byte><Start Address 2 Bytes><NumberofBytes 2 Bytes><Checksum 2 Bytes>

  接收回複: 01 04 04 42 0B 99 9A 74 05

   <slave address 1 Byte><Function 1 Byte><NumberofBytes 1 Bytes><DataIEEE32 x Byte><Checksum 2 Bytes>

ModBus通訊協定的通訊方式

 

 

5、Modbus編程實踐

 

Linux下串口與工業協議的開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.