You are on page 1of 31

5.1.

MẠNG TRUYỀN THÔNG MODBUS


5.1.1. Tổng quan về mạng truyền thông Modbus
Modbus là một giao thức truyền thông nối tiếp được phát triển bởi Modicon (nay là
Schneider Electric) vào năm 1979 để dử dụng với các bộ điều khiển PLC. Modbus đã trở
thành một giao thức truyền thông chuẩn và bây giờ là một trong những giao thức phổ
biến để kết nối các thiết bị điện tử công nghiệp.
Một số lý do chính để sử dụng Modbus trong môi trường công nghiệp là:
- Giao thức truyền thông mở và miễn phí bản quyền
- Dễ dàng phát triển và bảo trì hệ thống
- Đơn giản trong lắp đặt, cấu hình và cho phép trao đổi dữ liệu cả tín hiệu rời rạc và
tương tự
Modbus cho phép truyền thông nhiều thiết bị khác nhau cùng kết nối trên cùng một
hệ thống mạng, ví dụ như hệ thống đo lường nhiệt độ, độ ẩm và gửi về máy tính chủ. Các
kiểu tín hiệu được sử dụng trong truyền thông modbus như:
- Tín hiệu ngõ ra vật lý với trạng thái 1 bit đơn gọi là Coil. Hỗ trợ trạng thái đọc/ghi
- Tín hiệu ngõ vào vật lý với trạng thái 1 bit đơn gọi là Discrete input. Chỉ hỗ trợ
trạng thái đọc
- Thanh ghi Input register với độ dài dữ liệu là 16 bit. Chỉ hỗ trợ trạng thái đọc
- Thanh ghi Holding resgiter với độ dài dữ liệu là 16 bit. Hỗ trợ trạng thái đọc/ghi
Modbus được thiết kế theo giao thức Master – Slave (với Modbus RTU) và Client –
Server (với Modbus TCP/IP). Điều này sẽ có nghĩa là Master sẽ khởi tạo kết nối và ra
lệnh cho các Slave thực hiện theo yêu cầu của master. Slave sẽ không gửi bất kỳ dữ liệu
nào trên liên kết truyền thông trừ khi được master ra lệnh yêu cầu dữ liệu cụ thể. Mỗi
thiết bị tham gia vào mạng giao tiếp Modbus được cấp một địa chỉ và địa chỉ này không
được lặp lại trong hệ thống mạng.
Các dạng Modbus thông dụng hiện nay:
- Modbus RTU (Serial): RS-232, RS-485, …
- Modbus TCP/IP
- Modbus ASCII
Mỗi dạng Modbus đều có các đặc điểm khác nhau. Tùy theo thiết bị và yêu cầu của
người sử dụng, các loại Modbus sẽ được lựa chọn.
Modbus RTU
Dữ liệu được mã hóa theo hệ nhị phân, và chỉ cần một byte để biểu diễn cho một
byte dữ liệu gốc. Đây là chuẩn giao tiếp lý tưởng đối với RS-232 hay mạng RS- 485 đa
điểm, tốc độ từ 1200 đến 115200 Baud/s. Tốc độ phổ biến nhất là 9600, 38400 hay
115200 Baud/s. Đây là chuẩn Modbus thông dụng nhất. Do Tin nhắn được mã hóa nhị
phân nên không thể đọc được trong quá trình giám sát.
Modbus TCP/IP
Modbus TCP/IP đơn giản là giao thức Modbus sử dụng mô hình TCP/IP. Trong đó,
giao thức Modbus thuộc lớp ứng dụng, xác định dữ liệu cần truyền, TCP là lớp vận
chuyển đảm bảo việc truyền nhận dữ liệu chính xác đến đúng địa điểm thông qua địa chỉ
IP của thiết bị. Với Modbus TCP/IP, dữ liệu được đóng gói trong một gói tin TCP/IP
(gồm dữ liệu và các header) và được truyền qua Ethernet.
Modbus ASCII
Mọi thông tin dữ liệu được chuyển đổi sang dạng Hexadecimal (hệ thập lục phân),
và sử dụng bảng mã ASCII. Việc chuyển đổi này khiến cho một byte dữ liệu gốc thực tế
cần hai byte để biểu diễn, gấp đôi so với Modbus RTU hay Modbus TCP/IP.
Trái ngược với Modbus RTU, người dùng khi sử dụng Modbus ASCIIthì có thể đọc
được nội dung tin nhắn trong quá trình giám sát.
Tuy nhiên, do Modbus ASCII mang nhiều thông tin mã hóa lệnh hơn nên
ModbusASCIIcó tốc độ chậm hơn Modbus RTUvà Modbus TCP/IP, vì vậy thường
không được sử dụng nhiều trong thực tế.
Modbus Gateway
Ngoài ra, khi sử dụng các thiết bị với giao thức Modbus, đặc biệt là Modbus RTU
và Modbus TCP, người dùng sẽ được hỏi về Modbus Gateway.
Vậy Modbus Gateway là gì?
Modbus Gateway hay còn được gọi là Cổng giao tiếp Ethernet (Ethernet
communication gateway). Đây là bộ chuyển đổi giữa Modbus RTU/ASCII và Modbus
TCP/IP. Thông thường Modbus Gateway sẽ có 1 cổng RS-232/RS- 485 dùng cho
Modbus RTU/ASCII và 1 cổng Ethernet dùng cho Modbus TCP/IP.
Modbus TCP/IP có các ưu điểm vượt trội hơn so với Modbus RTU, ví dụ như việc
sử dụng cáp Ethernet tiết kiệm chi phí hơn so với sử dụng cáp cho RS- 232 hay RS-485,
truyền được xa hơn và kết nối được nhiều Client hơn. Trong thực tế, nhiều thiết bị được
điều khiển chỉ được hỗ trợ 1 loại Modbus RTU hoặc Modbus TCP/IP khiến cho việc kết
hợp các thiết bị với nhau trở nên khó khăn. Modbus Gateway thường được sử dụng như
một bộ phiên dịch kết nối các thiết bị vào hệ thống Modbus chung.
5.1.2. Cấu trúc giao thức của Modbus
Modbus Master gửi gói tin để đọc hoặc ghi dữ liệu tới slave và ngược lại. Giao thức
Modbus cũng mở rộng phần tùy chỉnh cho gói tin thay đổi theo yêu cầu người sử dụng.
Định dạng chung các gói tin của Modbus được gọi là ADU bao gồm địa chỉ của
Slave, mã chức năng thực hiện, kích thước dữ liệu và kiểm tra lỗi truyền thông

