Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 10

Nguyễn Hoàng Sang

Lớp: 21TDHCLC1
Lớp học phần: 21.34

CÂU 1:
 Giới thiệu và mô tả về Modbus RTU:
- Modbus được phát triển ban đầu bởi Modicon (nay là Schneider Electric), Modbus RTU là
một giao thức nối tiếp mở, có nguồn gốc từ kiến trúc master/slave (nay là client/server). Nó là
một giao thức cấp độ nối tiếp được chấp nhận rộng rãi do tính dễ sử dụng và độ tin cậy của
nó. Giao thức MODBUS RTU là một cấu trúc nhắn tin, được sử dụng rộng rãi để thiết lập
giao tiếp chủ-phụ giữa các thiết bị thông minh. Một tin nhắn MODBUS được gửi từ master
đến Slave chứa địa chỉ của Slave, 'lệnh' (ví dụ: 'đọc thanh ghi' hoặc 'ghi thanh ghi'), dữ liệu và
tổng kiểm tra (CRC). này chủ yếu sử dụng giao diện nối tiếp RS-232 hoặc RS-485 để liên lạc
và được hỗ trợ bởi mọi chương trình phần mềm thu thập dữ liệu và máy chủ SCADA, HMI,
PLC, OPC thương mại trên thị trường. Điều này giúp dễ dàng tích hợp thiết bị tương thích
Modbus vào các ứng dụng giám sát và điều khiển mới hoặc hiện có.
- Modbus được coi là giao thức truyền thông hoạt động ở tầng "Application", cung cấp khả
năng truyền thông Master/Slave giữa các thiết bị được kết nối thông qua các bus hoặc
network. Trên mô hình OSI, Modbus được đặt ở lớp 7. Modbus được xác định là một giao
thức hoạt động theo "hỏi/đáp" và sử dụng các "function codes" tương ứng để hỏi đáp.

Hình 1: Minh họa về Mosbus RTU


 Cấu trúc khung Modbus RTU:

- Address Field (1 byte): Trường địa chỉ này này giúp master xác định được nó đang làm việc
là slave nào. Các Slave sẽ được gắn địa chỉ từ 1-247 và phải đảm bảo không có Slave nào
trùng địa chỉ với nhau. Trường này nằm ở vị trí đầu tiên trong một bảng tin Modbus và có
kích cỡ 8 bit.
+ Khi Master gửi Query thì thông tin đầu tiên sẽ là địa chỉ Slave nó muốn làm việc.
+ Trường Device Address của bảng tin Response cũng sẽ phải đúng địa chỉ của Slave đó để
Master biết Slave nào gửi phản hồi.
+ Khi trường Device Address trong bảng tin Query của Master có địa chỉ 0x00, tức đó là
bảng tin Broadcast, tất cả các Slave đều có thể nhận bảng tin đó.
- Function Code (1 byte): Trường này đi theo sau trường Device Address và có kích thước 8
bit, nó sẽ chỉ định hành động Master yêu cầu Slave thực hiện như đọc/ghi một hoặc nhiều dữ
liệu trong thiết bị. Dữ liệu trong các thiết bị Modbus sẽ chia thành các kiểu dữ liệu khác nhau
và nằm trong các Register Type như dưới. Với các tin nhắn Response thông thường, Slave
chỉ cần phản hồi đúng Function Code mà Master đã gửi.
- Data: Trường Data của bảng tin Query chứa các thông tin bổ sung mà Slave phải sử dụng để
thực hiện hành động theo Function Code. Còn đối với tin nhắn Response, trường Data sẽ chứa
dữ liệu được yêu cầu bởi Master.
- Error Check (2 byte): Trường này dùng để kiểm tra lỗi khung truyền, nó chiếm 16-bit tương
ứng với 2 byte. Modbus RTU sử dụng phương pháp Cyclical Redundancy Check(CRC)
- Silent Period: Các bảng tin Modbus khác nhau phải cách nhau một khoản thời gian được gọi
là “silent interval” bằng ít nhất 3.5 thời gian một bảng tin UART. Trong một bảng tin
Modbus, các kí tự (bảng tin UART) phải được truyền liên tục. Nếu có môt khoảng “slient
interval” lớn hơn 1.5 kí tự xuất hiện trong bảng tin, thì bảng tin đó sẽ được cho là không hoàn
thành và thiết bị nhận sẽ bỏ qua nó.
+ Khoảng thời gian im lặng đóng một vai trò quan trọng trong việc đồng bộ hóa khung hình
và giúp đảm bảo việc truyền đáng tin cậy các khung Modbus RTU qua đường truyền thông.

 Địa chỉ Modbus RTU:


