在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎樣將Arduino用作MODBUS主站并與MODBUS從站進行通信

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-12-06 15:51 ? 次閱讀

在在上一教程中,我們學習了有關與Arduino作為從站的Modbus RS-485串行通信信息。在今天的后續文章中, Arduino將被用作MODBUS主站并與MODBUS從站進行通信。此處已安裝MODBUS Slave軟件的計算機將用作MODBUS Master。因此,我們首先簡要介紹一下RS-485和Modbus 。

RS-485串行通信

RS-485是異步串行通信協議,不需要時鐘。它使用一種稱為“ 差分信號”的技術將二進制數據從一個設備傳輸到另一個設備。當使用兩根導線和全雙工需要四根導線時,它提供半雙工通信。

將RS-485與Arduino連接

RS-485模塊可以連接到具有以下功能的任何微控制器:串行端口。為了將RS-485模塊與微控制器一起使用,需要一個基于Maxim MAX485 IC 的名為 5V MAX485 TTL到RS485的模塊,因為它可以實現1200米長距離的串行通信。它是雙向半雙工的,數據傳輸速率為2.5 Mbps。該模塊需要5V的電壓。

RS-485的插針輸出:

怎樣將Arduino用作MODBUS主站并與MODBUS從站進行通信

《表邊框=“ 1” cellpadding =“ 0” cellspacing =“ 0”》 引腳名稱 使用 VCC 5V A 同相接收器輸入同相驅動器輸出 B 反相接收器輸入反相驅動器輸出 GND GND(0V) R0 接收器輸出(RX引腳) RE 接收器輸出(低啟用) DE 驅動器輸出(高啟用) DI 驅動程序輸入(TX引腳)

USB轉RS-485轉換器模塊:

這是USB到支持WIN7,XP,Vista,Linux,Mac OS的RS485轉換器適配器模塊,并通過使用計算機中的COM端口提供易于使用的RS485接口。 即插即用設備。沒有命令結構,發送到虛擬COM端口的任何內容都會自動轉換為RS485,反之亦然。該模塊完全由USB總線自供電。 因此,無需外部電源即可操作。

它顯示為串行/COM端口,并且可從應用程序或超級終端訪問。此轉換器提供半雙工RS-485通信。波特率范圍為75 bps至115200 bps,最大速率為6 Mbps。

要使用此設備,互聯網上提供了各種Modbus軟件。在本教程中,使用了名為 Witte Software的Modbus Slave軟件的軟件。可以從網站www.modbustools.com下載該軟件。

Modbus從站軟件

Modbus從站應用程序接收值使用串行通訊端口從任何Modbus主設備上進行連接。它是一個數據通信測試軟件。在使用該軟件之前,必須了解以下內容。有關更多信息,請參閱軟件手冊。

從站ID:

網絡中的每個從站都分配有一個唯一的單元地址,范圍為1到127。 masterrequests數據,它發送的第一個字節是從設備地址。這樣,每個從站都會在第一個字節之后知道是否忽略該消息。

Modbus寄存器

離散輸出線圈:它是一個1位寄存器,用于控制離散輸出,并且可以讀取或寫入。它們的寄存器號為(1到9999)。

離散輸入:這是一個1位寄存器,用作輸入,只能讀取。它們的寄存器號為(10001到19999)。

輸入寄存器:這是一個用于輸入的16位寄存器,只能讀取。它們的寄存器號為(30001到39999)。

保持寄存器:這是一個16位寄存器,可以讀取或寫入。它們的注冊號為(40001到49999)。

Modbus功能代碼:

《表邊框=“ 1” cellpadding =“ 0” summary = “此表顯示了功能代碼,其動作

及其影響的表“》

功能代碼 動作 表名稱 04(04hex) 讀取 模擬輸入寄存器 03(03hex) 讀取 模擬輸出保存寄存器 06(06hex) 寫入單個 模擬輸出保持寄存器 16(10hex) 寫入多個 模擬輸出保持注冊

支持的線圈功能代碼:

及其影響的表”》

功能代碼操作表名

02(02hex )閱讀Di特殊的輸入觸點

01(01hex)Read離散輸出線圈

05(05hex)寫單個離散輸出線圈

15(0Fhex)寫多個離散輸出線圈

CRC:

CRC代表循環冗余校驗。在每個Modbus消息的末尾添加了兩個字節,用于錯誤檢測

所需的組件

硬件

Arduino UNO

MAX-485 TTL轉RS-485轉換器模塊

USB轉RS-485轉換器模塊