Hình 5.2. Định dạng chung các gói tin của Modbus
Trong đó:
- AD là một đơn vị dữ liệu ứng dụng tương ứng với một gói tin của Modbus Master
- PDU là một đơn vị giao thức với dữ liệu được Master yêu cầu tới Slave
Định dạng gói tin của RTU và TCP/IP minh họa như hình 5.3.

Hình 5.3. Định dạng gói tin của RTU và TCP/IP

Hình 5.4. Kích thước dữ liệu của gói tin


5.1.3. Mã chức năng – Function Code
Có nhiều mã chức năng cơ bản để thực hiện những ứng dụng cơ bản như đọc, ghi
dữ liệu mô tả như bảng 5.4.
Bảng 5.4. Các mã chức năng để truy xuất dữ liệu của moddus
Kiểu chức năng Tên chức năng Mã chức năng Địa chỉ tuyệt đối
Bit Ngõ vào dạng Bit Đọc bit ngõ vào 02 10001 đến 19999
Đọc bit ngõ ra 01 00001 đến 09999
Ghi vào 1 bit đơn của 05 00001 đến 09999
Ngõ ra dạng Bit ngõ ra
Ghi vào nhiều bit ngõ 15 00001 đến 09999
ra
Ngõ vào dạng Đọc Word ngõ vào 04 30001 đến 39999
Word
Đọc giá trị các thanh 03 40001 đến 49999
ghi Holding
Ghi vào 1 Word của 06 40001 đến 49999
thanh ghi Holding
Ghi nhiều Word của 16 40001 đến 49999
Word
thanh ghi Holding
Thanh ghi Holding
Đọc/ghi nhiều Word 23
của thanh ghi Holding
Xóa/ghi các bit đơn 22
của một thanh ghi
Đọc tuần tự trạng thái 24
FIFO
Một số manual hướng dẫn về thanh ghi Modbus (holding register) của một số nhà
sản xuất thiết bị không cung cấp địa chỉ tuyệt đối mà chỉ cung cấp địa chỉ tương đối
(relative addresses) hay còn gọi là thanh ghi cơ bản, thì người lập trình có thể sử dụng
công thức sau để tìm địa chỉ tuyệt đối của Modbus:
- Địa chỉ Modbus = Req.adr. + offset
- Req.adr là 40001 hoặc 400001
5.2. THIẾT KẾ MẠNG TRUYỀN THÔNG VỚI MODBUS RTU VỚI PLC S7-
1200/1500
Tập lệnh truyền thông Modbus RTU
Các tập lệnh để thực hiện cấu hình truyền thông Modbus RTU cũng như thực hiện
các chức năng của Modbus Master và Slave được thực hiện qua các lệnh dưới đây.
- Modbus_Comm_Load (MB_COMM_LOAD)
- Modbus_Master (MB_MASTER)
- Modbus_Slave (MB_SLAVE)
Các tập lệnh truyền thông Modbus RTU nằm trong các tập lệnh truyền thông trong
phần của phần mềm TIA Portal: Instruction  Communication  Communication
Processor  MODBUS (RTU) hay MODBUS

Lệnh cấu hình truyền thông Modbus


Lệnh Modbus_Comm_Load cấu hình một modul truyền thông để cho phép PLC
có thể thiết lập giao thức Modbus RTU. Khi gọi lệnh thì phần mềm tự động tạo thêm một
khối dữ liệu Instance DB vào trong chương trình người dùng. Thay đổi cấu hình của
Modbus_Comm_Load được lưu trên CM chứ không phải trong CPU.
Modbus_Comm_Load được sử dụng để thực hiện cấu hình cổng ứng dụng (Port)
cho giao thức RTU. Một khi đã thực hiện cấu hình Port này cho giao thức Modbus RTU
thì nó chỉ có thể được sử dụng bởi các lệnh Modbus_Master hoặc Modbus_Slave.
Lệnh Modbus_Comm_Load chỉ thực hiện một lần duy nhất trong quá trình khởi
động truyền thông để nó thực hiện bắt tay giữa các thiết bị modbus với nhau
Bảng 1. Tham số lệnh Modbus_Comm_Load
Tham số Khai báo Kiểu dữ liệu Miêu tả
REQ IN Bool Bắt đầu truyền dữ liệu tới Modul
CM/CP bằng tín hiệu xung cạnh lên
PORT IN PORT (UInt) Được chỉ định bởi modul truyền
thông với địa chỉ quy định bởi HW
identifier
BAUD IN UDInt Lựa chọn tốc độ truyền nhận dữ liệu:
300, 600, 1200, 2400, 4800, 9600,
19200, 38400, 57600, 76800, 115200
bps
PARITY IN UInt Lựa chọn trạng thái chẵn lẻ
0: No parity (mặc định)
1: Odd parity (lẻ)
2: Even parity (chẵn)
FLOWCTRL IN UInt Kiểm soát luồng dữ liệu
0: no flow control
1: Phần cứng RTS luôn ON
2: Phần cứng RTS chuyển trạng thái
RTS_ON_DLY IN UInt Lựa chọn độ trễ của RTS ON
0: Không trễ
1: 1 đến 65535 là độ trễ tính theo
mili giây từ khi RTS được kích hoạt
RTS_ONFF_DLY IN UInt Lựa chọn độ trễ của RTS OFF
0: Không trễ
1: 1 đến 65535 là độ trễ tính theo
mili giây từ khi RTS ngắt kích hoạt
RESP_TO IN UInt Thời gian timeout: từ 5ms đến 65535
ms để chờ tín hiệu phản hồi của
Slave
MB_DB IN/OUT MB_Base Tham chiếu đến instance data block
của modbus master hoặc slave
COM_RST IN/OUT Bool Khởi động tập lệnh. Giá trị khởi
động là TRUE sau đó chuyển trạng
thái FALSE
DONE OUT Bool TRUE sau một chu kỳ nếu không có
lỗi
ERROR OUT Bool TRUE sau một chu kỳ nếu bị lỗi
STAUTS OUT Word Bảng mã lỗi

2. Lệnh truyền thông Modbus RTU Master


