Xây dựng mạng truyền thông công nghiệp modbus RTU bằng ngôn ngữ python trên máy tính nhúng linux

29 597 4
Xây dựng mạng truyền thông công nghiệp modbus RTU bằng ngôn ngữ python trên máy tính nhúng linux

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA PHẠM NGỌC CƯỜNG XÂY DỰNG MẠNG TRUYỀN THÔNG CÔNG NGHIỆP MODBUS RTU BẰNG NGÔN NGỮ PYTHON TRÊN MÁY TÍNH NHÚNG LINUX Chuyên ngành: Kỹ thuật điều khiển tự động hóa Mã số: 60520216 TĨM TẮT LUẬN VĂN THẠC SĨ KỸ THUẬT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA Đà Nẵng – Năm 2017 Cơng trình hồn thành TRƯỜNG ĐẠI HỌC BÁCH KHOA Người hướng dẫn khoa học: TS TRẦN ĐÌNH KHƠI QUỐC Phản biện 1: TS Nguyễn Lê Hòa Phản biện 2: TS Giáp Quang Huy Luận văn bảo vệ trước Hội đồng chấm Luận văn tốt nghiệp thạc sĩ Kỹ thuật Điều khiển Tự động hóa, họp Trường Đại học Bách khoa – Đại học Đà Nẵng vào ngày 25 tháng 03 năm 2017 Có thể tìm hiểu luận văn tại:  Trung tâm Học liệu, Đại học Đà Nẵng trường Đại học Bách khoa  Thư viện Khoa Điện, Trường Đại học Bách khoa – Đại học Đà Nẵng MỤC LỤC MỤC LỤC MỞ ĐẦU 1 Tính cấp thiết đề tài Mục tiêu nghiên cứu Đối tượng Phạm vi nghiên cứu Phương pháp nghiên cứu Ý nghĩa khoa học thực tiễn Cấu trúc luận văn CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ GIAO THỨC MẠNG MODBUS RTU 1.1 GIỚI THIỆU MẠNG MODBUS 1.2 CẤU TRÚC ĐOẠN TIN GIAO THỨC MODBUS CHƯƠNG 2: GIỚI THIỆU TỔNG QUAN VỀ PYTHON VÀ MÁY TÍNH NHÚNG LINUX 2.1 NGÔN NGỮ PYTHON 2.2 MÁY TÍNH NHÚNG CƠNG NGHIỆP CHƯƠNG 3: XÂY DỰNG CÁC LỚP DỮ LIỆU VÀ THUẬT TOÁN 3.1 SƠ ĐỒ CHUNG 3.1.1 Lớp liệu Slaver 3.1.2 Lớp liệu Master 3.2 XÂY DỰNG THUẬT TOÁN 3.2.1 Lớp Utilities 10 3.2.2 Lớp physical 16 3.2.3 Lớp transaction 16 3.2.4 Lớp Factory 17 3.2.5 Lớp bit_read_message.py & bit_write_message.py & register_read_message.py & register_write_message.py 18 3.2.6 Lớp dành riêng cho kho liệu (server mode) 18 CHƯƠNG 4: KẾT QUẢ MÔ PHỎNG 21 4.1 KHỞI TẠO HỆ THỐNG ẢO 21 4.2 KẾT QUẢ MÔ PHỎNG 21 4.2.1 Kết kiểm tra mã chức Write Coil (FC=05) 21 4.2.2 Kết kiểm tra mã chức Write Coils (FC=15) 21 4.2.3 Kết kiểm tra mã chức Read Coils Status (FC=01) 21 4.2.4 Kết kiểm tra mã chức Read Coils Status (FC=01) 21 4.2.5 Kết kiểm tra mã chức Write Holding Registers (FC=16) 21 4.2.6 Kết kiểm tra mã chức Read Holding Registers (FC=3) 22 4.2.7 Kết kiểm tra mã chức Write Holding Registers (FC=16)(kiểm tra lần thứ cho ghi nhất) 22 4.2.8 Kết kiểm tra mã chức Read Holding Registers (FC=3) (kiểm tra lần thứ cho ghi nhất) 22 4.2.9 Kết kiểm tra mã chức Read Discrete Inputs (FC=02) 4.2.10 Kết kiểm tra mã chức Read Inputs Register (FC=04) 22 4.2.11 Kết kiểm tra Mã Ngoại lệ có vấn đề khung truyền kho liệu 22 4.3 KẾT QUẢ MÔ PHỎNG KHI KẾT NỐI MÁY TÍNH NHÚNG VÀ MÁY TÍNH NGỒI 22 4.3.1 Phương pháp thực 22 4.3.2 Mô trình ghi cuộn dây (FC=5 FC=15) 22 4.3.3 Mô trình ghi ghi (FC=16) 22 4.3.4 Mơ q trình đọc ghi (FC=3) 22 4.3.5 Mơ q trình đọc đầu vào số (FC=2) 22 4.3.6 Mơ q trình đọc ghi analog (FC=4) 22 KẾT LUẬN 23 Các điểm làm 23 Các điểm hạn chế 23 Hướng phát triển đề tài 23 MỞ ĐẦU Tính cấp thiết đề tài Hiện nay, PLC máy tính nhúng cơng nghiệp dùng để làm thiết bị đầu cuối mạng cục công nghiệp Cả hai loại PLC máy tính nhúng cơng nghiệp có ưu điểm nhược điểm riêng Xét riêng máy tính nhúng cơng nghiệp, khả mở rộng ngoại vi, lưu trữ liệu rộng lớn Máy tính nhúng có khả chịu va đập, nhiệt độ môi trường, tốc độ xử lý cao Tuy nhiên sử dụng máy tính mạng THCN cần có yếu tố sau: Phần cứng ngoài: module/card xử lý liệu ngồi Modbus, Profibus…Các module/card có giá thành từ 200-1000$ tùy theo chức số cổng Phần mềm từ đối tác thứ 3: không dùng phần cứng ngồi dùng ngoại vi trực tiếp máy tính nhúng cần driver để điều khiển phần mềm, mã nguồn để thực giao thức Cần phải mua quyền để sử dụng Có phần mềm không hỗ trợ nguồn mở để phát triển ứng dụng riêng Thông qua đề tài "Xây dựng mạng truyền thông công nghiệp Modbus RTU ngôn ngữ Python máy tính nhúng Linux", mạng Modbus RTU ngăn xếp tìm hiểu xây dựng ngơn ngữ Python tảng máy tính Banana Pro nhúng hệ điều hành Linux Dựa theo cách thức hoạt động tiêu chuẩn mạng công nghiệp Modbus RTU, đề tài nghiên cứu thuật toán để xây dựng lớp hướng đối tượng nhằm truyền nhận liệu xử lý liệu truyền thông nối tiếp Theo đó, thuật tốn giúp tạo khung truyền, nhận khung truyền, sinh giá trị kiểm thử, mã ngoại lệ, xây dựng xác viết ngơn ngữ Python Thơng qua máy tính nhúng Linux, người lập trình ngồi việc sử dụng mã nguồn Modbus xây dựng để truyền nhận liệu lập nhiều chức điều khiển cho module đóng cắt thiết bị, đọc giá trị cảm biến, giao tiếp người – máy (HMI), mà module Modbus thông thường không làm Đề tài hướng tới mục tiêu tạo mã nguồn mở có chức truyền thơng tin nút mạng theo chuẩn modbus Ngồi khơng có chức xử lý khác PID, mạng neuron… Mục tiêu nghiên cứu Tìm hiểu cấu tạo lớp ngăn xếp mạng Modbus RTU Sau tìm hiểu hình thức trao đổi liệu xử lý liệu lớp ngăn xếp Tìm hiểu ngơn ngữ Python hướng đối tượng cách thức xử lý liệu lớp vật lý giao thức truyền thông nối tiếp Tìm hiểu cổng ngoại vi máy tính nhúng Banana Pro sử dụng cho mạng Modbus Xây dựng lớp ngăn xếp dùng ngôn ngữ Python hướng đối tượng sau tìm hiểu cách thức hoạt động lớp ngăn xếp Mơ đánh giá hoạt động chương trình Server/Client thông qua cổng truyền thông ảo Đối tượng Phạm vi nghiên cứu Mạng Modbus có phương thức giao tiếp RTU, ASCII TCP/IP, đề tài đối tượng nghiên cứu mạng Modbus RTU Phạm vi nghiên cứu tích hợp mạng Modbus ngơn ngữ Python máy tính Banana Pro nhúng hệ điều hành Linux Như đề tài giới hạn phạm vi việc lập trình dùng ngơn ngữ Python, máy tính Banana Pro hệ điều hành Linux Phương pháp nghiên cứu Tìm hiểu tài liệu sách có liên quan đến mạng Modbus, cấu tạo, chức cách thức hoạt động chúng Từ kết hợp với ngôn ngữ Python hướng đối tượng để xây dựng phần mềm Tìm hiểu cấu trúc phần cứng máy tính Banana Pro, thơng số kĩ thuật cách sử dụng thơng qua sổ tay từ nhà sản xuất LeMaker Từ kiến thức trên, đưa lưu đồ thuật toán để xử lý liệu nhằm truyền nhận khung truyền liệu theo tiêu chuẩn Modbus RTU Mô phương thức truyền đạt liệu thông qua cổng truyền thông nối tiếp ảo có sẵn hệ điều hành Linux Xây dựng hai chương trình có chế Server/Client để thực mô Chạy mạng Modbus thực tế cách gán cổng truyền thông thực, thông qua module PL2303 trao đổi liệu với thiết bị Modbus khác, máy tính hệ điều hành Windows có cài sẵn phần mềm mơ Modbus Ý nghĩa khoa học thực tiễn Tích hợp mạng Modbus RTU máy tính nhúng đem lại cho lập trình hệ thống mở rộng tính so với module Modbus thơng thường máy tính nhúng có hỗ trợ nhiều ngoại vi giúp giao tiếp với cảm biến (nhiệt, quang, gia tốc, ), thiết bị đóng cắt, thiết bị truyền thơng mạng cơng nghiệp, chí giao tiếp với hình HMI (Human Machine Interface: Giao tiếp người-máy) thân làm thành thiết bị HMI Máy tính nhúng có giá thành rẻ nhiều so với module mạng cơng nghiệp sử dụng, có khả làm môi trường công nghiệp, không cần thiết bị làm mát, dễ dàng lắp đặt có kích thước nhỏ, không cồng kềnh Cấu trúc luận văn Chương 1: Giới thiệu tổng quan giao thức mạng Modbus RTU Chương giới thiệu khái niệm mạng Modbus cấu trúc đoạn tin mạng Mod bus RTU Chương 2: Giới thiệu tổng quan python máy tính nhúng Linux Chương so sánh ngôn ngữ Python với ngơn ngữ lập trình nhúng có, đồng thời so sánh máy tính nhúng vi điều khiển thông thường Chương 3: Xây dựng lớp liệu thuật tốn Chương mơ tả cấu tạo lớp, thuật toán để xử lý khung truyền/nhận liệu Chương 4: Kết mô Chương đưa kết mơ hai phương pháp, kết nối máy ảo với kết nối máy tính nhúng máy tính khác có cài phần mềm mô Modbus 10 3.2.1 Lớp Utilities Lớp Utitlities đóng vai trị quan trọng việc xử lý liệu tái sử dụng lớp khác sync transaction Nhờ lớp utilites mà việc đóng gói liệu trở nên dễ dàng xác Vì lớp utilities Modbus lớp xử lý liệu Do đặc trưng khung truyền chuẩn Modbus, cần phải xử lý liệu dạng bit, byte mã crc nên em đưa phép toán lớp sau: - pack_bitstring - unpack_bitstring - generate_crc_table - computeCRC - checkCRC Việc xử lý tách byte sử dụng nhờ vào module struct python a Hàm pack_bitstring pack_bitstring giúp tạo chuỗi từ bit Pack_bitstring sử dụng lớp Bit_read_messabe.py ; bit_write_message.py register_read_message.py 11 Vì lớp liệu cuộn dây dạng bit True False Hình 3.3: Thuật tốn cho hàm pack_bitstring 12 b Hàm unpack_bitstring Hàm unpack_bitstring có chức chuyển chuỗi thành bit Khi giải mã khung truyền có chức tác động lên cuộn dây, cần phải tách chuỗi từ khung truyền thành bit tương ứng với vị trí cuộn dây Hình 3.4: Thuật tốn cho hàm unpack_bitstring 13 c Hàm generate_CRC_table Để tạo mã CRC cho khung truyền modbus, cần có bước 1- tạo bảng CRC 2- dùng bảng CRC liệu khung truyền để tạo mã CRC sau thêm vào cuối khung truyền Các bước tạo mã CRC sau: Bước Đặt ghi CRC 16 bit giá trị 0xFFFF Bước XOR bit khung truyền với bit thấp ghi CRC sau đưa lại vào ghi CRC Bước Dịch ghi CRC sang phải bit (về phía bit thấp), điền vào bít cao Trích bit thấp LSB Bước Nếu bit thấp LSB : lặp lại bước (dịch mới)Nếu bit thấp LSB 1: XOR ghi CRC với giá trị 0xA001 Bước Lặp lại bước dịch bước Khi kết thúc, ta có bit Bước Lặp lại bước từ đến cho bit liệu Tiếp tục làm hết khung truyền Bước Kết cuối giá trị CRC cần tìm Khi đặt khung truyền vào chuỗi cần đảo bit cao với bit thấp Hoặc tạo bảng mã trước, sau đưa liệu vào bảng để chọn mã CRC Trong phần thực nghiệm, em dùng cách thứ Sơ đồ thuật tốn tạo bảng mã sau: 14 Hình 3.5: Thuật toán tạo bảng mã CRC 15 d Hàm computeCRC(data) Hàm computeCRC sử dụng bảng CRC sinh phần 3.2.1c liệu (data) Sơ đồ thuật toán sau: Hình 3.6: Thuật tốn tạo mã CRC từ liệu 16 3.2.2 Lớp physical Bằng mã nguồn mở Pyserial, đóng gói bóc tách khung truyền theo dạng byte, word cách dễ dàng, hàm sử dụng thơng dụng pack unpack Ngoài việc khai báo quan trọng thơng số cổng truyền thông nối tiếp Đề tài sử dụng cổng truyền thơng nối tiếp đồng nên cần phải có quy ước chung việc thiết lập thông số Trong lớp physical, việc sử dụng hàm read (receive) write (send) pyserial, sử dụng hàm pack unpack struct Module struct bao gồm chức chuyển đổi chuổi byte kiểu liệu python chuỗi số 3.2.3 Lớp transaction Lớp transaction có chức năng, - chức xử lý khung truyền (dành cho chế độ server client) đặt ModbusRTUFramer - chức truyền liệu dành cho chế độ client (sử dụng lớp vật lý Physical để truyền nhận liệu) Chức thực hàm execute a Lớp ModbusRTUFramer Lớp ModbusRTUFramer dung để tách khung truyền giá trị mã chức năng, mã CRC, phần liệu (bao gồm mã chức năng, khối liệu) Khối liệu lúc chưa tách thành địa giá trị Để tách thông số nêu cần thành lập hàm lớp sau: 17 - hàm init - hàm checkframe - hàm advanceframe - hàm isframeready - hàm addtoframe - hàm getframe - hàm populateresults - hàm processingIncomingpacket - hàm buildpacket 3.2.4 Lớp Factory Lớp Factory dùng để giải mã chuỗi liệu dựa theo mã chức Lớp Factory đưa thuật toán để nhận diện mã đồng thời tạo lớp cho phù hợp trình xử lý lớp bit_read_message.py & bit_write_message.py & register_read_message.py & register_write_message.py Thuật toán nhận dạng sau: - Khởi tạo cách thêm hàm lớp Lớp bit_read_message.py & bit_write_message.py & register_read_message.py & register_write_message.py (Xem thêm 3.2.5) Lý thêm lớp chứa lớp giúp ta nhận mã chức Các lớp chứa chức viết dựa theo tiêu chuẩn modbus - Gán tên chức mã chức theo thứ tự - Đọc mã chức (sau bóc tách khung truyền) Sau dị bảng 18 - Nếu thực giải mã Quá trình giải mã hàm decode (mục 3.2.5) Nếu sai khai báo mã chức không hợp lệ (đối với client) cộng thêm 0x80 (đối với server) Lý cộng thêm 0x80 server nhận thấy khơng có mã chức gởi client mã chức cộng thệm 0x80 Đây quy ước Modbus 3.2.5 Lớp bit_read_message.py & bit_write_message.py & register_read_message.py & register_write_message.py Các lớp lớp dùng sau mã hóa chức giúp bóc tách đóng gói liệu (decode encode) mức địa giá trị Do chức có cấu trúc khung truyền riêng nên cần phải chia lớp Mỗi lớp chứa chức sau: - encode: Giúp đóng gói khung truyền mức độ địa giá trị - decode: Giúp giải mã khung truyển, mức độ địa chỉ, giá trị, cịn có bit ghi - execute: Chỉ dùng làm server Hàm dùng để gọi response muốn đáp trả request phải trải qua trình kiểm tra Hàm execute phải kiểm tra giá trị địa liệu kho Xem thêm hình sơ đồ chung phần 3.2.6 3.2.6 Lớp dành riêng cho kho liệu (server mode) Kho liệu dùng để lưu trữ liệu Đối với chuẩn truyền thơng modbus có kho liệu cần ý Hình thức tạo kho liệu 19 sau: Lớp để lưu trữ liệu stores Lớp có thuốc tính setvalues, getvalues, init, để lấy giá trị gán giá trị vào kho Lớp context lớp ngữ cảnh chung, lớp bao gồm tất kho Giống kho liệu lớn Muốn qua đến lớp store phải thông qua lớp context Mục đích lớp context cịn trỏ phân loại vị trí Tự động phân loại liệu phù hợp với kho thông qua mã chức Hình 3.12: Bố cục kho liệu (1/2)[2] a Lớp store Lớp store chứa chức là: - kiểm tra giá trị địa (address) , giá trị (value) count - Thêm giá trị vào kho theo địa - Lấy giá trị từ kho theo địa - 20 b Lớp context Lớp context lớp ngữ cảnh, chứa kho Cần khởi tạo kho trước cho server hoạt động Quá trình khởi tạo kho hàm init Ngoài context chứa hàm validate, getvalues, setvalues store Để phân biệt kho từ mã chức năng, lớp context sử dụng hàm decode sau: fx_mapper = {2: 'd',4: 'i'} fx_mapper.update([(i, 'h') for i in [3, 6, 16, 22, 23]]) fx_mapper.update([(i, 'c') for i in [1, 5, 15]]) 21 CHƯƠNG 4: KẾT QUẢ MÔ PHỎNG 4.1 KHỞI TẠO HỆ THỐNG ẢO Để mô phỏng, trước tiên tạo máy ảo Một máy ảo có chức Master (client) Một máy ảo khác có địa ID =0x07 có chức làm Slave(server) Với mạng Modbus, kho liệu chia làm kho chứa giá trị: dây (Discrete coils), giá trị đầu vào (Discrete inputs), giá trị ghi (Holding Registers), Giá trị Analog (input Registers) Trong giá trị đầu vào (Discrete Inputs) Giá trị Analog (Input Registers) cần phải tương tác với cảm biến Vì khởi tạo máy ảo Slave(Server), ta gán sẵn giá trị để dễ kiểm chứng Kết tạo máy ảo Slave: Tạo giá trị đầu vào ON-OFF-ON-OFF-ON-OFF-ON-OFF Tạo giá trị ghi Analog: 100-200-300-400-500-600-700800 ID riêng máy ảo 0x07 Mỗi thiết bị Slave mạng Modbus có ID riêng 4.2 KẾT QUẢ MƠ PHỎNG 4.2.1 Kết kiểm tra mã chức Write Coil (FC=05) 4.2.2 Kết kiểm tra mã chức Write Coils (FC=15) 4.2.3 Kết kiểm tra mã chức Read Coils Status (FC=01) 4.2.4 Kết kiểm tra mã chức Read Coils Status (FC=01) 4.2.5 Kết kiểm tra mã chức Write Holding Registers (FC=16) 22 4.2.6 Kết kiểm tra mã chức Read Holding Registers (FC=3) 4.2.7 Kết kiểm tra mã chức Write Holding Registers (FC=16)(kiểm tra lần thứ cho ghi nhất) 4.2.8 Kết kiểm tra mã chức Read Holding Registers (FC=3) (kiểm tra lần thứ cho ghi nhất) 4.2.9 Kết kiểm tra mã chức Read Discrete Inputs (FC=02) 4.2.10 Kết kiểm tra mã chức Read Inputs Register (FC=04) 4.2.11 Kết kiểm tra Mã Ngoại lệ có vấn đề khung truyền kho liệu a Ghi địa giới hạn vùng nhớ kho : địa 1000 b Thực đọc vùng nhớ (8000 ghi analog) c Master gởi nhầm địa ID 4.3 KẾT QUẢ MÔ PHỎNG KHI KẾT NỐI MÁY TÍNH NHÚNG VÀ MÁY TÍNH NGỒI 4.3.1 Phương pháp thực 4.3.2 Mơ q trình ghi cuộn dây (FC=5 FC=15) 4.3.3 Mơ q trình ghi ghi (FC=16) 4.3.4 Mơ q trình đọc ghi (FC=3) 4.3.5 Mơ q trình đọc đầu vào số (FC=2) 4.3.6 Mơ q trình đọc ghi analog (FC=4) 23 KẾT LUẬN Các điểm làm Luận văn đưa thuật toán giúp máy tính nhúng Linux truyền nhận khung truyền Modbus, xử lý khung truyền Bên cạnh cịn nhận biết lỗi Luận văn đưa cách xây dựng lớp thuật toán ngôn ngữ python để thực mô mạng TTCN Modbus RTU Xây dựng khung truyền gởi xử lý khung truyền cách hiệu Các mã chức xác định Cách xếp liệu vào kho đưa giúp slave kiểm sốt liệu vào cách xác Bằng lớp thuật tốn nêu, người lập trình thực để viết ứng dụng riêng Các điểm hạn chế Do hoàn thành thời gian ngắn nên luận văn chưa bao quát hết tất mặt Modbus RTU chưa đưa chẩn đoán lỗi khung truyền cách đầy đủ Bên cạnh đó, mã nguồn chưa tính đến vấn đề tối ưu thời gian Mã nguồn có chức truyền thông tin nút mạng theo chuẩn modbus Ngồi khơng có chức xử lý khác PID, mạng neuron… Việc thêm chức khác người phát triển lớp Modbus Hướng phát triển đề tài Thêm vấn đề tối ưu thời gian cho ứng dụng thời gian thực Bên cạnh cần kiếm chứng với thiết bị sử dụng mạng TTCN thực tế để đảm bảo tính đắn thuật tốn ngơn ngữ 24 lập trình Ngồi luận văn cịn sử dụng lớp nêu để phát triển thành Modbus Ascii thêm lớp khác để thành Modbus TCPIP Máy tính nhúng có cổng Ethernet phục vụ cho Modbus TCPIP cần phải thay đổi hình thức truyền liệu tảng truyền liệu lớp vật lý thực nhờ RS232/RS485 không dùng cổng Ethernet RJ45 ... dụng riêng Thông qua đề tài "Xây dựng mạng truyền thông công nghiệp Modbus RTU ngơn ngữ Python máy tính nhúng Linux" , mạng Modbus RTU ngăn xếp tìm hiểu xây dựng ngơn ngữ Python tảng máy tính Banana... loại ngôn ngữ bậc cao Ngôn ngữ Python đưa cú pháp dễ đọc tái sử dụng cú pháp ngôn ngữ khác đến 10% Phần so sánh ngôn ngữ Python ngôn ngữ khác C java 2.2 MÁY TÍNH NHÚNG CƠNG NGHIỆP Phần so sánh máy. .. giúp máy tính nhúng Linux truyền nhận khung truyền Modbus, xử lý khung truyền Bên cạnh cịn nhận biết lỗi Luận văn đưa cách xây dựng lớp thuật tốn ngơn ngữ python để thực mô mạng TTCN Modbus RTU Xây

Ngày đăng: 10/05/2017, 23:02

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan