Mến chào tất cả các bạn, trong bài viết này mình và các bạn sẽ cùng nhau tìm hiểu về một loại giao thức thường dùng trong các ứng dụng tự động hóa. Đó chính là Modbus RTU, là một loại giao thức cao cấp và hiện đại được dùng khá phổ biến hiện nay trong công nghiệp. Chính vì chúng được sử dụng nhiều nên cũng không ít bạn cần tìm hiểu về chúng và mục đích mình viết bài viết này cũng xuất phát từ đó. Trong bài viết chúng ta sẽ có thể biết thêm các kiến thức liên quan về Modbus RTU là gì ? Cấu tạo ? Phân loại ? Cách thức hoạt động của nó ra sao ? Các ưu nhược điểm và các ứng dụng thường thấy nhất. Từ đó chúng ta sẽ có thêm thông tin nhằm phục vụ cho việc học và công việc nhé.
Modbus RTU là gì ?
Modbus được hiểu đơn giản là một giao thức truyền thông nối tiếp ban đầu được Modicon (nay là 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). Modbus đã trở thành một giao thức truyền thông tiêu chuẩn thực tế và hiện là phương tiện phổ biến để kết nối các thiết bị điện tử công nghiệp. Modbus được sử dụng khá phổ biến trong môi trường công nghiệp vì nó được xuất bản công khai và miễn phí bản quyền. Nó được phát triển cho các ứng dụng công nghiệp, tương đối dễ triển khai và bảo trì so với các tiêu chuẩn khác và đặt ra một vài hạn chế ngoài kích thước trên định dạng của dữ liệu được truyền. Giao thức Modbus RTU là một giao thức mở, sử dụng đường truyền vật lý RS-232 hoặc RS-485 và mô hình dạng Master-Slave.
Modbus RTU là gì ?
Việc phát triển và cập nhật các giao thức Modbus đã được Tổ chức Modbus quản lý kể từ tháng 4 năm 2004, khi Schneider Electric chuyển giao quyền cho tổ chức đó. Tổ chức Modbus là một hiệp hội của người dùng và nhà cung cấp các thiết bị tuân thủ Modbus ủng hộ việc tiếp tục sử dụng công nghệ.
Với giao thức Modbus sẽ cho phép liên lạc 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 cảm biến đo nhiệt độ, cảm biến đo độ ẩm, cảm biến mực nước và sau đó sẽ truyền tín hiệu kết quả đến máy tính. Modbus thường được sử dụng để kết nối một máy tính giám sát với một thiết bị đầu cuối từ xa (RTU) trong các hệ thống điều khiển giám sát và thu thập dữ liệu (SCADA). Nhiều loại dữ liệu được đặt tên từ việc sử dụng logic Ladder trong ngành và 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.
Phân biệt giữa RS-232 và RS-48 như thế nào ?
Với RS-232:
RS-232 hay còn được gọi với cái tên khác là cổng COM thường được sử dụng trong các máy tính để bàn và tất cả chúng đều sử dụng cổng truyền thông theo tiêu chuẩn RS-232 để kết nối với các thiết bị như máy in hay các loại máy fax,…RS-232 sẽ sử dụng 3 dây bao gồm: Tx (truyền tín hiệu), Rx (nhận tín hiệu) và GND (đất). Chúng sẽ hoạt động dựa trên thị chênh lệch áp giữa TX, RX và GND.
Đặc điểm:
- Khoảng cách truyền tối đa lên đến 15m
- Tốc độ truyền là 20Kbps
- Có hỗ trợ kết nối điểm – điểm trên một mạng
Nhược điểm:
- Không thể truyền đi xa do mất mát tín hiệu và không có khả năng phục hồi lại
- Việc kết nối các thiết bị theo chuẩn RS-232 chỉ được thực hiện trong phạm vi 2 thiết bị mà thôi nên rất hạn chế nếu ta dùng đến nhiều thiết bị
Với RS-485:
So với chuẩn RS-232 thì chuẩn RS-485 sẽ sử truyền trên 2 dây A và B mà thôi. Cách thức hoạt động cũng sẽ là so sánh chênh áp giữa A và B theo logic 0 và 1 và không hề so sánh với đất. Việc này rất thích hợp cho các ứng dụng cần truyền tín hiệu đi xa vì giá trị của chúng chỉ là 0 với 1.
Giả sử khi giá trị của A và B lần lượt là A = 1, B = 0 thì dữ liệu nhận biết data = 1. Ngược lại nếu A = 0 và B = 1 thì data = 0. Chính vì hoạt động theo cách trên mà khi truyền đi xa dù có sụt áp thì cũng không ảnh hưởng đến quá trình truyền dữ liệu.
- Chênh áp giữa A và B trong khoảng -6 ÷ 1,6V thì dữ liệu nhận giá trị là 1
- Chênh áp giữa A và B trong khoảng +1,5 ÷ +6V thì dữ liệu nhận giá trị là 0
Cấu tạo của Modbus RTU là gì ?
Thông thường thì một frame truyền Modbus RTU bao gồm: 1 byte địa chỉ – 1 byte mã hàm – n byte dữ liệu – 2 byte CRC được mô tả như hình ở dưới:
- Byte địa chỉ: dùng để xác định thiết bị mạng địa chỉ được nhận dữ liệu (đối với Slave) hoặc dữ liệu nhận được từ địa chỉ nào (đối với Master). Địa chỉ này được quy định từ 0 – 254
- Byte mã hàm: được quy định từ Master, xác định yêu cầu dữ liệu từ thiết bị Slave. Ví dụ mã 01: đọc dữ liệu lưu trữ dạng Bit, 03: đọc dữ liệu tức thời dạng Byte, 05: ghi dữ liệu 1 bit vào Slave, 15: ghi dữ liệu nhiều bit vào Slave …
- Byte dữ liệu: xác định dữ liệu trao đổi giữa Master và Slave.
- Đọc dữ liệu:
- Master: 2 byte địa chỉ dữ liệu – 2 byte độ dài dữ liệu
- Slave: 2 byte địa chỉ dữ liệu – 2 byte độ dài dữ liệu – n byte dữ liệu đọc được
- Ghi dữ liệu:
- Master: 2 byte địa chỉ dữ liệu – 2 byte độ dài dữ liệu – n byte dữ liệu cần ghi
- Slave: 2 byte địa chỉ dữ liệu – 2 byte độ dài dữ liệu
- Byte CRC: 2 byte kiểm tra lỗi của hàm truyền và cách tính giá trị của Byte CRC 16 Bit
Cách thức hoạt động của Modbus RTU là gì ?
Modbus RTU sẽ hoạt động dựa trên nguyên tắc truyền tín hiệu thông qua Master (bên nhận) và Slave (bên truyền tín hiệu) thông qua địa chỉ thanh ghi. Các phương thức truyền tín hiệu của modbus có các dạng như RS-232, RS-485, Modbus TCP/IP sẽ truyền thông qua internet. Dùng đường truyền vật lí RS485 nên để giao tiếp được giữa master và slave ta phải cài đặt các thông số về tốc độ truyền baudrate (4800.9600.115200…), số data bit (7-8), bit stop (0-1-2) , Flag Parity kiểm tra chẵn lẻ (None, Event, Odd). Ngoài các thông số trên phản giống nhau giữa master và slave, thì bên master phải biết được ID của slave cần giao tiếp.
Mỗi thiết bị trong mạng modbus sẽ được cung cấp một địa chỉ duy nhất. Trong mạng modbus chỉ có 1 node được gán là Master (ta gọi là Master, các node còn lại gọi là Node) mới có thể khởi tạo lệnh. Trong frame truyền có chứa địa chỉ của thiết bị slave (1 đến 247), chỉ thiết bị có ID tương ứng mới đáp ứng, mặc dù các thiết bị khác có thể nhận được nó (một ngoại lệ là các lệnh có thể phát được cụ thể được gửi đến nút 0, được thực hiện nhưng không được xác nhận). Tất cả các lệnh Modbus chứa thông tin tổng kiểm tra (check sum CRC) để cho phép người nhận phát hiện lỗi truyền. Master sẽ đọc và ghi các dữ liệu vào thanh ghi của thiết bị slave.
Cách đấu nối như sau:
- A- (Master) <——> A- (Slave)
- B+ (Master) <——> B+ (Slave)
- GND (Master) <——-> GND (Slave)
Dây GND cần nối trong trường hợp khu vực đấu nối ở vùng nhiều sấm sét, máy móc hoạt động dòng lớn, nhiễu phức tạp…để tránh bị phá hỏng thiết bị hoặc tín hiệu thu được bị sai. Điện thế chênh lệch giữa GND hai bên tối đa là 7V. Nếu thiết bị cần đọc là một đồng hồ điện (ví dụ Select MFM383A) thì mạch arduino của chúng ta sẽ làm master để truy xuất vào đọc thanh ghi của nó. Các thông số baud rate, data bit, bit stop, parity chúng ta phải cài đặt đồng bộ giữa mastter và slave. Thông thường với các slave là đồng hồ điện, đồng hồ nước, cảm biến..chúng ta sẽ xem chúng ở màn hình cài đặt hay ở manual, datasheet của thiết bị. Ở phần code arduino chúng ta sẽ chỉnh sửa các thông tin đó cho giống trên thiết bị hoặc với các thiết bị có LCD đa số chúng ta đều set được các thông số đó cho salve. Nếu cần đọc các thanh ghi chứa dữ liệu của slave chúng ta sẽ dùng các function code 01, 02, 03, 04.
- FC01: đọc trạng thái coil, một coil là một giá trị output. Số coil numbers kéo dài từ 0 00001 đến 0 65536 ,
- FC02: đọc trạng thái input, số discrete input kéo dài từ 1 00001 đến 1 65536,
- FC04: đọc các input register, số input register trải dài từ 3 00001 đến 3 65536,
- FC03: đọc các holding register, số holding register trải dài từ 4 00001 đến 4 65536.
Khi xem manual ta thường chú ý tới địa chỉ thanh ghi nào chứa dữ liệu gì.
Nhìn vào hình này chúng ta sẽ thấy địa chỉ 30002 chứa giá trị điện áp V2N , vậy ta sẽ hiểu địa chỉ ở đây là 0x02, Function code là 04, kiểu dữ liệu là float, độ dài thanh ghi là 2. Để tránh nhầm lẫn giữa function code và địa chỉ thanh ghi người ta quy định độ dài FC+ADDRESS là 6, ở hình trên ta thấy độ dài của 30002 là 5 ta sẽ hiểu rằng 030002, vậy FC là 03, addr là 2. Mỗi thanh ghi sẽ là 2 byte, ở đây theo ví dụ trên thì dữ liệu có độ dài 2 thanh ghi nghĩa là 4 byte. Gọi 4 byte đó là A,B,C,D vậy có thể dữ liệu được lưu trong thanh ghi sẽ là ABCD với AB lưu ở thanh ghi địa chỉ thấp, CD lưu ở thanh ghi địa chỉ cao. Hoặc cũng có thể là CDAB… Vì vậy chỉ biết kiểu dữ liệu thôi là chưa đủ, chúng ta cần phải biết dữ liệu đang được lưu dạng nào.
Một chú ý khi chúng ta làm việc với các device hỗ trợ truyền thông modbus là ở các device dữ liệu sẽ nằm trong các thanh ghi có địa chỉ tờ 1 tới 10000, nhưng ở trong frame truyền (Modbus message) các điịa chỉ được dùng giữa 0 tới 9999 vì vậy ở đây chúng ta sẽ phải ofset nếu muốn đọc/ghi tới chính xác địa chỉ cần làm việc. Ví dụ các bạn muốn đọc thanh ghi 30069 (FC04, địa chỉ 69 DEC) thì trong frame truyền chúng ta sẽ chỉ định giá trị là 68. .
Có bao nhiêu loại Modbus khác nhau ?
Ngoài Modbus RTU thì chúng ta còn có nhiều loại Modbus khác như Modbus TCP, Modbus ASCII, Modbus UDP, Modbus Plus, Pemex Modbus, Enron Modbus. Và đặc điểm của từng loại như sau:
- Modbus Plus – (Modbus +, MB + hoặc MBP) – Modbus Plus: là độc quyền của Schneider Electric và không giống như các biến thể khác, nó hỗ trợ liên lạc ngang hàng giữa nhiều chủ. Nó đòi hỏi một bộ đồng xử lý chuyên dụng để xử lý xoay vòng mã thông báo giống như HDLC nhanh . Nó sử dụng cặp xoắn với tốc độ 1 Mbit/s và bao gồm cách ly máy biến áp ở mỗi nút, làm cho nó chuyển đổi và kích hoạt cạnh thay vì kích hoạt điện áp – cấp độ.
- Enron Modbus: là một phần mở rộng khác của Modbus tiêu chuẩn được phát triển bởi Enron Corporation.
- Modbus TCP: sự khác nhau cơ bản giữa Modbus RTU và MODBUS TCP (hay còn được gọi là modbus IP, Modbus Ethernet hay Modbus TCP/IP) là Modbus TCP chạy ở cổng vật lý Ethernet trong khi đó Modbus RTU thì chạy ở cổng vật lý serial nối tiếp (RS232 hoặc RS485).
- Modbus ASCII: cho phép người đọc có thể đọc trực tiếp tin nhắn trong bản tin. Modbus ASCII không thể giao tiếp với modbus RTU và ngược lại.
- Modbus UDP: đã có một số người đã thử nghiệm sử dụng Modbus qua UDP trên mạng IP, loại bỏ các thủ tục cần thiết cho TCP.
- Pemex Modbus: là một phần mở rộng của Modbus tiêu chuẩn, nó được thiết kế cho công ty dầu khí Pemex để sử dụng trong kiểm soát quá trình và không bao giờ được áp dụng rộng rãi.
Các ưu nhược điểm của Modbus RTU là gì ?
Việc sử dụng các loại thiết bị, máy móc bao giờ cũng có những điểm tốt và điểm chưa tốt đúng không nào. Và trong giao thức truyền tín hiệu cũng không ngoại lệ, mình sẽ liệt kê một số ưu và nhược điểm của cách thức truyền tín hiệu này để các bạn có thể hiểu thêm nhé.
Ưu điểm:
- Có thể dùng cho nhiều loại thiết bị có chung cổng Modbus RTU
- Giảm số lượng dây kết nối về cho PLC, tối ưu hóa không gian nhà xưởng hay nơi làm việc.
- Tiết kiệm một số lượng lớn module mở rộng PLC.
- Ổn định và ít bị nhiễu hơn so với tín hiệu analog 4-20ma
- Các dạng tín hiệu 2 dây RS-485 đều có khả năng truyền đi xa lên đến 1200m mà không sợ mất tín hiệu hay dữ liệu.
- Các module hoạt động độc lập nên sẽ dễ dàng quản lý
Nhược điểm:
- Tín hiệu sẽ chậm hơn việc sử dụng trực tiếp như tín hiệu analog hay digital
- Chỉ phù hợp cho các điều khiển có thời gian từ 1s trở xuống
- Cần trang bị một PLC hay Scada có cấu hình mạnh để đọc hết các thanh ghi của nhiều modbus
Các ứng dụng thường thấy của Modbus RTU là gì ?
Ở cộng đồng arduino chúng ta thì việc sử dụng modbus rtu chưa nhiều nhưng ở mảng điện công nghiệp chúng ta sẽ rất dễ bắt gặp các thiết bị như cảm biến nhiệt, áp suất, PLC, đồng hộ điện, đồng hồ nước….sử dụng modbus RTU. Cuộc cách mạng 4.0 đã được khởi xướng, cộng đồng IoT, IIoT ngày càng lớn mạnh nên chúng ta sẽ ngày càng thấy nhiều thiết bị điện tử của các anh em chúng ta dần lấn sân sang điện công nghiệp vốn từ lâu chỉ là sân chơi của các thiết bị của các hãng tên tuổi như Mitsu, ABB, Simen, Sneighder, Omron, IFM…. Một vài ứng dụng thường gặp như:
Giả sử để có thể điều khiển hệ thống mạng lưới các quạt làm mát trong trang trại hay các phân xưởng sản xuất. Nếu đấu dây theo các truyền thống chúng ta sẽ kéo từng cặp dây nguồn từ tủ điện trung tâm tới quạt. Các bạn có thể tưởng tượng số lượng quạt lên tới 30 cái thì chúng ta phải kéo 30 dây nguồn tới 30 cái quạt mới có thể điều khiển độc lập và bật/tắt từng cái. Hoặc nếu chỉ kéo một dây nguồn nhưng lại sử dụng 30 công tắc để cấp nguồn cho từng quạt thì mỗi khi muốn bật/tắt quạt nào chúng ta phải tới vị trí từng quạt đó rất mất thời gian.
Vậy giải pháp tối ưu nhất là ta chỉ cần kéo dây 4 lõi với 2 dây A,B của truyền thông modbus rtu và 2 dây nguồn là đã có thể đáp ứng đủ yêu cầu bật tắt từng mà không cần kéo từng dây nguồn từ tủ điện tới từng quạt. Tại mỗi quạt ta có một node slave, với 30 quat ta sẽ có 30 slave id từ 1 tới 30. Vì vậy sẽ tiết kiệm được thời gian triển khai dự án, đỡ nguy hai khi kéo một lưới điện âm sàn, âm tường, hay treo như một mạng nhện trên đầu, tiềm ẩn nguy cơ chập cháy. Ngoài tiết kiệm thời gian, công sức thi công chúng ta còn tiết kiệm được một lượng lớn dây điện đủ để bù vào chi phí tạo ra các node modbus rtu. Mở rộng ra với ứng dụng vào các device như hệ thống van nước trong vườn, đồng hồ điện năng tiêu thụ từng phòng, từng nhà trong building….
Bộ chuyển tín hiệu analog 4-20ma sang modbus rtu:
Mình xi giới thiệu đến các bạn dòng chuyển đổi tín hiệu từ các thiết bị có ngõ ra dạng analog 4-20ma sang dạng modbus rtu một cách nhanh chóng. Sản phẩm được bên mình nhập khẩu từ Cộng Hoà Séc với khả năng chuyển đổi tín hiệu chính xác và khả năng chống nhiễu tín hiệu cao. Thiết bị có thể chuyển đổi tín hiệu từ các loại như:
- Cảm biến áp suất
- Cảm biến đo độ ẩm
- Cảm biến đo mức radar
- Cảm biến đo mức thủy tĩnh
- Cảm biến đo mức điện dung
- Cảm biến đo mức siêu âm.
- Các loại thiết bị có ngõ ra dạng 4-20ma khác,…
Các thông số của bộ chuyển tín hiệu:
- Model: sản phẩm có mã là OMX102UNI
- Xuất xứ: được công ty mình nhập khẩu từ Cộng Hoà Séc
- Ngõ vào: 8 kênh có khả năng nhận các tín hiệu của cảm biến áp suất, cảm biến pt100, cảm biến can nhiệt, cảm biến đo mức liên tục, biến trở hay điện trở,…
- Ngõ ra: là dạng analog 4-20ma, 0-20ma, 0-10vdc, 0-5Vdc.. Giao thức Modbus RTU slave Rs485 – 2 dây
- Nguồn cấp: có thể tùy chọn dùng nguồn 10÷40VDC hay 19÷28VAC
- Hệ số cách ly chống nhiễu: 1500VAC, chống nhiễu và cách ly tín hiệu khá tốt
- Tốc độ truyền thông: lên đến 115.000 bps
- Thời gian phản hồi: <10ms rất nhanh, gần như ngay lập tức
- Tín hiệu có thể truyền đi xa lên đến 1.200m