Lệnh Mobus_Master cho phép PLC thực hiện chức năng giao tiếp là Modbus
Master thông qua cổng truyền thông đã được cấu hình bởi lệnh Modbus_Comm_Load.
Một khối dữ liệu instance DB tự động gán cho lệnh Modbus_Master trong chương trình
người dùng. Tham số MB_DB của lệnh Modbus_Comm_Load phải được kết nối tới
tham số MB_DB (biến static) của lệnh Modbus_Master.
Một số quy tắc giao tiếp của Modbus_Master
Modbus_Comm_Load phải được chạy để cấu hình Port, nhờ đó mà lệnh
Modbus_Master có thể giao tiếp với Port này.
Một Port đã được dùng với chức năng Modbus master thì không được sử dụng với
Modbus slave
Lệnh Modbus không sử dụng trong các khối OB ngắt để thực hiện quá trình truyền
thông.
Nếu lệnh Modbus_Master gửi một yêu cầu tới Salve, phải đảm bảo rằng
Modbus_Master vẫn tiếp tục thực thi cho tới khi nhận được phản hồi của Slave

Bảng 2. Tham số lệnh Modbus_Master

Tham số Khai báo Kiểu dữ liệu Miêu tả


REQ IN Bool False: Không có yêu cầu
True: Yêu cầu gửi dữ liệu tới slave
MB_ADDR IN UInt Chọn địa chỉ slave kết nối
- Tầm địa chỉ chuẩn: 1 – 247
- Tầm địa chỉ mở rộng: 1 – 65535
- Địa chỉ Broadcast là 0
MODE IN USInt Lựa chọn chế độ đọc/ghi hoặc chuẩn
đoán thông tin của Modbus slave
DATA_ADDR IN UDInt Địa chỉ bắt đầu thanh ghi, ngõ vào/ra
của Slave để master truy cập dữ liệu
DATA_LEN IN UInt Độ dài dữ liệu: chỉ định số bit hoặc
word để lệnh truy cập tới
COM_RST IN/OUT Bool Khởi động tập lệnh. Giá trị khởi đầu
là TRUE sau đó chuyển trạng thái
FALSE
DATA_PTR IN/OUT Variant Con trỏ dữ liệu (Data pointer): chỉ
định tới vùng nhớ (flag) hoặc DB để
thực hiện truy xuất dữ liệu tới slave
DONE OUT Bool TRUE sau một chu kỳ nếu không có
lỗi
BUSY OUT Bool - False: Lệnh không kích hoạt
- True: Lệnh đang thực hiện
ERROR OUT Bool TRUE sau một chu kỳ nếu bị lỗi
STAUTS OUT Word Bảng mã lỗi
3. Lệnh truyền thông Modbus RTU Slave
Lệnh Mobus_Slave cho phép PLC trở thành một Modbus Slave thông qua cổng
truyền thông CM/CP (RS 422/485 HF hoặc RS232 HF). Một khối dữ liệu instance DB tự
động gán cho lệnh Modbus_Salve khi gọi lệnh. Tham số MB_DB của lệnh
Modbus_Comm_Load phải được kết nối tới tham số MB_DB (biến static) của lệnh
Modbus_Slave.

Bảng 3. Tham số lệnh Modbus_Slave

Tham số Khai báo Kiểu dữ liệu Miêu tả


MB_ADDR IN UInt Định địa chỉ cho Modbus slave
- Tầm địa chỉ chuẩn: 1 – 247
- Tầm địa chỉ mở rộng: 1 – 65535
- Địa chỉ Broadcast là 0
COM_RST IN/OUT Bool Khởi động tập lệnh. Giá trị khởi đầu
là TRUE sau đó chuyển trạng thái
FALSE
MB_HOLD_REG IN/OUT Variant Con trỏ dữ liệu: chỉ định tới vùng
nhớ M hoặc DB làm thanh ghi
holding register
NDR OUT Bool - False: không có dữ liệu mới
- True: chỉ thị rằng có dữ liệu mới
được ghi bởi Modbus master
DR OUT Bool - False: không đọc dữ liệu
- True: chỉ thị rằng có dữ liệu được
đọc bởi Modbus master
ERROR OUT Bool TRUE sau một chu kỳ nếu bị lỗi
STAUTS OUT Word Bảng mã lỗi
4. Tham số DATA_ADDR và MODE
Tham số DATA_ADDR chỉ định địa chỉ bắt đầu để master truy cập dữ liệu của
Salve. Với tham số MODE và địa chỉ Modbus cho phép người thiết kế chỉ định mã chức
năng sẽ được chuyển tới Slave
Bảng 4. Mối quan hệ giữa MODE, mã chức năng

Mode DATA_ADDR DATA_LEN Mã chức Chức năng và dữ


Địa chỉ Modbus Độ dài dữ liệu năng liệu

1 – 9999 1 – 2000/19921 01 Đọc BIT ngõ ra


