Close Menu
Smart Industry VN
  • About us
  • Smart Business
  • Digital Supply Chain
  • Smart Factory
  • Automation & Robotics
  • Technology
  • Latest News
Facebook X (Twitter) Instagram
Facebook X (Twitter) Instagram
Smart Industry VN
Facebook X (Twitter) Instagram
  • About us
  • Smart Business
  • Digital Supply Chain
  • Smart Factory

    Định hình lại tương lai của sản xuất hàng không vũ trụ

    23/09/2026

    Universal Robots ra mắt nền tảng thế hệ mới

    19/09/2026

    Robot hình người thúc đẩy nhu cầu trên toàn chuỗi cung ứng cobot

    15/09/2026

    Giải pháp chuẩn bị đơn hàng robot tiên tiến

    11/09/2026

    Teradyne Robotics khởi kiện JAKA về bằng sáng chế

    30/08/2026
  • Automation & Robotics
  • Technology
  • Latest News
Smart Industry VN
Home»Technology»IoT»Hướng dẫn kết nối Modbus cho Raspberry Pi
IoT

Hướng dẫn kết nối Modbus cho Raspberry Pi

By Smart Factory & IIoT Marketing17/01/2020 IoT 1.704 Views
Facebook Twitter Pinterest LinkedIn Tumblr Email
Share
Facebook Twitter LinkedIn Pinterest Email

Modbus là gì ?

Modbus là một giao thức truyền thông nối tiếp ban đầu được Schneider Electric xuất bản năm 1979 để sử dụng với các bộ điều khiển logic lập trình (PLC) của họ. Modbus nằm ở cấp độ 2 của mô hình OSI và sử dụng kiến ​​trúc chính / phụ (hoặc máy khách-máy chủ). Đơn giản và mạnh mẽ, nó đã trở thành một giao thức truyền thông tiêu chuẩn thực tế, và giờ đây nó là một phương tiện phổ biến để kết nối các thiết bị điện tử công nghiệp. Giao thức truyền thông Modbus trình bày các tính năng sau:

  • Modbus đã được phát triển với các ứng dụng công nghiệp nhiều năm
  • Xuất bản công khai và miễn phí bản quyền
  • Dễ dàng phát triển và bảo trì

Modbus cho phép giao tiếp giữa nhiều thiết bị được kết nối với cùng một mạng, ví dụ như một hệ thống đo nhiệt độ và độ ẩm và truyền kết quả đến máy tính. Nhiều loại dữ liệu được đặt tên từ việc sử dụng nó trong rơle lái xe: đầu ra vật lý một bit được gọi là cuộn dây và đầu vào vật lý một bit được gọi là đầu vào riêng biệt hoặc tiếp điểm.

Danh sách này bao gồm một số cách sử dụng phổ biến nhất của tiêu chuẩn Modbus

  • Nhiều ứng dụng Master-Slave
  • Cảm biến và dụng cụ
  • Mạng công nghiệp
  • Xây dựng và cơ sở hạ tầng
  • Ứng dụng năng lượng và giao thông

A. Modbus Master và Modbus Slave

Trong giao tiếp modbus, trước tiên phải xác định Slave modbus và Slave modbus.
Xem hình ảnh dưới đây:

modbus master và modbus nô lệ cho plc

1. PC / Computer, CNC được định nghĩa là Modbus Master
2. PLC được định nghĩa là Modbus Slave
Modbus Master là một thiết bị Yêu cầu dữ liệu và ghi dữ liệu vào Slave Modbus.
Modbus Slave là một số thiết bị Phản hồi dữ liệu cho Modbus Master.
Một Modbus Master có thể được kết nối lên tới 247 Modbus Slaves.
Mỗi Slave Modbus có một Địa chỉ / ID duy nhất từ ​​1 đến 247.

Một số PLC có thể được sử dụng làm Slave Modbus: Modicon PLC, PLC PLC, Allen Bradley PLC và các loại khác.
Để thử nghiệm, tôi sử dụng PLC PLC S7-200.

B. Mã chức năng Modbus

Để giao tiếp giữa modbus master và modbus Slave sử dụng giao thức modbus, giao thức modbus có một số mã và chức năng của nó.
Danh sách dưới đây cho thấy các mã modbus được Modicon hỗ trợ:

mã chức năng modbus

Tôi sử dụng mã chức năng 03 và mã chức năng 16 để kiểm tra modbus và mã chức năng này được sử dụng phổ biến nhất nói chung. Đối với một mã chức năng khác, vui lòng thử nghiệm , tải xuống giao thức modbus hoàn chỉnh, nhấp vào đây

Mã chức năng 03 của ModBus
Mã chức năng 03 được sử dụng để đọc nội dung nhị phân của Sổ đăng ký trong phạm vi địa chỉ từ 40000 đến 49999 và thường được gọi là 4x.

Các tham số của Mã chức năng 03 / Đọc các thanh ghi giữ:
Yêu cầu / Truy vấn của Modbus Master:
Ví dụ: Tôi muốn đọc các thanh ghi từ địa chỉ bắt đầu 0 trong Slave modbus với địa chỉ 1 và số lượng thanh ghi (số điểm) đọc là 5 thanh ghi.
Mã yêu cầu là:

Mã chức năng Modbus 03 Đọc Giữ đăng ký Yêu cầu truy vấn

Hướng dẫn kết nối Modbus bằng Raspberry Pi

Bước 1: Bill of Material

Hóa đơn vật liệu

  • Raspberry Pi A+, B+, B2 or B3
  • RS422/RS485 serial HAT

Bước 2: Đấu dây

Wiring

Hệ thống dây điện rất đơn giản. Bạn chỉ phải kết nối các đầu A và B của HAT với dòng A và B của hệ thống Modbus. Thiết bị đầu cuối Y và Z không được sử dụng cho loại ứng dụng này. Đối với khoảng cách xa, nên sử dụng các cặp xoắn cho A và B.

Bước 3: Cài đặt công tắc DIP

Cài đặt chuyển mạch nhúng

Our RS422/RS485 HAT comes with 3 DIP switch banks. You have to set these DIP switches for Modbus as shown in the picture above. Switch 1: 1-OFF 2-ON 3-ON 4-OFF

Switch 2: 1-OFF 2-OFF 3-ON 4-ON

Switch 3: 1-OFF or ON* 2-OFF 3-OFF 4-OFF

*Depending of the position of the RS422/RS485 HAT in the Modbus line you have to switch the terminating resistor ON or OFF. Please switch the resistor to ON position only if the HAT is on one end of the bus line. In all other cases switch the terminating resistor OFF.

Bước 4: Giải phóng Line nối tiếp và kích hoạt UART (Raspbian Stretch & Buster)

Cách dễ nhất là sử dụng công cụ raspi-config để chuyển UART sang chân GPIO14 / 15.

  1. take a fresh Raspbian image
  2. sudo raspi-config
  3. goto ‘5 Interfacing Options’
  4. goto ‘P6 Serial’
  5. ‘Would you like a login shell to be accessible over serial?’ –> NO
  6. ‘Would you like the serial port hardware to be enabled?’ –> YES
  7. Finish raspi-config
  8. reboot the Raspberry Pi

Now you can access the UART via /dev/serial0

Bước 5: Cài đặt Software

Software

Bạn sẽ tìm thấy một triển khai Modbus RTU và Modbus ASCII dễ sử dụng và đã thử nghiệm bằng ngôn ngữ Python trên:

http://minimalmodbus.readthedocs.io/en/master/inst…

http://minimalmodbus.readthedocs.io/en/master/usag…

Hướng dẫn Modbus RTU Giao tiếp giữa PLC và Raspberry Pi bằng Python

Giao tiếp Modbus trong các ứng dụng này sử dụng giao tiếp nối tiếp / RS232 và Modbus RTU.
Ứng dụng này sử dụng modbus đơn giản với lập trình Python trên Raspberry Pi và không sử dụng modbus từ bên thứ ba.

Modbus RTU Giao tiếp giữa PLC và Raspberry Pi


Đối với phần cứng được sử dụng trong ứng dụng này:
1. PLC