按鈕(2)

10k電阻器(2)

16x2 LCD顯示屏

10k電位器

軟件

Modbus從站

電路圖

MAX-485 TTL至RS-485轉換器模塊與Arduino之間的電路連接UNO:

Arduino UNO MAX-485 TTL轉RS-485轉換器模塊

0(RX)RO

1(TX)DI

3DE

2RE

+ 5VVCC

GNDGND

MAX-485 TTL至RS-485模塊與USB至RS-485轉換器之間的電路連接:

MAX-485 TTL到RS-485

轉換器模塊USB轉RS-485模塊

已與PC連接

AA

BB

Arduino UNO和16x2 LCD顯示器之間的電路連接:

《表border =“ 1” cellpadding =“ 0” cellspacing =“ 0”》

16x2 LCD

Arduino UNO

VSS

GND

VDD

+ 5V

V0

至電位計中心引腳,用于LCD對比度控制

RS

8

RW

GND

E

9

D4

10

D5

11

D6

12

D7

13

A

+ 5V

K

GND

兩個具有下拉電阻10k的按鈕也連接到Arduino的引腳4和5。 10K電位器用于向Arduino引腳A0提供模擬輸入值。

電路連接后,完整的設置如下所示。

將Arduino Uno編程為MODBUS Master

在本教程中,Arduino Uno通過使用來配置為Modbus Master Master Modbus Arduino編碼g在Modbus Master庫的幫助下。這里Arduino Uno有兩個按鈕和一個電位計,可將值從Modbus Master Arduino發送到Modbus Slave軟件。

要在Arduino UNO中使用Modbus,需要一個庫 被使用。該庫用于通過RTU協議與RS-485 Modbus主站或從站進行通信。下載Modbus主站,并按照素描-》包含庫-》添加.zip庫在草圖中添加該庫。

完整的程序,并附有詳細的視頻。在這里,我們解釋了以下主要步驟。

首先,包括ModbusMaster和液晶庫:

#include

#include

接下來定義連接在MAX485 TTL到RS-485轉換器模塊和Arduino UNO之間的引腳名稱。

#define MAX485_DE 3

#define MAX485_RE_NEG 2

初始化類的節點對象 ModbusMaster 。

ModbusMaster node;

然后編寫兩個函數 preTrasnmission()和 postTrasmission()用于使Max485 TTL到RS-485轉換器模塊的RE和DE引腳高或低以發送或接收數據。

void preTransmission()

{

digitalWrite(MAX485_RE_NEG, 1);

digitalWrite(MAX485_DE, 1);

}

void postTransmission()

{

digitalWrite(MAX485_RE_NEG, 0);

digitalWrite(MAX485_DE, 0);

}

下一步,在 void設置()中,將LCD設置為16x2模式,并顯示并清除歡迎消息。

lcd.begin(16,2);

lcd.print(“CIRCUIT DIGEST”);

delay(3000);

lcd.clear();

lcd.print(“Arduino”);

lcd.setCursor(0,1);

lcd.print(“Modbus Master”);

delay(3000);

lcd.clear();

然后將RE和DE引腳設置為OUTPUT引腳,將引腳4和5設置為INPUT引腳(按鈕)。

pinMode(MAX485_RE_NEG, OUTPUT);

pinMode(MAX485_DE, OUTPUT);

pinMode(4,INPUT);

pinMode(5,INPUT);

最初,將MAX-485 TTL到RS-485轉換器模塊的DE和RE引腳設置為LOW

digitalWrite(MAX485_RE_NEG, 0);

digitalWrite(MAX485_DE, 0);

將波特率設置為115200,并用從站ID 1通知Modbus主站。

Serial.begin(115200);

node.begin(1, Serial);

之后,使用回調語句,以便RS-485收發器已正確配置。

node.preTransmission(preTransmission);

node.postTransmission(postTransmission);

現在位于 void loop()

首先從與電位計連接的A0引腳讀取模擬值。

float value = analogRead(A0);

然后,使用以下語句將(0到1023)的ADC值寫入0x40000寄存器,以將其發送到Modbus從站。

node.writeSingleRegister(0x40000,value);

然后該值也顯示在16x2 LCD顯示屏上

lcd.setCursor(0,0);

lcd.print(“POT Val :”);

lcd.print(value);

接下來,兩個按鈕的狀態為

int a= digitalRead(4);

int b= digitalRead(5);

,并且取決于th的狀態e按鈕,將按鈕1的值0x40001和按鈕2的值0x40002寫入Modbus從站,并顯示在LCD顯示屏上。