0 - 9998
10001 - 19999 1 – 2000/19921 02 Đọc BIT ngõ ra
0 - 9998
0 40001 - 49999 1 – 125/1241 Đọc thanh ghi
400001 - 465535 1 – 125/1241 03 Holding (Word)
0 - 9998
30001 - 39999 1 – 125/1241 04 Đọc Word ngõ vào
0 - 9998
1 1 – 9999 1 BIT 05 Ghi BIT đơn ngõ ra
0 - 9998
40001 - 49999 1 WORD 06 0 - 9998
400001 - 465535 1 WORD 0 - 65524
1 - 9999 2 – 1968/19601 15 Ghi nhiều BIT ngõ ra
0 - 9998
40001 - 49999 2 – 123/122 16 Ghi nhiều Word ngõ
ra
0 - 9998
400001 - 465535 2 – 123/1221 16 0 - 65534
(1) Là địa chỉ mở rộng (extended addressing) của modbus từ 1 - 65535
Những thông tin theo bảng 4 là bảng quy định của Siemen theo truyền thông gốc
của Modbus, tuy nhiên trong một số trường hợp sẽ bị thay đổi do các thiết bị Slave hoặc
Master khác của hãng thứ ba quy định chứ không phải bị cố định. Do đó, khi lập trình và
commissioning hệ thống thì người thực hiện cần chú ý và tự điều chỉnh cho phù hợp với
thực tế.
5.1.4.1. Lập trình ứng dụng Modbus RTU trên TIA Portal
Bài toán 1: Đọc tín hiệu của đồng hồ giám sát năng lượng.
a) Đặt vấn đề
Sử dụng Modbus RTU của PLC S7 1200/1500 để đọc các thông số dữ liệu của đồng
hồ giám sát năng lượng: điện áp, dòng điện…
b) Yếu câu phần cứng
- Sử dụng PLC S7 -1200: CPU 1214C
- Modul RS485 cho PLC: CM 1241 (RS 422/485).
- Đồng hồ giám sát năng lượng: SENTRON PAC 4200 của Siemens.
c) Cấu hình Modbus cho slave và tìm hiểu các thanh ghi dữ liệu
Bước 1: Cấu hình đồng hồ giám sát năng lượng SENTRON PAC 4200 hỗ trợ
Modbus RTU. Các thông số cấu hình truyền thông của slave phải tương thích với Master.
- Mode: Modbus RTU
- Địa chỉ lần lượt là : 10, 11, 12.
- Baud rate: 19.2 kbps
- Parity: No parity.
- Data bits: 8 bit per character
- Stop bits: 1
Bước 2: tìm các thanh ghi dữ liệu: holding register, kiểu dữ liệu của các slave trong
manual của thiết bị
Bước 3: Tính toán các biến cho Modbus Master
- Để đọc thông tin của các thanh ghi thì sử dụng MODE = 0 tương ứng với mã chức
năng 0x03 (function code)
- Xác định thanh ghi địa chỉ DATA_ADDR = Req.adr. + offset
d) Khai báo cấu hình phần cứng PLC S7 – 1200/1500
Bước 1: Khởi tạo project với tên RTU_SENTRON, lựa chọn cấu hình PLC S7 và
mô đun hỗ trợ truyền thông Modbus RTU. Với bài này sẽ chọn CPU 1214C và mô đun
CM1241 (RS422/485).
Bước 2: Cấu hình cho cổng RS485 (Port) tương thích cấu hình của slave: CM
1214(RS422/485)  Properties  General  RS422/485 interface  Port
configuration…
Bước 3: Khởi tạo các bit trạng thái và bit hệ thống cho PLC
e) Khởi tạo vùng nhớ dữ liệu lưu trữ thông tin đọc về
Bước 1: tạo kiểu dữ liệu người dùng với PLC data type (UDT) để tiện lợi cho việc
đọc cùng lúc nhiều slave có cùng các thông số dữ liệu: PLC data types  add new data
type  đổi tên thành sentron_data  khai báo các thông số và kiểu dữ liệu cần đọc về.

Bước 2: tạo vùng nhớ dữ liệu DB1 với tên Modbus_Data để lưu trữ thông tin đọc
về từ các slave
Bước 3: Khởi tạo vùng dữ liệu để truy vấn thông tin từ các slave:
Modbus_Data[DB1]  Open  Add new  đổi tên là PM_1, PM_2, PM_3  chọn
kiểu dữ liệu data type là sentron_data.