Giải quyết Modbus RTU là điều cần thiết để đảm bảo rằng dữ liệu được gửi đến và nhận từ
các thiết bị chính xác. Có nhiều loại địa chỉ khác nhau được sử dụng trong Modbus RTU:

- Địa chỉ nô lệ: Mỗi thiết bị phụ trong mạng được gán một địa chỉ duy nhất, từ 1 đến 247. Thiết
bị chính sử dụng các địa chỉ này để giao tiếp với các thiết bị phụ cụ thể. Các giá trị từ 248 đến
255 được dành riêng cho các mục đích khác.
- Địa chỉ dữ liệu: Modbus RTU sử dụng sơ đồ địa chỉ phân cấp cho dữ liệu, bao gồm bốn loại
đối tượng dữ liệu chính: cuộn dây, đầu vào rời rạc, thanh ghi đầu vào và thanh ghi giữ. Mỗi
đối tượng dữ liệu có một dải địa chỉ cụ thể, cho phép thiết bị chính truy cập dữ liệu mong
muốn trong thiết bị phụ.
+ Có 4 kiểu địa chỉ dữ liệu trong Modbus:
 Coil (hay Discrete Output)
 Discrete Input (hay Status Input)
 Input Register
 Holding Register.
1. Trong đó Coil và Discrete Input có kích thước 1 bit, giá trị của nó có thể là ON (1)
hoặc OFF (0). Discrete Input thường chứa trạng thái của một số đầu vào vật lý, dữ
liệu của chúng chỉ có thể đọc . Phần còn lại đại diện cho các đầu ra, gọi là Discrete
Output Coils, chứa trạng thái của các các đầu ra vật lý, dữ liệu của chúng có thể
đọc hoặc ghi.

2. Đối với các Register, chúng là những thanh ghi 16 bit. Giá trị của chúng nằm trong
khoảng 0x0000 – 0xFFFF theo mã hexadecimal. Register được sử dụng phổ biến
nhất là Holding Register, dữ liệu của chúng có thể được đọc hoặc ghi, có chức
năng lưu trữ dữ liệu cho các thiết bị. Một kiểu khác là Analog Input Register, chỉ
chứa dữ liệu đầu vào tương tự, người dùng chỉ có thể đọc dữ liệu từ loại Register
này.
3. Việc một thiết bị cụ thể nào đó có bao gồm tất cả các loại dữ liệu này hay không
hay bao gồm những loại dữ liệu nào tùy thuộc vào nhà sản xuất thiết bị.
- Trong Modbus RTU, dữ liệu một bit thường được trao đổi giữa các thiết bị sử dụng cuộn dây
hoặc đầu vào rời rạc. Cuộn dây đại diện cho đầu ra, cho phép tín hiệu điều khiển được gửi từ
chủ đến nô lệ, trong khi các đầu vào rời rạc đại diện cho các đầu vào được giám sát bởi nô lệ
và cung cấp thông tin trạng thái cho chủ. Bản chất một bit của Modbus RTU cho phép kiểm
soát và giám sát hiệu quả và chính xác các tín hiệu kỹ thuật số riêng lẻ trong các ứng dụng
công nghiệp.
- Giao tiếp Modbus RTU liên quan đến việc trao đổi dữ liệu thông qua các thanh ghi Modbus,
là các vị trí bộ nhớ được xác định trước trong các thiết bị phụ. Thanh ghi Modbus có thể chứa
nhiều loại dữ liệu khác nhau, chẳng hạn như giữ thanh ghi cho các giá trị số hoặc cuộn dây
cho trạng thái một bit. Thiết bị chính có thể đọc hoặc ghi vào các thanh ghi Modbus này, cho
phép truy cập hiệu quả và được tiêu chuẩn hóa vào dữ liệu quan trọng trong mạng Modbus
RTU.
 Mã chức năng Modbus RTU:
- Mã chức năng đóng một vai trò quan trọng trong giao tiếp Modbus RTU, vì chúng xác định
loại hành động hoặc yêu cầu được thực hiện bởi thiết bị chính. Mỗi mã chức năng tương ứng
với một hoạt động cụ thể, chẳng hạn như đọc hoặc ghi dữ liệu và giúp đảm bảo giao tiếp
chính xác và hiệu quả giữa các thiết bị.
- Có các mã chức năng sau:
-

+ Đọc mã hàm
 Đọc mã chức năng cho phép thiết bị chính yêu cầu dữ liệu từ các thiết bị phụ. Một số mã
hàm đọc phổ biến bao gồm:
 Đọc cuộn dây (0x01): Mã hàm này được sử dụng để đọc trạng thái của nhiều cuộn dây
(đầu ra kỹ thuật số) trong một thiết bị phụ.
 Đọc đầu vào rời rạc (0x02): Mã hàm này được sử dụng để đọc trạng thái của nhiều đầu
vào rời rạc (đầu vào kỹ thuật số) trong một thiết bị phụ.
 Read Holding Registers (0x03): Mã hàm này được sử dụng để đọc các giá trị của nhiều
thanh ghi giữ (đầu ra tương tự) trong một thiết bị phụ.
 Read Input Registers (0x04): Mã hàm này được sử dụng để đọc các giá trị của nhiều
thanh ghi đầu vào (đầu vào tương tự) trong một thiết bị phụ.
+ Viết mã hàm

 Viết mã chức năng cho phép thiết bị chính gửi dữ liệu đến các thiết bị phụ, sửa đổi trạng
thái hoặc cài đặt bên trong của chúng. Một số mã hàm ghi phổ biến bao gồm:
 Viết cuộn dây đơn (0x05): Mã hàm này được sử dụng để ghi trạng thái của một cuộn dây
đơn (đầu ra kỹ thuật số) trong thiết bị phụ.
 Viết một thanh ghi (0x06): Mã hàm này được sử dụng để ghi giá trị của một thanh ghi giữ
duy nhất (đầu ra tương tự) trong một thiết bị phụ.
 Viết nhiều cuộn dây (0x0F): Mã hàm này được sử dụng để ghi trạng thái của nhiều cuộn
dây (đầu ra kỹ thuật số) trong một thiết bị phụ.
 Viết nhiều thanh ghi (0x10): Mã hàm này được sử dụng để ghi các giá trị của nhiều thanh
ghi giữ (đầu ra tương tự) trong một thiết bị phụ.
Bằng cách sử dụng mã chức năng, Modbus RTU đảm bảo rằng thiết bị chính có thể yêu cầu chính xác
dữ liệu từ hoặc gửi dữ liệu đến các thiết bị phụ, tạo điều kiện giao tiếp hiệu quả và đáng tin cậy trong
các hệ thống tự động hóa công nghiệp.
 Xử lý lỗi Modbus RTU
