国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    2457

    瀏覽量

    83288
  • Arduino
    +關注

    關注

    190

    文章

    6526

    瀏覽量

    196982
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    兩個RS485(Modbus RTU)之間如何通訊

    本產品能很好解決Master-1向模塊寫入數據,Master-2讀取數據;Master-2
    的頭像 發表于 02-08 15:32 ?663次閱讀
    兩個RS485(<b class='flag-5'>Modbus</b> RTU)<b class='flag-5'>主</b><b class='flag-5'>站</b>與<b class='flag-5'>主</b><b class='flag-5'>站</b>之間如何通訊

    模擬秘籍:Air8000實現Modbus服務器的深度教程

    Air8000開發板配置為Modbus,能高效模擬服務器響應請求。本篇圍繞slave_
    的頭像 發表于 10-28 16:32 ?609次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>站</b>模擬秘籍:Air8000實現<b class='flag-5'>Modbus</b>服務器的深度教程

    Modbus和Profinet“鬧別扭”,機械手臂連接困境怎么解?

    在智能自動化行業,工程師們常常面臨設備通信協議不兼容的難題。今天就來聊聊Modbus轉Profinet
    的頭像 發表于 10-17 14:50 ?283次閱讀
    <b class='flag-5'>Modbus</b><b class='flag-5'>從</b><b class='flag-5'>站</b>和Profinet<b class='flag-5'>主</b><b class='flag-5'>站</b>“鬧別扭”,機械手臂連接困境怎么解?

    精準配料:PROFINETMODBUS RTU集成方案

    的集成尤為常見。本文基于工程實踐,探討如何通過PROFINETMODBUS RTU
    的頭像 發表于 10-16 09:12 ?266次閱讀
    精準配料:PROFINET<b class='flag-5'>從</b><b class='flag-5'>站</b>與<b class='flag-5'>MODBUS</b> RTU<b class='flag-5'>主</b><b class='flag-5'>站</b>集成方案

    Modbus RTU轉Profibus DP總線協議轉換網關

    :本產品廣泛應用于RS485接口的變頻器、上位機、儀表等等。在化工、制藥等流程工業中,網關能夠各種工藝參數監測設備的Profibus DP信號轉換為Modbus RTU
    的頭像 發表于 09-23 15:12 ?514次閱讀
    <b class='flag-5'>Modbus</b> RTU<b class='flag-5'>主</b><b class='flag-5'>站</b>轉Profibus DP<b class='flag-5'>從</b><b class='flag-5'>站</b>總線協議轉換網關

    穩聯技術的Profinet轉Modbus轉換網關與信捷PLC的連接配置進行了案例分析

    本案例主要針對穩聯技術Modbus轉Profinet網關與信捷PLC連接的配置情況展開研究。在此情境中,西門子1200PLC作為Profinet,信捷PLC作為Modbus
    的頭像 發表于 09-01 18:40 ?614次閱讀
    穩聯技術的Profinet轉<b class='flag-5'>Modbus</b>轉換網關與信捷PLC<b class='flag-5'>從</b><b class='flag-5'>站</b>的連接配置<b class='flag-5'>進行</b>了案例分析

    ProfiNetModbus TCP網關技術詳解

    ProfiNetModbus TCP網關,型號:SG-PNh750-TCP-210。作為工業通信協議轉換的核心設備,實現了Profinet網絡與
    的頭像 發表于 08-19 15:42 ?876次閱讀
    ProfiNet<b class='flag-5'>從</b><b class='flag-5'>站</b>轉<b class='flag-5'>Modbus</b> TCP網關技術詳解

    PLC與遠距離通信:PXB-6030D的妙用

    在工業現場,Modbus串口通信的短距離限制一直是工程師們面臨的難題。本期我們探討如何通過ZLG致遠電子PXB-6030D解決PLC與
    的頭像 發表于 07-17 11:39 ?554次閱讀
    PLC與<b class='flag-5'>從</b><b class='flag-5'>站</b>遠距離<b class='flag-5'>通信</b>:PXB-6030D的妙用

    CANModbus TCP總線協議轉換網關

    、電機、機械手臂等等。CANModbus TCP通信測試與調試是確保其正常運行的關鍵
    的頭像 發表于 07-02 20:11 ?740次閱讀
    CAN<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>總線協議轉換網關

    DeviceNetModbus RTU:電力行業智能化升級的關鍵紐帶

    RTU協議則憑借廣泛兼容性,成為電力監控系統、數據中心的主流通信選擇。JH-DVN-RTU疆鴻智能DeviceNet
    的頭像 發表于 06-10 14:16 ?526次閱讀

    Profibus DPModbus TCP網關接E+H流量計通訊案例

    Protocol)都是廣泛應用于工業通信的兩大協議。本文詳細探討如何實現Profibus DPModbus TCP網關與Endre
    的頭像 發表于 05-14 15:00 ?573次閱讀
    Profibus DP<b class='flag-5'>主</b><b class='flag-5'>站</b>轉<b class='flag-5'>Modbus</b> TCP網關接E+H流量計通訊案例

    基于 DeviceNet 轉 MODBUS RTU 協議的施耐德 PLC 與 ABB 電機驅動器倉儲堆垛機的定位控制優化方案?

    驅動器控制器)的參數匹配。比如,設置地址為 4,通信速率為 9600bps,數據格式為 8 位數據位、無校驗、1 位停止位。? 進行數據映射,
    發表于 05-03 10:45

    Profibus DP如何轉Modbus TCP?

    在現代工業自動化系統中,設備之間的互聯互通至關重要。Profibus DP 和 Modbus TCP?是兩種常見的通信協議,分別應用于不同的場景。為了實現這兩種協議的相互轉換,Profibus DP
    的頭像 發表于 04-11 15:58 ?725次閱讀
    Profibus DP<b class='flag-5'>主</b><b class='flag-5'>站</b>如何轉<b class='flag-5'>Modbus</b> TCP?

    Profibus DPModbus TCP網關配置文件制作

    Profibus DPModbus TCP網關配置文件制作
    的頭像 發表于 04-02 13:06 ?776次閱讀
    Profibus DP<b class='flag-5'>主</b><b class='flag-5'>站</b>轉<b class='flag-5'>Modbus</b> TCP網關配置文件制作

    EtherCATModbus網關參數介紹

    EtherCAT和Modbus是工業自動化領域廣泛使用的兩種通信協議,它們在數據傳輸速度、實時性等方面各有特點。 然而,隨著工業4.0的推進,不同設備之間的通信需求變得日益復雜,單一的通信
    的頭像 發表于 03-19 15:08 ?589次閱讀
    EtherCAT<b class='flag-5'>從</b><b class='flag-5'>站</b>轉<b class='flag-5'>Modbus</b>網關參數介紹