Bước 4: Khởi tạo vùng dữ liệu DB2 để lưu trữ các tham số khai báo cấu hình cũng
như các biến chuyển trạng thái khi đọc các slave

f) Sử dụng Modbus_Master đọc tín hiệu Modbus_Slave


Sơ đồ giải thuật nguyên tắc đọc thông tin các tín hiệu Modbus từ các Slave 1,2,3
tương ứng với đồng hồ đo năng lượng SENTRON như sau:

Hình 5.14. Lưu đồ giải thuật


Bước 1: Tạo hàm FC1 với chức năng đọc thông tin các đồng hồ đo điện năng
SENTRON bằng Modbus: Program blocks  Add new block  Function, Đặt tên
Modbus  OK.
Bước 2: Gọi lệnh khởi tạo cấu hình Modbus trong FC1: FC1  Network 1 
Intructions  Communication  Communication Processor  MODBUS hoặc
MODBUS RTU  Modbus_Comm_Load.
- Đặt tên DB Instance cho lệnh là Comm_Load.
- REQ chỉ cần xung trigger một lần duy nhất cho nên có thể sử dụng biến FirstScan.
- PORT khai báo địa chỉ Hardware identifier của mô đun truyền thông: PLC tags 
Default tag table  System contants  tìm tên tương ứng và điền thông tin vào PORT.
- MB_DB sẽ được chỉ định vào MB_DB của Modbus_Master. Được thực hiện khai
báo sau khi gọi lệnh Modbus_Master.
Bước 3: Tạo trạng thái nhớ khi FirstScan thực hiện lưu trạng thái này cho việc thiết
lập vòng lặp (Network 2).

Bước 4: Tạo thời gian trễ (tùy chọn) để cho hoàn thành việc thiết lập truyền thông
(network 3).
Bước 5: Gọi lệnh đọc tín hiệu đồng hồ đo điện bằng SENTRON 1: Network 4 
Instructions  Communication  Communication Processor  MODBUS 
Modbus_Master.

- Đặt tên DB Instance cho lệnh là Master_DB.


- Địa chỉ của đồng hồ đo điện năng SENTRON 1 là 10.
- Đọc thông tin thiết bị nên MODE = 0.
- Địa chỉ bắt đầu: 40001+1=40002.
- Độ dài dữ liệu: 9 thông số * độ dài 2 word = 18.
- Địa chỉ con trỏ DATA_PTR: nếu vùng nhớ DB là non-optimized thì khai báo theo
dạng sau: P#DB1.DBX0.0 REAL 9.
Bước 6: thực hiện chuyển tiếp trạng thái để đọc đồng hồ thứ 2 với địa chỉ slave là
11 (network 5).
Bước 7: Đọc thông tin của đồng hồ SENTRON 2. Ở network 6 tiếp tục gọi lệnh
Modbus_Master giữa nguyên Instanced DB. Chỉ thay đổi những thông tin liên quan tới
Modbus slave và vùng nhớ trao đổi dữ liệu với slave (Network 6).

Bước 8: Thực hiện chuyển tiếp trạng thái để đọc đồng hồ thứ 3 với địa chỉ slave là
12 (Network 7).
Bước 9: Đọc thông tin của đồng hồ SENTRON 3 ở network 8.

Bước 10: Thực hiện chuyển tiếp trạng thái để thực hiện vòng lặp cho phép đọc đồng
hồ 1 với địa chỉ 10 (network 9).

Bước 11: Gọi chương trình con Modbus [FC1] ở chương trình OB1.
Bài toán 2: Thiết lập truyền thông Modbus RTU giữa Master và Slave với PLC
S7 trên TIA Portal
a) Đặt vấn đề
Sử dụng giao thức Modbus RTU với PLC S7 -1200/1500 thực hiện truyền thông
trao đổi dữ liệu giữa 2 PLC.
b) Yêu cầu phần cứng
- Sử dụng CPU 1214C làm Modbus slave và CPU 1511 làm Modbus Master.
- Modul mở rộng RS485 cho PLC: CM 1241 (RS422/485) và CM PtP RS422/485
HF.

a) Cấu hình Modbus cho PLC S7 làm Modbus slave