2. Raspberry Pi (Chỉ dành cho cài đặt, sử dụng: màn hình, bàn phím, chuột, bộ chuyển đổi, đĩa flash)

3. Cáp PLC nối tiếp

4.Mô-đun nối tiếp và

5. Đầu nối chéo. Đối với kết nối giữa PLC và Raspberry Pi, Cài đặt Raspberry Pi (Tự động đăng nhập, Cài đặt PySerial, Cài đặt chân UART, Tự động chạy Python sau khi khởi động):
http://program-plc.blogspot.com/2014/06/home-automation- with-raspberry-pi.html

Kết nối giao tiếp Modbus RTU giữa PLC và Raspberry Pi:

Kết nối PLC và Raspberry Pi


Python Code of Modbus Communication on Raspberry Pi:

import serial

import random

#Sub Program

#CRC Calculation

def CRCcal(msg):

#CRC (Cyclical Redundancy Check) Calculation

CRC = 0xFFFF

CRCHi = 0xFF

CRCLo = 0xFF

CRCLSB = 0x00

for i in range(0, len(msg)-2,+1):

CRC = (CRC ^ msg[i])

for j in range(0, 8):

CRCLSB = (CRC & 0x0001);

CRC = ((CRC >> 1) & 0x7FFF)

if (CRCLSB == 1):

CRC = (CRC ^ 0xA001)

CRCHi = ((CRC >> 8) & 0xFF)

CRCLo = (CRC & 0xFF)

return (CRCLo,CRCHi)

#CRC Valdation

def CRCvalid(resp):

CRC = CRCcal(resp)

if (CRC[0]==resp[len(resp)-2]) & (CRC[1]==resp[len(resp)-1]):return True

return False

#Modbus Function Code 16 = Preset Multiple Registers

def Func16Modbus(slave,start,values):

Slave_Address = slave

Function = 16

Starting_Address = start

NumberofRegisters = len(values)

Byte_Count = NumberofRegisters * 2

message = [0 for i in range(9 + 2 * NumberofRegisters)]

#index0 = Slave Address

message[0] = (Slave_Address & 0xFF)

#index1 = Function

message[1] = (Function & 0xFF)

#index2 = Starting Address Hi

message[2] = ((Starting_Address >> 8) & 0xFF)

#index3 = Starting Address Lo

message[3] = (Starting_Address & 0xFF)

#index4 = Number of Registers Hi

message[4] = ((NumberofRegisters >> 8) & 0xFF)

#index5 = Number of Registers Lo

message[5] = (NumberofRegisters & 0xFF)

#index6 = Byte Count

message[6] = (Byte_Count & 0xFF)

for i in range(0, NumberofRegisters):

#Data Hi, index7 and index9

message[7 + 2 * i] = ((values[i] >> 8) & 0xFF)

#Data Lo, index8 and index10

message[8 + 2 * i] = values[i] & 0xFF

#CRC (Cyclical Redundancy Check) Calculation

CRC = CRCcal(message)

#index11= CRC Lo

message[len(message) - 2] = CRC[0]#CRCLo

#index12 = CRC Hi

message[len(message) - 1] = CRC[1]#CRCHi

if ser.isOpen:

ser.write("".join(chr(h) for h in message))

reading = ser.read(8)

response = [0 for i in range(len(reading))]

for i in range(0, len(reading)):

response[i] = ord(reading[i])

if len(response)==8:

CRCok = CRCvalid(response)

if CRCok & (response[0]==slave) & (response[1]==Function):return True

return False

#Modbus Function Code 03 = Read Holding Registers

def Func03Modbus(slave,start,NumOfPoints):

#Function 3 request is always 8 bytes

message = [0 for i in range(8)]

Slave_Address = slave

Function = 3

Starting_Address = start

Number_of_Points = NumOfPoints

#index0 = Slave Address

message[0] = Slave_Address

#index1 = Function

message[1] = Function

#index2 = Starting Address Hi

message[2] = ((Starting_Address >> 8)& 0xFF)

#index3 = Starting Address Lo

message[3] = (Starting_Address& 0xFF)

#index4 = Number of Points Hi