if (a == 1)

{

node.writeSingleRegister(0x40001,1);

lcd.setCursor(0,1);

lcd.print(“S1: 1”);

}

else

{

node.writeSingleRegister(0x40001,0);

lcd.setCursor(0,1);

lcd.print(“S1: 0”);

}

if (b == 1)

{

node.writeSingleRegister(0x40002,1);

lcd.setCursor(8,1);

lcd.print(“S2: 1”);

}

else

{

node.writeSingleRegister(0x40002,0);

lcd.setCursor(8,1);

lcd.print(“S2: 0”);

}

將Arduino UNO測試為RS485 MODBUS主設備

在電路連接完成并將代碼上傳到Arduino Uno之后,現在是時候將USB連接到RS-485模塊了

注意:打開設備管理器,并根據連接了USB到RS-485模塊的PC并檢查COM端口。然后打開Modbus Slave軟件。

1。Modbus Slave Tool出現如下,指示 No Connection。

2。下一步打開 Connection-》 Connect ,它顯示如下。

3。由于該軟件是試用版,因此會顯示以下對話框,因此請點擊稍后注冊

4。此試用版軟件打開后僅運行10分鐘。

5。連接細節如下所示。將連接設置為串行端口,并將串行設置設置為連接USB到RS-485模塊的COM端口。然后將波特率設置為115200 (就像我在Arduino代碼中使用的一樣),將數據位設置為8 ,無奇偶校驗, 1停止位和“模式”作為RTU,然后單擊“確定”。

6。請注意,無連接消失,現在打開設置-》從站 定義。

7。現在,將從站ID 輸入為1,將功能輸入為03 保留寄存器和地址0 ,然后單擊確定。/p》

8。之后,確認ID為1,F為03。在本教程中,將使用前三個寄存器(0電位ADC值,1-按鈕值,2-按鈕值)。

9。現在,當按下按鈕2時。注意第三行中的值1。由于未按下按鈕1,它在第二行中保持為0,在第一行中顯示了一些底池值。

10。按下按鈕1時。注意第二行中的值1。并且由于沒有按下按鈕2,因此它在第三行中保持為0,在第一行中顯示了一些底池值。

11。現在,當同時按下兩個按鈕時,第二行和第三行中都有值1,并記下電位計值。

12。當電位計變化時,行1在Modbus從站軟件中也會變化。

這是 RS-485 Modbus可以與Arduino UNO作為主機進行串行通訊。請查看上一教程,以了解Arduino Uno在MODBUS通訊中作為從機。

查找完整的代碼并下面的演示視頻

》代碼

#include //使用ModbusMaster的庫

#include //使用LCD顯示屏的庫

#define MAX485_DE 3

#define MAX485_RE_NEG 2

ModbusMaster節點;//ModbusMaster類的對象節點

LiquidCrystal lcd(8,9,10,11,12,13);//帶有LCD引腳(RS,E,D4,D5,D6,D7)并與Arduino UNO連接的液晶類液晶顯示器的對象LCD。

void preTransmission()//用于設置引腳DE的stste的函數RS-485

{

digitalWrite(MAX485_RE_NEG,1)的&RE

digitalWrite(MAX485_DE,1);

}

無效postTransmission()

{

digitalWrite(MAX485_RE_NEG,0);

digitalWrite(MAX485_DE,0);

}

void setup()

{

lcd.begin(16,2);

lcd.print(“ CIRCUIT DIGEST”);

delay(3000) ;

lcd.clear();

lcd.print(“ Arduino”);

lcd.setCursor(0,1);

lcd.print(“ Modbus Master”);

delay(3000);

lcd.clear();

pinMode(MAX485_RE_NEG,OUTPUT);

pinMode(MAX485_DE,OUTPUT);

pinMode(4,INPUT);

pinMode(5,INPUT);

digitalWrite(MAX485_RE_NEG,0);

digitalWrite(MAX485_DE,0);

Serial.begin(115200);//波特率為115200

node.begin(1,Serial);//從站ID為1

node.preTransmission(preTransmission);//正確配置RS-485收發器的回調

node.postTransmission(postTransmission);

}

void loop()