- Xử lý lỗi hiệu quả là rất quan trọng trong Modbus RTU để xác định và giải quyết kịp thời mọi
lỗi giao tiếp giữa thiết bị chính và phụ. Nó cũng đảm bảo trao đổi dữ liệu đáng tin cậy và
chính xác giữa các thiết bị. Modbus RTU sử dụng nhiều cơ chế khác nhau để phát hiện và xử
lý các lỗi có thể xảy ra trong quá trình giao tiếp.
- Phát hiện lỗi
+ Modbus RTU sử dụng kiểm tra dự phòng theo chu kỳ (CRC) để phát hiện lỗi trong dữ liệu
được truyền. CRC là một thuật toán toán học tính toán giá trị tổng kiểm tra dựa trên nội dung của
khung. Người gửi nối tổng kiểm tra này vào khung và người nhận tính toán lại CRC khi nhận khung.
Nếu CRC được tính toán khớp với CRC nhận được, khung được coi là không có lỗi. Nếu không, một
lỗi được phát hiện và người nhận có thể yêu cầu truyền lại. Modbus RTU sử dụng thuật toán CRC 16
bit, cụ thể là CRC-16.
+ Việc triển khai tính toán CRC cho Modbus RTU có sẵn bằng nhiều ngôn ngữ lập trình và
thư viện khác nhau, giúp đơn giản hóa quy trình cho các nhà phát triển. Bằng cách sử dụng cơ chế
CRC, Modbus RTU đảm bảo tính toàn vẹn dữ liệu và tạo điều kiện giao tiếp không có lỗi trong các hệ
thống tự động hóa công nghiệp.
Một phân hồi ngoại lệ gồm hai thành phần như sau:
- Mã chức năng ngoại lệ (Exception Function Code). Trong một phản hồi bình thường, Server
sẽ gửi lại Mà chức năng của do Client yêu cầu. Tất cả các Mã chức năng có bịt đầu tiên bằng
0. Tuy nhiên, trong một phản hồi ngoại lệ, Server đặt MSB của Mã chức năng thành 1
(Exception Function Code Function Code 0x80). Mà chức năng này giúp Client có thể biết
được đoạn phân hồi được gửi là một phản hồi ngoại lệ, nghĩa là đang có lỗi xảy ra, và Client
sẽ kiểm tra giải tra của Mã ngoại lệ
- Mã ngoại lệ (Exception Code): Trong phân hồi bình thường, Server sẽ trà về dữ liệu hoặc số
liệu thống kê trong trường dữ liệu (bất kỳ thông tin nào được Client yêu cầu). Tuy nhiên,
trong một phần hồi ngoại lệ (có lỗi), Server sẽ trà và Mã ngoại lệ để mô tả lỗi xảy ra ở Server.

- Sau đây là ví dụ về phân hồi ngoại lệ từ Server gửi đến Client khi xảy ra lỗi:

• Khi Client gửi yêu cầu đến Server, PDU bao gồm Mã chức năng và Dữ liệu yêu cầu.
• Theo đó Mã chức năng (0x01) tương ứng với chức năng Đọc trạng thái Coil.
• Client yêu cầu bắt đầu đọc tại địa chỉ 1185 (0x04A1) và số lượng Coil cần đọc là 1 (0x0001).
• Do xảy ra lỗi nên Server sẽ trả về một phản hồi ngoại lệ với Mã chức năng ngoại lệ là 0x81.
• Lỗi xảy ra do địa chỉ cần đọc không tồn tại nên Mã ngoại lệ tương ứng là 0x02.
Mỗi lỗi sẽ có Một mã ngoại lệ tương ứng. Bảng dưới đây là mô tả một số loại lỗi có thể xảy ra:

 Thời gian chờ và truyền lại


Trong giao tiếp Modbus RTU, thiết bị chính mong đợi phản hồi từ thiết bị phụ trong một khung thời
gian xác định, được gọi là khoảng thời gian chờ. Nếu thiết bị chính không nhận được phản hồi trong
khoảng thời gian này, nó giả định rằng đã xảy ra lỗi, chẳng hạn như khung bị mất hoặc thiết bị phụ
không phản hồi. Trong những trường hợp như vậy, thiết bị chính có thể cố gắng truyền lại yêu cầu
hoặc thực hiện các hành động thích hợp khác, chẳng hạn như báo cáo lỗi cho người dùng hoặc bắt đầu
quá trình khôi phục lỗi.