message[4] = ((Number_of_Points >> 8)& 0xFF)

#index5 = Number of Points Lo

message[5] = (Number_of_Points& 0xFF)

#CRC (Cyclical Redundancy Check) Calculation

CRC = CRCcal(message)

#index6= CRC Lo

message[len(message) - 2] = CRC[0]#CRCLo

#index7 = CRC Hi

message[len(message) - 1] = CRC[1]#CRCHi

if ser.isOpen:

ser.write("".join(chr(h) for h in message))

responseFunc3total = 5 + 2 * Number_of_Points

reading = ser.read(responseFunc3total)

response = [0 for i in range(len(reading))]

for i in range(0, len(reading)):

response[i] = ord(reading[i])

if len(response)==responseFunc3total:

CRCok = CRCvalid(response)

if CRCok & (response[0]==slave) & (response[1]==Function):

#Byte Count in index 3 = responseFunc3[2]

#Number of Registers = byte count / 2 = responseFunc3[2] / 2

registers = ((response[2] / 2)& 0xFF)

values = [0 for i in range(registers)]

for i in range(0, len(values)):

#Data Hi and Registers1 from Index3

values[i] = response[2 * i + 3]

#Move to Hi

values[i] <<= 8

#Data Lo and Registers1 from Index4

values[i] += response[2 * i + 4]

negatif = values[i]>>15

if negatif==1:values[i]=values[i]*-1

return values

return ()

#Main Program

#Serial Port 9600,8,E,1

#Serial Open

try:

ser = serial.Serial(

port = '/dev/ttyAMA0',

baudrate = 9600,

bytesize = serial.EIGHTBITS,

parity = serial.PARITY_EVEN,

stopbits = serial.STOPBITS_ONE,

timeout = 0.2

)

except Exception, e:

raise ValueError(e)

print "START"

while 1:

#Serial Open Check

if not ser.isOpen:ser.open()

#Read of Registers

Func03ArrayValue = Func03Modbus(1,0,2);#slave,start,number of registers

if len(Func03ArrayValue)>0:

for i in range(0, len(Func03ArrayValue)):

print "Read of Registers" + str(i) + " = " + str(Func03ArrayValue[i])

#Fill Random Value for Write

totalvalue=2

val = [0 for i in range(totalvalue)]

for i in range(0, len(val)):

val[i] = random.randrange(-32767,32767) #Random Valiue from -32767 to max 32767

#Write of Registers

WriteValid = Func16Modbus(1,2,val)#slave,start,array value

if WriteValid:

for i in range(0, len(val)):

print "Write of Registers" + str(i) + " = " + str(val[i])

print "#################################"

Download and Testing:
1. Download project file for Python on Raspberry pi, click here
On Raspberry Pi: Copy the file plc-modbus.py into /home/pi

2. Download PLC Ladder Programming for upload to PLC, click here

edge computing iiot Modbus
Smart Factory & IIoT Marketing
  • Facebook
  • X (Twitter)
  • LinkedIn

SmartFactoryVN là trang thông tin công nghệ chia sẻ thông tin để thúc đẩy quá trình chuyển đổi số đang diễn ra trong lĩnh vực sản xuất và các ngành công nghiệp, thể hiện bằng sự hội tụ của thông tin và công nghệ vận hành cũng như các xu hướng công nghệ mới như Internet Công nghiệp (IIoT ), phân tích dữ liệu lớn và AI.

Bài liên quan

Đại học Bách khoa Singapore ra mắt nền tảng chuyển đổi thành hành động

27/07/2026

Các mô hình của Quỹ Robotics sẽ kích hoạt thị trường trị giá 150 tỷ USD vào năm 2036

26/07/2026

Worldsensing ra mắt tiêu chuẩn mới cho giám sát công nghiệp và địa kỹ thuật

24/07/2026

Nguồn cung AC-DC LBA nhỏ gọn mới dành cho các thiết kế công nghiệp hạn chế Lĩnh vực

23/07/2026
Add A Comment

Comments are closed.

Smart Factory

Hệ thống thực thi sản xuất (MES) là gì ? Vì sao doanh nghiệp sản xuất cần hệ thống MES ?