{

float值= AnalogRead(A0);

node.writeSingleRegister(0x40000,值);//將值寫入保存寄存器的0x40000

lcd.setCursor(0,0);

lcd.print(“ POT Val:”);

lcd.print(value);

int a = digitalRead(4);//讀取按鈕的狀態

int b = digitalRead(5);

if(a == 1)

{

node.writeSingleRegister(0x40001,1);//將1寫入0x40001保持寄存器

lcd.setCursor(0,1);

lcd.print(“ S1:1”);

}

else

{

節點.writeSingleRegister(0x40001,0);//將0到0x40001寫入保持寄存器

lcd.setCursor(0,1);

lcd.print(“ S1:0”);

}

if(b == 1)

{

node.writeSingleRegister(0x40002,1);//寫入1到0x40002的保持寄存器

lcd.setCursor(8,1);

lcd.print(“ S2:1”);

}

else

{

節點.writeSingleRegister(0x40002,0);//將0到0x40002寫入保持寄存器

lcd.setCursor(8,1);

lcd.print(“ S2:0”);

}

}

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • MODBUS
    +關注

    關注

    28

    文章

    1821

    瀏覽量

    77335
  • Arduino
    +關注

    關注

    188

    文章

    6477

    瀏覽量

    187895
收藏 人收藏

    評論

    相關推薦

    Profinet通訊網關模塊之Modbus TCP轉profinet案例

    ,它是整個生產線的,而部分生產設備如匯川的伺服電機和歐姆龍的儀表等采用Profinet協議,作為,這時候需要Modbus TCP協議
    的頭像 發表于 01-15 17:01 ?149次閱讀
    Profinet通訊網關模塊之<b class='flag-5'>Modbus</b> TCP<b class='flag-5'>從</b><b class='flag-5'>站</b>轉profinet<b class='flag-5'>主</b><b class='flag-5'>站</b>案例

    新手必看!搞清楚Modbus,讓你成為通信達人

    MODBUS網絡中,設備可以分為兩種角色:(Master)和(Slave)。
    的頭像 發表于 12-16 16:41 ?1969次閱讀
    新手必看!搞清楚<b class='flag-5'>Modbus</b><b class='flag-5'>主</b><b class='flag-5'>站</b>和<b class='flag-5'>從</b><b class='flag-5'>站</b>,讓你成為<b class='flag-5'>通信</b>達人

    EtherCATModbus-RTU總線協議網關

    RTU模塊,可以確保EtherCAT總線上的設備與Modbus RTU協議的設備順暢通信。 二,典型應用拓撲圖 三,設備技術參數
    的頭像 發表于 09-12 11:12 ?391次閱讀
    EtherCAT<b class='flag-5'>主</b><b class='flag-5'>站</b>轉<b class='flag-5'>Modbus</b>-RTU總線協議網關

    Modbus RTU轉CC-Link協議網關(CC-Link轉Modbus RTU)

    遠創智控YC-CCLK-RTU型網關實現了CC-LinkModbus RTU(
    的頭像 發表于 09-07 14:59 ?525次閱讀
    <b class='flag-5'>Modbus</b> RTU轉CC-Link協議網關(CC-Link轉<b class='flag-5'>Modbus</b> RTU)

    EtherCATModBus TCP總線協議轉換網關配置詳情

    ? EtherCATModBus TCP 如何實現有效連接與通信,這一問題常常讓許多人感
    的頭像 發表于 08-27 15:48 ?335次閱讀
    EtherCAT<b class='flag-5'>主</b><b class='flag-5'>站</b><b class='flag-5'>ModBus</b> TCP<b class='flag-5'>從</b><b class='flag-5'>站</b>總線協議轉換網關配置詳情

    Modbus-TCP轉CC-Link IEFB協議網關(YC-CCLKIE-TCP)

    一,設備主要功能 遠創智控YC-CCLKIE-TCP型網關是自主研發的一款CC-Link IE FB功能的通訊網關。該產品主要功能是各種Modbus-TCP設備接入到CC-Lin
    的頭像 發表于 08-26 11:40 ?405次閱讀
    <b class='flag-5'>Modbus</b>-TCP<b class='flag-5'>主</b><b class='flag-5'>站</b>轉CC-Link IEFB協議網關(YC-CCLKIE-TCP)

    EtherCATModbus TCP協議網關(JM-ECTM-TCP)

    交互。 應用廣泛:支持EtherCAT接口的馬達、機械手臂、IO模塊、電機等等。EtherCATModbus TCP的廣泛應用,有
    的頭像 發表于 08-21 10:35 ?459次閱讀
    EtherCAT<b class='flag-5'>主</b><b class='flag-5'>站</b>轉<b class='flag-5'>Modbus</b> TCP<b class='flag-5'>從</b><b class='flag-5'>站</b>協議網關(JM-ECTM-TCP)

    Modbus TCP轉Profinet協議網關(JM-PNM-TCP)

    捷米特JM-PNM-TCP網關能夠實現了Modbus TCP和Profinet(簡稱 PN)。網關作為
    的頭像 發表于 08-20 11:51 ?348次閱讀
    <b class='flag-5'>Modbus</b> TCP轉Profinet<b class='flag-5'>主</b><b class='flag-5'>站</b>協議網關(JM-PNM-TCP)

    Modbus(TCP)轉Profinet協議網關(JM-TCP-PN)

    的PLC設備需要與采用Modbus TCP協議的遠程上位機或其他設備進行通信時,ProfinetM
    的頭像 發表于 08-20 11:41 ?460次閱讀
    <b class='flag-5'>Modbus</b>(TCP)轉Profinet<b class='flag-5'>從</b><b class='flag-5'>站</b>協議網關(JM-TCP-PN)

    Profibus DPModbus網關連接智能化電表通訊

    Profibus DPModbus網關(XD-MDPBM20),是實現不同工業通信協議之間互聯互通的設備,主要將Profibus DP協議轉換為
    的頭像 發表于 07-02 18:44 ?2693次閱讀
    Profibus DP<b class='flag-5'>主</b><b class='flag-5'>站</b>轉<b class='flag-5'>Modbus</b>網關連接智能化電表通訊

    ProfibusDPModbus模塊連接綜合保護裝置配置案例

    何使用ProfibusDPModbus模塊(XD-MDPBM20)來連接綜合保護裝置(綜保),實現數據交換和遠程控制。通過配置ProfibusDP
    的頭像 發表于 06-28 11:32 ?482次閱讀
    ProfibusDP<b class='flag-5'>主</b><b class='flag-5'>站</b>轉<b class='flag-5'>Modbus</b>模塊連接綜合保護裝置配置案例

    ProfibusDP協議轉Modbus協議模塊連接稱重儀配置案例

    工業自動化中,ProfibusDPModbus模塊(XD-MDPBM20)用于連接稱重儀,可以實現不同設備之間的數據交換和通信。Pr
    的頭像 發表于 06-28 11:12 ?338次閱讀
    ProfibusDP<b class='flag-5'>主</b><b class='flag-5'>站</b>協議轉<b class='flag-5'>Modbus</b>協議模塊連接稱重儀配置案例

    Profibus DP協議轉Modbus協議模塊連接馬達保護器案例

    Profibus DPModbus模塊參數,可以確保Profibus DPModbus
    的頭像 發表于 06-27 09:53 ?547次閱讀
    Profibus DP<b class='flag-5'>主</b><b class='flag-5'>站</b>協議轉<b class='flag-5'>Modbus</b>協議模塊連接馬達保護器案例

    esp32當modbus-rtu slave通訊,收不到的響應報文是哪里的問題?

    有朋友測試過esp32當 modbus slave(我拿的esp32當,用的是RTU模式)嗎? 我用
    發表于 06-17 07:39

    如何在PSoC 5LP中實現MODBUS RTU()?

    我正在開發 PSoC 5LP 板 (CY8CKIT-050),想知道如何在 PSoC 5LP 中實現 MODBUS RTU()。
    發表于 05-20 07:01
    主站蜘蛛池模板: 午夜影视啪啪免费体验区深夜 | 免费人成年激情视频在线观看 | 97影院理论在线观看 | 222aaa天堂| 我想看三级特黄 | 久久久国产精品网站 | 特级毛片aaaa免费观看 | 国产高清在线视频 | 日本不卡高清免费v日本 | 日本不卡一区二区三区视频 | 色系视频在线观看免费观看 | 免费观看在线视频 | 三级视频网 | 久久久久久久国产精品影院 | 欧美满足你的丝袜高跟ol | 激情综合色综合久久综合 | 澳门久久精品 | 国产精品亚洲一区二区三区在线播放 | 色丁香在线 | 五月激情婷婷综合 | 国产精品久久自在自2021 | 免费在线观看视频 | 天天噜日日噜夜夜噜 | 亚洲成网站www久久九 | 午夜精品久久久久久久久 | 免费爱爱视频 | sis色中色 | xxxx欧美69免费 | 日本黄大乳片免费观看 | 操美女视频网站 | 精品二区| 激情网址在线观看 | 天天成人 | videosgratis乱色欧美野外 | 丁香六月激情综合 | 午夜视频网站在线观看 | 美女国产精品 | 久久精品隔壁老王影院 | 手机免费看大片 | 国产你懂的视频 | 色屋在线 |