Bằng cách sử dụng phát hiện lỗi, mã lỗi và cơ chế hết thời gian chờ, Modbus RTU đảm bảo giao tiếp
đáng tin cậy và chính xác giữa các thiết bị trong hệ thống tự động hóa công nghiệp.

 Triển khai Modbus RTU


Triển khai Modbus RTU trong hệ thống tự động hóa công nghiệp bao gồm một số bước, bao gồm
chọn các thành phần phần cứng và phần mềm phù hợp, định cấu hình thiết bị và thiết lập giao tiếp
giữa các thiết bị. Hiểu các yêu cầu và phương pháp hay nhất để triển khai Modbus RTU là rất quan
trọng để đảm bảo giao tiếp đáng tin cậy và hiệu quả trong hệ thống của bạn.

 Cân nhắc phần cứng


- Chọn các thành phần phần cứng phù hợp cho giao tiếp Modbus RTU là điều cần thiết để triển
khai thành công. Các thành phần phần cứng chính bao gồm:

- Thiết bị chính và phụ: Các thiết bị này, chẳng hạn như bộ điều khiển logic lập trình (PLC),
cảm biến và bộ truyền động, phải hỗ trợ giao tiếp Modbus RTU. Đảm bảo khả năng tương
thích với giao thức Modbus RTU khi chọn thiết bị cho hệ thống của bạn.

- Giao diện giao tiếp nối tiếp: Modbus RTU thường sử dụng đường nối tiếp cho giao tiếp nối
tiếp RS-232 hoặc RS-485. RS-485 là giao diện lớp vật lý thường được sử dụng và được
khuyến nghị cho các ứng dụng công nghiệp do tính mạnh mẽ, khoảng cách giao tiếp dài hơn
và hỗ trợ cho các mạng đa thả.

- Bộ chuyển đổi và cách ly tín hiệu: Trong một số trường hợp, bạn có thể cần bộ chuyển đổi tín
hiệu để thích ứng giữa các giao diện truyền thông hoặc bộ cách ly khác nhau để bảo vệ thiết
bị khỏi nhiễu điện và vòng lặp mặt đất.

- Khi lựa chọn các thành phần phần cứng, hãy xem xét các yếu tố như khoảng cách truyền
thông, cấu trúc liên kết mạng và điều kiện môi trường để đảm bảo hiệu suất và độ tin cậy tối
ưu.

 Cân nhắc phần mềm


- Các thành phần phần mềm đóng một vai trò quan trọng trong giao tiếp Modbus RTU, cho
phép các thiết bị diễn giải và xử lý dữ liệu theo giao thức. Các cân nhắc chính về phần mềm
bao gồm:
+ Thư viện và trình điều khiển Modbus RTU: Chọn thư viện phần mềm và trình điều khiển
hỗ trợ giao tiếp Modbus RTU cho các thiết bị và ngôn ngữ lập trình cụ thể của bạn. Đảm bảo
khả năng tương thích với các thành phần phần cứng và hệ điều hành của bạn.
+ Công cụ cấu hình và chẩn đoán: Sử dụng các công cụ phần mềm hỗ trợ cấu hình thiết bị,
thiết lập mạng và chẩn đoán để hợp lý hóa quy trình triển khai và đơn giản hóa việc khắc phục sự cố.
+ Phát triển ứng dụng tùy chỉnh: Tùy thuộc vào yêu cầu hệ thống của bạn, bạn có thể cần
phát triển các ứng dụng phần mềm tùy chỉnh để quản lý giao tiếp Modbus RTU, xử lý dữ liệu và triển
khai logic điều khiển.
+ Lựa chọn các thành phần và công cụ phần mềm phù hợp là điều cần thiết để giao tiếp
Modbus RTU hiệu quả và đáng tin cậy, cho phép tích hợp liền mạch với hệ thống tự động hóa công
nghiệp của bạn.

 Khắc phục sự cố Modbus RTU


