BÁO CÁO PROJECT KĨ THUẬT LẬP TRÌNH Đề tài: Viết thư viện cho giao thức MODBUS MỤC LỤC Phần A . Đề bài Phần B . Nội dung I. Tổng quan về MODBUS II. Modbus RTU III. Lập trình 1. Hmtchar, Hmplatf 2. MbusProtocolErrors 3. MbusMasterFunctions 4. MbusSerialClientBase 5. MbusRtuMasterProtocol IV. Demo Phần A : Đề bài Đề bài : Đề 1.Viết thư viện làm việc với modbus. Chương trình demo cho phép truyền nhận thông tin qua cổng serial theo các chế độ khác nhau. Chương trình demo sẽ gồm 2 chương trình: A và B. Chương trình A gửi dữ liệu (một chuỗi hoặc giá trị gì đó từ dòng lệnh) sang chương trình B. Chương trình B gửi dữ liệu (một chuỗi hoặc giá trị gì đó từ dòng lệnh) trả lại chương trình A. Ghi log dữ liệu truyền đi và nhận được vào 1 file văn bản nhị phân, kèm thời gian gửinhận.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
BÁO CÁO PROJECT KĨ THUẬT LẬP TRÌNH Đề tài: Viết thư viện cho giao thức MODBUS GVHD: Thầy Nguyễn Việt Tùng Nhóm 1 : Dương Thế Tài 20174179
Nguyễn Tuấn Dũng 20173772
Nguyễn Văn Tuấn 20174333
Nguyễn Tuấn Cường 20173711 Nguyễn Tiến Thành 20174225
Trang 4Phần A : Đề bài
Đề bài :
Đề 1.Viết thư viện làm việc với modbus
Chương trình demo cho phép truyền nhận thông tin qua cổng serial theo các chế độ khác nhau
Chương trình demo sẽ gồm 2 chương trình: A và B
Chương trình A gửi dữ liệu (một chuỗi hoặc giá trị gì đó từ dòng lệnh) sang chương trình B Chương trình B gửi dữ liệu (một chuỗi hoặc giá trị gì đó từ dòng lệnh) trả lại chương trình A Ghi log dữ liệu truyền đi
và nhận được vào 1 file văn bản / nhị phân, kèm thời gian gửi/nhận.
Trang 5Phần B : Nội dung
I Tổng quan về Modbus
MODBUS do Modicon (hiện nay thuộc Schneider Electric) phát triểnnăm 1979, là một phương tiện truyền thông với nhiều thiết bị thông qua một cặpdây xoắn đơn Ban đầu, nó hoạt động trên RS232, nhưng sau đó nó sử dụng cho
cả RS485 để đạt tốc độ cao hơn, khoảng cách dài hơn, và mạng đa điểm drop) MODBUS đã nhanh chóng trở thành tiêu chuẩn thông dụng trong ngành
(multi-tự động hóa, và Modicon đã cho ra mắt công chúng như một protocol miễn phí
MODBUS là một hệ thống “chủ - tớ”, “chủ” được kết nối với một haynhiều “tớ” “Chủ” thường là một PLC, PC, DCS, hay RTU “Tớ” MODBUSRTU thường là các thiết bị hiện trường, tất cả được kết nối với mạng trong cấuhình multi-drop Khi một chủ MODBUS RTU muốn có thông tin từ thiết bị, chủ
sẽ gửi một thông điệp về dữ liệu cần, tóm tắt dò lỗi tới địa chỉ thiết bị
Khung truyền chung của Modbus :
Trang 6Hiện nay, có 03 chuẩn modbus đang được sử dụng phổ biến trong côngnghiệp - tự động hóa là: Modbus RTU, Modbus ASCII, Modbus TCP :
Modbus ASCII:
Mọi thông điệp được mã hóa bằng hexadeci-mal, sử dụng đặc tính ASCII 4 bit.Đối với mỗi một byte thông tin, cần có 2 byte truyền thông, gấp đôi so vớiMODBUS RTU hay MODBUS/TCP. Tuy nhiên, MODBUS ASC II chậm nhấttrong số 3 loại protocol, nhưng lại thích hợp khi modem điện thoại hay kết nối
sử dụng sóng radio do ASC II sử dụng các tính năng phân định thông điệp Điềunày quan trọng khi đề cập đến các modem chậm, điện thoại di động, kết nối ồnhay các phương tiện truyền thông khó tính khác
Modbus RTU:
Dữ liệu được mã hóa theo hệ nhị phân, và chỉ cần một byte truyền thông chomột byte dữ liệu Đây là thiết bị lí tưởng đối với RS 232 hay mạng RS485 đađiểm, tốc độ từ 1200 đến 115 baud Tốc độ phổ biến nhất là 9600 đến 19200baud MODBUS RTU là protocol công nghiệp được sử dụng rộng rãi nhất
Modbus TCP:
MODBUS/TCP đơn giản là MODBUS qua Ethernet Thay vì sử dụng thiết bịnày cho việc kết nối với các thiết bị tớ, do đó các địa chỉ IP được sử dụng VớiMODBUS/TCP, dữ liệu MODBUS được tóm lược đơn giản trong một góiTCP/IP Do đó, bất cứ mạng Ethernet hỗ trợ MODBUS/ IP sẽ ngay lập tức hỗtrợ MODBUS/TCP
Modbus gateway là một thiết bị cho phép chuyển đổi qua lại giữa giaothức RTU và TCP Thông thường thiết bị sẽ có 01 cổng serial ( RS232/RS485)
và 01 cổng Ethernet
Trang 7II Modbus RTU
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 RS485 và mô hình dạng Master-Slave Đây là một giao thứcđược sử dụng rộng rãi trong nhiều lĩnh vực như BMS (Building ManagementSystems), tự động hóa, công nghiệp, điện lự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
• Address : đị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
• Function: quy định từ Master, xác định yêu cầu công việc cho thiết bịSlave
• Data : 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
Trang 8• 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 16 bit: 2 byte kiểm tra lỗi của hàm truyền
Ngoài ra , trong chương trình còn có thư viện hmtchar và hmplatf,
MbusProtocolErrors để định nghĩa các lỗi xảy ra trong quá trình truyền nhận
Trang 9giao thức cũng như là các kiểu kí tự và các hàm thư viện nền tảng có sẵn trong môi trường Visual Studio 2019.
// UNICODE support (MS VC++, Win CE) //
#if defined (_UNICODE)
Trang 10#endif /* ifdef _H_INCLUDED */
Những dòng lệnh trên định nghĩa kiểu kí tự cho chương trình
Chương trình sẽ được sử dụng thư viện “ tchar.h ”, với mục đích giúp kiểu kí
tự sẽ rộng hơn “ char ” và “ wchar ” Tùy thuộc vào đối tượng sử dụng mà trong một số trường hợp chương trình sẽ dử dụng “ char ” hay “ wchar ”
#define FTALK_ILLEGAL_STATE_ERROR 2 lỗi trạng thái không hợp lệ
Được dùng để thông báo hàm được gọi ở trạng thái sai, hoặc khi hàm được gọi mà các giao thức không được mở thành công
#define FTALK_NO_DATA_TABLE_ERROR 4 dùng định nghĩa hàm khi không
có bảng dữ liệu được cấu hình
slave đã được bắt đầu mà không cần thêm một bảng dữ liệu
#define FTALK_ILLEGAL_SLAVE_ADDRESS 5
slave không hợp lệ cho các giao thức nối tiếp
#define FTALK_IO_ERROR_CLASS 64 lớp lỗi I/O
lỗi của lớp này báo hiệu sự cố kết hợp với I/O
#define FTALK_IO_ERROR 65
lỗi I/O
Trang 11#define FTALK_OPEN_ERR 66
hàm định nghĩa khi xuất hiện lỗi mở cổng hoặc ổ cắm trong trường hợp của một cổng nối tiếp nó chỉ ra rằng cổng nối tiếp không tồn tại trên hệ thống
#define FTALK_PORT_ALREADY_OPEN 67 cổng nối tiếp đã mở
cổng nối tiếp được xác định cho thao tác mở đã được mở bởi ứng dụng khác
#define FTALK_SOCKET_LIB_ERROR 70
lỗi thư viện ổ cắm
#define FTALK_LINE_BUSY_ERROR 76 đường nối tiếp bận
đường nối tiếp đang nhận các ký tự hoặc nhiễu dù đang ở trạng thái không nhận dữ liệu
#define FTALK_BUS_PROTOCOL_ERROR_CLASS 128 lỗi giao tiếp
lỗi của lớp này cho thấy lỗi giao tiếp hoặc modbus
/lớp lỗi giao thức fieldbus ,những tín hiệu có lỗi liên quan đến giao thức fieldbus thường xảy ra
/lớp này là lớp lỗi chung do thất bại hoặc gián đoạn chức năng truyền dữ liệu nó được cung cấp khi nhận khung không hợp lệ hoặc phản hồi ngoại lệ
#define FTALK_CHECKSUM_ERROR 129 kiểm tra lỗi
tín hiệu cho thâý tổng kiểm tra của khung nhận được không hợp lệ một liên kết dữ liệu kém thường gây ra lỗi này
#define FTALK_INVALID_FRAME_ERROR 130 / lỗi khung không hợp lệ
tín hiệu mà khung nhận được không tương ứng theo cấu trúc hoặc nội dung với đặcđiểm kỹ thuật hoặc không khớp với khung truy vấn đã gửi trước đó
#define FTALK_INVALID_REPLY_ERROR 131 lỗi khung không hợp lệ
*
/ tín hiệu mà khung nhận được không tương ứng theo cấu trúc
/nội dung với đặc điểm kỹ thuật hoặc không khớp với truy vấn đã gửi trước đó
#define FTALK_INVALID_REPLY_ERROR 131
Trang 12lỗi trả lời không hợp lệ
* Signals that a received reply does not correspond/ tín hiệu mà một phản hồi nhận được không tương ứng để làm rõ
#define FTALK_REPLY_TIMEOUT_ERROR 132 hết thời gian phản hồi
tín hiệu đã hết thời gian truyền dữ liệu , điều này có thể xảy ra nếu thiết bị slave không trả lời kịp thời hoặc hoàn toàn không trả lời
#define FTALK_SEND_TIMEOUT_ERROR 133 hết thời gian gửi
#define FTALK_INVALID_MBAP_ID 134 Invalid MPAB indentifer /ấn định MPAB không hợp lệ
giao thức hoặc mã định giao dịch trong thư trả lời là không chính xác
một thiết bị slave phải trả về định danh nhận được từ master
#define FTALK_MBUS_EXCEPTION_RESPONSE 135 phản hồi ngoại lệ trong modbus
#define FTALK_MBUS_ILLEGAL_FUNCTION_RESPONSE 161 phản ứng ngoại lệ của chức năng không hợp lệ
phản hồi ngoại lệ này được gửi một thiết bị nô lệ
#define FTALK_MBUS_GW_PATH_UNAVAIL_RESPONSE 170
gateway path phản hồi không hợp lệ
#define FTALK_MBUS_GW_TARGET_FAIL_RESPONSE 171 Gateway Target Device Failed exception response / thiết bị gateway đích không đáp ứng ngoại lệ
Trang 13• FC 04 Read Input Registers
Trang 14-Còn nếu hàm phát hiện lỗi gì đó , thì hàm respone sẽ trả về code lỗi
-Sau đây ta cùng tìm hiểu một hàm để có thể hiểu rõ hơn về cách Modbus làmviệc : + FC 03/ Read Holding Registers :
- Đọc giá trị các thanh ghi liền kề nhau trong bộ nhớ slave
- Max số thanh ghi là 125
- Thanh ghi đầu tiên (số 1) được đánh chỉ số là 0
Trang 15-Trên là một ví dụ về hàm function 03 , đọc dữ liệu các thanh ghi liền kề nhautrong modbus , trong đó có cả request và response với câu lệnh như thế nào , mãnhư nào
Dựa vào sơ đồ thuật toán trên , chúng ta cũng hiểu khi modbus hay master đưa
ra request thì hệ thống hoặc sever sẽ kiểm tra các cú pháp , giá trị , tham số củacâu lệnh xem có phù hợp không , từ đó đưa ra phản hồi phù hợp với thông tinvừa kiểm tra được Và qua các hàm respone trả về như thế ta có thể biết đượcxem cú pháp của chúng ta đã đúng chưa và nếu sai cũng biết là sai ở đâu
Phần code:
Khai báo các biến: totalCounter , successCounter,timeOut,pollDelay,
Trang 17Thư viện này sẽ cấu hình cũng như kiệt kê các bit , bytes , hàm có liên quan đếngiao thức nối tiếp
Phần code :
Trang 18
5 MbusRtuMasterProtocol
Thư viện này sẽ định nghĩa chi tiết hơn và cụ thể hơn cho Modbus RTU ,để ta
có thể làm việc chuyên biệt hơn với kiểu nối tiếp RTU Lớp này cũng thừa kếtất cả các tính chất của các lớp trên
Phần code :
Trang 19
IV Demo
Sau khi code các hàm cũng như các chương trình thì ta đến các phần chạychương trình cũng như kiểm nghiệm giao thức Modbus
Dưới đây là các ví dụ để kiểm tra thư viện đã viết :
-Đầu tiên ta cấu hình cho slave ảo :
+ FC 02 Read Discrete Inputs, ghi file text
Trang 20+ FC 03 :Read Holding Registers dạng Hex và ghi file text
+ FC 03 :ReadHoldingRegisters dạng Binary và ghi file text
Trang 21+ FC 03 và ghi file nhị phân :
+ FC 03 : ReadHoldingRegister
Trang 22và áp dụng trong các máy móc , hệ thống công nghiệp.
+ Hai hàm khác nhau nhưng vẫn ghi ra được
giá trị