Bước 1: Khởi tạo thiết bị với tên RTU_Slave, lựa chọn cấu hình PLC S7 và mô đun
hỗ trợ truyền thông Modbus RTU.
Bước 2: Cấu hình cho cổng RS485 (Port): CM 1241 (RS422/485)  Properties 
General  RS422/485 interface  Port configuration…
Bước 3: Tạo vùng nhớ dữ liệu DB1 với tên HoldReg để lưu trữ thông tin thanh ghi
holding register của slave.
Bước 4: trong quá trình truyền thông giữa PLC S7 với PLC khác thì cần phải sử
dụng vùng nhớ thực (absolute address) để truy xuất dữ liệu cho nên sẽ chuyển HoldReg
[DB1] sang vùng nhớ Non-optimized: HoldReg [DB1]  Properties  Attributes  bỏ
chọn Optimized block access  OK.

Bước 5: Khởi tạo vùng dữ liệu Holding Register: HoldReg [DB1]  Open  Add
new  đổi tên là Data  chọn kiểu dữ liệu data type là Array[1..100] of Word. Tùy theo
mục đích và số lượng dữ liệu truyền mà người sử dụng có thể dùng Word, Int, Dint,
Real…

Bước 6: Tạo hàm FC1 với chức năng Modbus: Program blocks  Add new block
 Function, đặt tên Modbus  OK.

Bước 7: Gọi lệnh thực hiện khởi tạo cấu hình trong FC1: FC1  Network 1 
Instructions  Communication  Communications processor  MODBUS hoặc
MODBUS RTU  Modbus_Comm_Load.
- MB_DB sẽ được chỉ định vào MB_DB của Modbus_Slave. Được thực hiện khai
báo sau khi gọi lệnh Modbus_Slave.
Bước 8: Gọi lệnh thiết lập Modbus slave cho PLC S7: FC1  network 2 
Instructions  Communication  Communication Processor  MODBUS RTU 
Modbus_Slave.
- Đặt tên DB Instance cho lệnh là Slave_DB.
- Địa chỉ tùy chọn từ 1 – 247 và không trùng với bất kỳ slave nào có trên đường
mạng. Ở đây chọn là 1.
- Địa chỉ con trỏ DATA_PRT: Tùy theo số lượng và kiểu dữ liệu cần truyền về cho
master: P#DB1.DBX0.0 WORD 100.
Lưu ý: Sau khi thực hiện lệnh khởi tạo Modbus Slave cho PLC S7 thì thanh ghi bắt
đầu của Holding register là 40001.
Bước 9: Gọi chương trình con Modbus [FC1] ở chương trình OB1.

b) Cấu hình Modbus cho PLC S7 làm Modbus master


Bước 1: Khởi tạo thiết bị với tên RTU_Master, lựa chọn cấu hình PLC S7 và mô
đun hỗ trợ truyền thông Modbus RTU.
Bước 2: Khởi tạo các bít trạng thái và bits hệ thống cho PLC với MB100 chứa các
System memory bits và MB101 chứa các Clock memory bits.
Bước 3: Cấu hình cho cổng RS485 (Port): CM PtP RS422/485 HF  Properties 
General  RS422/485 interface…
Bước 4: Tạo vùng nhớ dữ liệu DB1 với tên ModbusReg_S7PLC để lưu giữ thông
tin đọc về từ PLC S7. Chuyển ModbusReg_S7PLC[DB1] sang vùng nhớ Non-optimized.
Bước 5: Khởi tạo vùng dữ liệu để đọc và ghi dữ liệu tới Slave: ModbusReg_S7PLC
[DB1]  Open  Add new  đổi tên là Read và Write  chọn kiểu dữ liệu data type là
Array [1..50] of word. Tùy theo mục đích và số lượng dữ liệu truyền mà người sử dụng
có thể dùng Word, Int, Dint, Real,…
Bước 6: Tạo hàm FC1 với chức năng Modbus: Program blocks  Add new block
 Function, đặt tên Modbus  OK.
Bước 7: Gọi lệnh thực hiện khởi tạo cấu hình trong FC1: FC1  Network 1 
Intructions  Communication  Communication Processor  MODBUS hoặc
MODBUS RTU  Modbus_Comm_Load.

Bước 8: Gọi lệnh Modbus_Master truy xuất dữ liệu tới Slave: Network 2 
Instructions  Communication  Communication Processor  MODBUS RTU 
Modbus_Master. Ở đây ta thực hiện đọc 50 word liên tục với tần số 10 Hz từ PLC RTU
Slave.
Bước 9: Gọi chương trình con Modbus [FC1] ở chương trình OB1

You might also like