Khắc phục sự cố là một khía cạnh thiết yếu của việc duy trì và tối ưu hóa giao tiếp Modbus RTU
trong các hệ thống tự động hóa công nghiệp. Xác định và giải quyết các vấn đề phổ biến có thể
giúp đảm bảo trao đổi dữ liệu đáng tin cậy và hiệu quả giữa các thiết bị. Dưới đây là một số vấn
đề điển hình và giải pháp của chúng:

- Lỗi giao tiếp giữa thiết bị chính và thiết bị phụ:

Kiểm tra hệ thống dây điện và kết nối giữa các thiết bị, đảm bảo kết thúc và che chắn thích hợp.
Xác minh cấu hình của thiết bị chính và phụ, bao gồm tốc độ truyền, chẵn lẻ và bit dừng.
Đảm bảo rằng địa chỉ thiết bị phụ trong yêu cầu của chủ khớp với địa chỉ thực của thiết bị phụ.
- Giá trị dữ liệu không chính xác hoặc không nhất quán:
+ Kiểm tra sơ đồ địa chỉ dữ liệu, đảm bảo rằng thiết bị chính đang yêu cầu dữ liệu từ các
thanh ghi hoặc cuộn dây chính xác trong thiết bị phụ.
+ Xác minh các loại dữ liệu và các yếu tố tỷ lệ được sử dụng trong giao tiếp, đảm bảo tính
nhất quán giữa các thiết bị chính và phụ.
+ Kiểm tra các nguồn tiếng ồn hoặc nhiễu điện tiềm ẩn có thể làm hỏng dữ liệu được truyền.
- Thời gian chờ hoặc thời gian phản hồi chậm:
+ Điều chỉnh cài đặt thời gian chờ trong thiết bị chính để tính đến độ trễ liên lạc hoặc thiết bị
phụ phản hồi chậm.
+ Kiểm tra cấu trúc liên kết mạng và khoảng cách giao tiếp, đảm bảo rằng chúng nằm trong
giới hạn được chỉ định bởi giao thức Modbus RTU và giao diện truyền thông nối tiếp đã chọn.
+ Tối ưu hóa cơ chế bỏ phiếu được sử dụng bởi thiết bị chính, giảm số lượng yêu cầu hoặc
ưu tiên các thiết bị quan trọng để giảm thiểu thời gian phản hồi.
- Mã lỗi hoặc thông báo ngoại lệ:
+ Phân tích mã lỗi do thiết bị phụ trả về để xác định bản chất của sự cố, chẳng hạn như mã
chức năng bất hợp pháp, địa chỉ dữ liệu không hợp lệ hoặc lỗi thiết bị.
+ Xem lại các yêu cầu của thiết bị chính để đảm bảo chúng hợp lệ và được các thiết bị phụ
hỗ trợ.
+ Kiểm tra các thiết bị phụ để tìm các sự cố phần cứng hoặc phần mềm tiềm ẩn có thể gây ra
lỗi hoặc lỗi.
+ Bằng cách làm theo các mẹo khắc phục sự cố này, tham khảo các thông số kỹ thuật của
giao thức và duy trì cách tiếp cận chủ động để xác định và giải quyết các vấn đề, bạn có thể đảm bảo
độ tin cậy và hiệu quả của giao tiếp Modbus RTU trong hệ thống tự động hóa công nghiệp của mình.
CÂU 2:

 Cấu hình:

I. Master:
a. Khai báo phần Master:

b. Đoạn code phần Master:

II. Slave:
a. Khai báo phần Slave:

b. Đoạn code phần Slave:


trạng thái hiện tại , trend: tốc độ động cơ tốc độ đồng bộ, dữ liệu, cảnh báo, tô màu bla bla

You might also like