27/02/2020

SCADA là gì ? Khi nào cần 1 hệ thống SCADA ?

19/01/2019

Hệ thống điều độ sản xuất APS là gì ? Ứng dụng của hệ thống APS là gì ?

12/01/2019

Số lượng đặt hàng kinh tế (EOQ) và Công thức tính EOQ

22/04/2023

20 công cụ sản xuất tinh gọn

17/07/2020

Quản lý vòng đời sản phẩm (PLM) là gì ? Vai trò của PLM đối với doanh nghiệp là gì ?

24/10/2020

Những vấn đề cơ bản về Quản lý khu vực sản xuất (Shop floor management)

19/04/2019

7 ví dụ về trí tuệ nhân tạo trong các ngành công nghiệp khác nhau

26/02/2019
AI & Automation

Đại học Bách khoa Singapore ra mắt nền tảng chuyển đổi thành hành động

27/07/2026

Các mô hình của Quỹ Robotics sẽ kích hoạt thị trường trị giá 150 tỷ USD vào năm 2036

26/07/2026

Worldsensing ra mắt tiêu chuẩn mới cho giám sát công nghiệp và địa kỹ thuật

24/07/2026

Nguồn cung AC-DC LBA nhỏ gọn mới dành cho các thiết kế công nghiệp hạn chế Lĩnh vực

23/07/2026

Thời tiết là thông tin vận hành để khắc phục vấn đề gây gián đoạn lớn nhất trong ngành xây dựng

21/07/2026

Nhân viên giảm thiểu các quy tắc chi phí khi khoảng cách về niềm tin ngày càng lớn, các phát hiện đồng thuận từ SAP

20/07/2026

Sun Group giới thiệu nền tảng khách hàng thân thiết hợp nhất kết nối toàn bộ hệ sinh thái

18/07/2026

Sự thay đổi dẫn dắt bởi AI trong xu hướng công nghệ chuỗi cung ứng năm 2026

17/07/2026
Bài Mới Nhất

Định hình lại tương lai của sản xuất hàng không vũ trụ

23/09/2026

Universal Robots ra mắt nền tảng thế hệ mới

19/09/2026

Robot hình người thúc đẩy nhu cầu trên toàn chuỗi cung ứng cobot

15/09/2026

Giải pháp chuẩn bị đơn hàng robot tiên tiến

11/09/2026

Teradyne Robotics khởi kiện JAKA về bằng sáng chế

30/08/2026
Thẻ
AGV AI Automation BIG DATA Blockchain chuyen doi so cong nghiep data data analytics digital supply chain digital transformation digital twin edge computing ERP ESG Gartner iiot Iot kinh tế kinh tế xanh Kết nối Machine learning MES MOM Nghiên cứu ABI paperless factory phan tich du lieu Phát triển bền vững PLM RFID robotics RTLS san xuat scada smart factory smart warehouse so hoa Supplychain Management số hoá chuỗi cung ứng Tri tue nhan tao tu dong hoa warehouse Management WMS xe điện đầu tư vào Việt Nam
Smart Industry Vietnam

Smart Industry Vietnam là trang Tin công nghệ chia sẻ thông tin để thúc đẩy quá trình chuyển đổi kỹ thuật số đang diễn ra trong lĩnh vực sản xuất và các ngành liên quan, thể hiện bằng sự hội tụ của thông tin và công nghệ vận hành cũng như các xu hướng công nghệ mới như Internet Công nghiệp (IIoT ), phân tích dữ liệu lớn và AI.

 

Bài Viết Mới

Các mô hình của Quỹ Robotics sẽ kích hoạt thị trường trị giá 150 tỷ USD vào năm 2036

26/07/2026

Sự thay đổi dẫn dắt bởi AI trong xu hướng công nghệ chuỗi cung ứng năm 2026

17/07/2026

Trung Quốc đứng đầu trong cuộc đua trí tuệ nhân tạo toàn cầu

09/07/2026

Subscribe to Updates

Get the latest creative news from Smart Industry Vietnam

Type above and press Enter to search. Press Esc to cancel.