2.2. Mạng truyền thông MODBUS
2.2.1. Khái niệm tổng quát về mạng truyền thông Modbus:
Khái niệm tổng quát:
Modbus là một giao thức mạng truyền dữ liệu theo kiểu nối tiếp. Nó hỗ trợ cả 2 chuẩn truyền RS232 và RS485. Việc truyền dữ liệu được thực hiện theo cơ chế 1 Master, nhiều Slave. (tham khảo mục [1])
Sơ đồ hình 2.2 trình bày sự tham chiếu giao thức modbus lên mơ hình chuẩn OSI. Theo đó thì giao thức modbus nằm ở lớp thứ 7, thứ 2, và thứ 1 của mơ hình OSI. Lớp thứ 7 này (lớp ứng dụng) giúp hỗ trợ phương thức truyền thông server/client giữa các thiết bị kết nối trên bus hoặc trên mạng không dây. Lớp thứ 2 và lớp thứ 1 quy định hình thức truyền dữ liệu theo kiểu nối tiếp và chuẩn truyền vật lý là EIA/TIA
–
Hình 2.2: Giao thức Modbus trong mơ hình chuẩn OSI.
Giao thức modbus được sử dụng rộng rãi nhờ tính đơn giản, linh hoạt và đáng tin cậy của nó. Nó có thể truyền dữ liệu rời rạc hoặc tương tự. Thế nhưng giao thức modbus bị giới hạn bởi cách thức giao tiếp theo chuẩn RS485. Tốc độ truyền của chuẩn này trong khoảng 0.010Mbps đến 0.115Mbps. Trong khi ngày nay, các mạng hỗ trợ tốc độ truyền trong khoảng từ 5Mbps đến 16Mbps, thậm chí đối với các mạng Ethernet nó cịn cung cấp tốc độ truyền lên đến 100Mbps, 1Gbps và 10Gbps.
Phân loại: căn cứ vào cách thức truyền dữ liệu trong mạng, thì mạng Modbus được chia làm 3 loại: Modbus RTU, Modbus ASCII và Modbus TCP/IP.
- Modbus RTU: dữ liệu được truyền trên bus nối tiếp. Dữ liệu được truyền theo định dạng mã hexadecimal. Modbus RTU thường được sử dụng trong việc truyền thông thông thường.
- Modbus ASCII: dữ liệu được truyền trên bus nối tiếp. Dữ liệu truyền được định dạng dưới dạng mã ASCII. Modbus ASCII có ưu điểm là có thể dễ dàng để người dùng hiểu được dữ liệu đang truyền. Thơng thường thì giao thức Modbus ASCII được sử dụng trong việc kiểm tra và giới thiệu cho giao thức mạng Modbus.
- Modbus TCP/IP: Dữ liệu có thể được truyền trên mạng LAN hoặc mạng ở trên một khu vực rộng. Dữ liệu được định dạng theo mã hexadecimal.
Ứng dụng của giao thức modbus:
Modbus là một giao thức truyền thơng mở, nó là phương pháp truyền thơng phổ biến nhật được sử dụng để kết nối các thiết bị điện tử công nghiệp.
Modbus thường được dùng để truyền các tín hiệu từ các thiết bị đo, thiết bị điều khiển trở về bộ điều khiển chính hay hệ thống thu thập dữ liệu.
Mosbus thường dùng để kết nối máy tính giám sát với một thiết bị điều khiển (RTU: remote terminal unit) trong hệ thống Scada (hệ thống điều khiển và thu thập dữ liệu).
Modbus RTU làm việc:
Modbus truyền tin thông qua dây nối tiếp giữa các thiết bị. Cách cài đặt đơn giản nhất là dùng 1 cáp nối tiếp kết nối giữa 2 port nối tiếp của 2 thiết bị master – slave.
Dữ liệu được truyền đi dưới dạng bit. Mỗi bit được thể hiện dưới dạng điện áp. Mức 0 ứng với điện áp dương và bit 1 ứng với điện áp âm. Các bit này được gửi với tốc độ rất nhanh. Tốc độ truyền thông thường là 9600 baud.
Cấu trúc đoạn tin trong giao thức mạng Modbus thể hiển qua hình 2.3
Byte 1: address field
Có độ dài 1 byte. Byte này cung cấp địa chỉ của slave mà master sẽ tác động đến. Trong cả đoạn tin yêu cầu gửi từ master và đoạn tin đáp ứng nhận từ slave thì byte này có giá trị giống nhau. Mỗi một slave trong mạng có một địa chỉ modbus riêng (địa chỉ được chọn trong khoảng từ 1 đến 247). Bằng cách này, sau 1 byte đầu tiên mỗi một slave sẽ biết được nó có nhận đoạn tin hay khơng.
Byte 2: function field
Byte thứ 2 mà master gửi đi là function code (mã nhiệm vụ). Mã này giúp slave biết được nhiệm vụ mà master muốn slave phải làm. Điểm đặc biệt của modbus là nó cung cấp một bảng 2.1 mã hàm chung cho tất cả các thiết bị.
Bảng 2.1: Bảng mã hàm giao thức Modbus
Byte 3: Data field
Chức năng của khối dữ liệu: khối này thông thường chứa địa chỉ của các vùng trên thiết bị slave mà master muốn tác động đến.
Trong giao thức mạng Modbus, thì có một tiêu chuẩn địa chỉ chung cho tất cả các thiết bị có hỗ trợ giao thức Modbus. Có nghĩa là: chuẩn modbus quy định từng
vùng địa chỉ rõ ràng cho khối cuộn dây ngõ ra, khối ngõ vào rời rạc, khối thanh ghi đầu vào và khối thanh ghi Holding.
Byte 4 Khối CRC (Cyclic Redundancy Check):
Chức năng: giúp Slave kiểm tra được có lỗi xuất hiện trong khung dữ liệu khi master truyền xuống hay không. Mạng Modbus thực hiện việc kiểm tra lỗi theo 2 hình thức:
- Kiểm tra số lượng bit1, bit0 trong mỗi khung truyền, nhờ mã kiểm tra chẵn lẻ (Parity bit).
- Kiểm tra nội dung của tồn bộ khung truyền xem có chính xác hay khơng. Khi Master gửi khối dữ liệu xuống, nó sẽ dựa vào khung dữ liệu để tính mã CRC, sau đó Master gửi khung dữ liệu đó xuống, kèm theo cả mã CRC vừa tính được. Khi Slave nhận được khối tin truyền, nó cũng sẽ dựa vào khối dữ liệu nhận được, tính tốn độc lập lại mã CRC, sau đó nó kiểm tra CRC vừa tính được với CRC mà Master gửi xuống. Nếu 2 mã CRC giống nhau, thì khơng có lỗi xảy ra . Nếu 2 mã CRC khác nhau, tức là dữ liệu nhận được là khơng đúng, thì Salve sẽ báo lỗi lên cho Master . 2.2.2. Giới thiệu Modbus RTU trong PLC S7-200
Như ta đã biết PLC S7-200 là bộ điều khiển lơgic khả trình khá mạnh ứng dụng rộng rãi trong các lĩnh vực tự động hóa q trình sản xuất.
Với phần mềm lập trình cho PLC S7-200 là Step7 – Microwin, mạng truyền thông modbus được hỗ trợ trong thư viện đi kèm, để phục vụ cho các thiết bị làm việc qua giao thức modbus. (tham khảo mục [2])
Cấu trúc Modbus Master Protocol được thể hiện trên PLC S7-200 như sau: Khi cổng kết nối trên PLC được sử dụng phục vụ cho truyền thơng Modbus Master thì cổng đó chỉ được sử dụng cho truyền thông Modbus.
Tất cả PLC S7-200 version phải từ 2.0 trở lên hoặc cao hơn mới hỗ trợ thư viện cho truyền thông Modbus Master.
Cấu trúc Modbus Master bao gồm 3 chương trình con và 1 chương trình ngắt. Địa chỉ Modbus Master bao gồm địa chỉ và mã lệnh gửi xuống thiết bị Slave thể hiện qua bảng 2.2.
00001-09999 là các ngõ ra riêng biệt 10001-19999 là các ngõ vào riệng biệt 30001-39999 là các thanh ghi ngõ vào 40001-49999 là các thanh ghi holding
Bảng 2.2: Bảng địa chỉ modbus trong PLC Siemen S7-200
Để sử dụng truyền thông Modbus Master, ta thực hiện theo cấu trúc như sau: Cấu hình thơng số địa chỉ Modbus Master như hình 2.4 và các hàm lệnh sẽ làm việc với thiết bị Slave qua hàm MBUS_CTRL. MBUS_CTRL thực hiện sau mỗi vòng quét, sử dụng MBUS_CTRL để bắt đầu hay thay đỗi thơng số truyền nhận.
Hình 2.4: Lệnh khởi tạo cấu hình Modbus PLC Siemen S7-200.
- Thơng số Parity: lựa chọn kiểu mã hóa đường truyền. - Baud: Tốc độ đường truyền.
Cấu hình của một khung truyền Modbus qua cấu trúc MBUS_MSG như hình 2.5:
Hình 2.5: Lệnh cấu hình khung truyền bản tin Modbus PLC Siemen S7-200.
- Slave: Là địa chỉ của thiết bị Modbus Slave.
- RW: cấu hình của khung truyền tin xuống Slave nếu đọc là 0 hoặc ghi là 1. - Addr: là địa chỉ bắt đầu truy cập dựa trên Modbus Address (Slave).
- Count: là số bit dữ liệu hoặc số word dữ liệu cần truy cập theo tính năng ghi hoặc đọc đối với thiết bị.
- DataPtr: địa chỉ dữ liệu trên Modbus Master để truyền xuống Slave.
Để lập trình cấu hình cho các thơng số trên phải định dạng dữ liệu các tham số quy định trong bảng 2.3:
Bảng 2.3: Bảng kiểu dữ liệu cho thông số Modbus PLC Siemen S7-200
2.3. Tìm hiểu mạng GSM
SMS là từ viết tắt của Short Message Service. Đó là một cơng nghệ cho phép gửi và nhận các tin nhắn giữa các điện thoại với nhau. SMS xuất hiện đầu tiên ở Châu Âu vào năm 1992. Ở thời điểm đó, nó bao gồm cả các chuẩn về GSM (Global System for Mobile Communication). Một thời gian sau đó, nó phát triển sang cơng nghệ wireless như CDMA và TDMA. Các chuẩn GSM và SMS có nguồn gốc phát triển bởi ETSI (European Telecommunication Standards Institute). Ngày nay 3GPP (Third Generation Partnership Project) đang giữ vai trị kiểm sốt về sự phát triển và duy trì các chuẩn GSM và SMS.
Như chính tên đầy đủ của SMS là Short Message Service, dữ liệu có thể được lưu giữ bởi một SMS là rất giới hạn. Một SMS có thể chứa tối đa là 140 byte (1120 bit) dữ liệu. Vì vậy, một SMS có thể chứa:
160 ký tự nếu mã hóa ký tự 7 bit được sử dụng (phù hợp với mã hóa các ký tự latin như alphatet của tiếng Anh)
70 ký tự nếu như mã hóa ký tự 16 bit Unicode UCS2 được sử dụng (dùng cho các ký tự không phải mã latin như chữ Trung Quốc…)
SMS dạng text hỗ trợ nhiều ngơn ngữ khác nhau. Nó có thể hoạt động tốt với nhiều ngơn ngữ mà có hỗ trợ mã Unicode, bao gồm Arabic, Trung Quốc, Nhật Bản, Hàn Quốc…
Nội dung của 1 tin nhắn SMS khi được gửi đi chia làm 5 phần như hình 2.6:
Hình 2.6: Cấu trúc của 1 tin nhắn SMS.
Instructions to air interface: chỉ thị dữ liệu kết nối với air interface (giao diện khơng khí).
Instructions to SMSC: chỉ thị dữ liệu kết nối với trung tâm tin nhắn SMSC. Instructions to handset: chỉ thị dữ liệu kết nối bắt tay
Instructions to SIM (optional): chỉ thị dữ liệu kết nối, nhận biết SIM. Ưu điểm của SMS
- Tin nhắn có thể được gửi và đọc tại bất kỳ thời điểm nào.
- Tin nhắn SMS có thể được gửi tới các điện thoại dù chúng đang bị tắt nguồn. - Ít gây phiền phức trong khi bạn vẫn có thể giữ liên lạc với người khác. - Được sử dụng trên các điện thoại di động khác nhau và có thể gửi cùng mạng hoặc khác mạng đều được.
- Phù hợp với các ứng dụng wireless sử dụng cùng với nó như: chức năng SMS được hỗ trợ 100% bởi các điện thoại sử dụng cơng nghệ GSM; có thể gửi nhạc chng, hình ảnh…; hỗ trợ chi trả các dịch vụ trực tuyến download nhạc chuông. 2.4. Module SIM300CZ
Là module dùng để nhận và phát sóng GSM với thiết bị đầu cuối là máy tính hoặc vi điều khiển thông qua cổng truyền USART (tham khảo mục [3]).
Hình 2.7: Hình ảnh module SIM300CZ.
2.4.1. Các đặc điểm chính của module SIM300CZ Truyền phát sóng GSM Truyền phát sóng GSM
Tự động đặt tốc độ Baud Tự động tắt khi quá nhiệt
Chức năng nhận thẻ SIM tự động
Có chế độ ngủ (Sleep) tiết kiệm năng lượng
Yêu cầu cấp nguồn cho Module là 3.4 – 4.5V, dòng điện cực đại là 2A. 2.4.2. Tập lệnh AT của module Sim 300CZ
a. Các thuật ngữ
<CR>: Carriage return (Mã ASCII 0x0D). <LF>: Line Feed (Mã ASCII 0x0A). MT: Mobile Terminal - Thiết bị đầu cuối mạng (trong trường hợp này là modem). TE: Terminal Equipment - Thiết bị đầu cuối (máy tinh, hệ vi điều khiển).
b. Cú pháp lệnh AT
Khởi đầu lệnh: Tiền tố “AT” hoặc “at” Kết thúc lệnh: ký tự <CR>
Lệnh AT thường có một đáp ứng theo sau nó, đáp ứng có cấu trúc: “<CR><LF><Response><CR><LF>”.
Các bước khởi tạo trong hình 2.9 được trình bày chi tiết từng bước như sau: (1) ATZ<CR>
Reset modem, kiểm tra modem dã hoạt động bình thường chưa. Gửi nhiều lần cho đến khi nhận được chuỗi ATZ<CR><CR><LF>OK<CR><LF>.
(2) ATE0<CR>
Tắt chế độ echo lệnh. Chuỗi trả về có dạng ATE0<CR><CR><LF>OK<CR><LF>. (3) AT+CLIP=1<CR>
Định dạng chuỗi trả về khi nhận cuộc gọi. Thông thường, ở chế độ mặc định, khi có cuộc gọi đến, chuỗi trả về sẽ có dạng:
<CR><LF>RING<CR><LF>
Sau khi lệnh AT+CLIP=1<CR> đã được thực thi, chuỗi trả về sẽ có dạng: <CR><LF>RING<CR><LF>
<CR><LF>+CLIP: "0929047589",129,"",,"",0<CR><LF>
Chuỗi trả về có chứa thơng tin về số điện thoại gọi đến. Thông tin này cho phép xác định việc có nên nhận cuộc gọi hay từ chối cuộc gọi.
Kết thúc các thao tác khởi tạo cho quá trình nhận cuộc gọi. Các bước khởi tạo tiếp theo liên quan đến các thao tác truyền nhận tin nhắn.
(4) AT&W<CR>
Lưu cấu hình cài đặt được thiết lập bởi các lệnh ATE0 và AT+CLIP vào bộ nhớ. (5) AT+CMGF=1<CR>
Thiết lập quá trình truyền nhận tin nhắn được thực hiện ở chế độ text (mặc định là ở chế độ PDU). Chuỗi trả về sẽ có dạng: <CR><LF>OK<CR><LF>
(6) AT+CNMI=2,0,0,0,0<CR>
Thiết lập chế độ thông báo cho TE khi MT nhận được tin nhắn mới. Chuỗi trả về sẽ có dạng: <CR><LF>OK<CR><LF>
Sau khi lệnh trên được thiết lập, tin nhắn mới nhận được sẽ được lưu trong SIM, và MT không truyền trở về TE bất cứ thông báo nào. TE sẽ đọc tin nhắn được lưu trong SIM trong trường hợp cần thiết.
(7) AT+CSAS<CR>
Lưu cấu hình cài đặt được thiết lập bởi các lệnh AT+CMGF và AT+CNMI. Thực hiện cuộc gọi:
Quá trình thực hiện cuộc gọi qua hình 2.10 được thể hiện chi tiết từng bước như sau: (1) ATDxxxxxxxxxx;<CR> Quay số cần gọi. (2) Chuỗi trả về có dạng: <CR><LF>OK<CR><LF>.
Chuỗi này thông báo lệnh trên đã được nhận và đang được thực thi. Sau đó là những chuỗi thông báo kết quả quá trình kết nối (nếu như kết nối không được thực hiện thành công).
(2A) Nếu MT khơng thực hiện được kết nối do sóng yếu, hoặc khơng có sóng (thử bằng cách tháo antenna của modem GSM), chuỗi trả về sẽ có dạng:
<CR><LF>NO DIAL TONE<CR><LF>
(2B) Nếu cuộc gọi bị từ chối bởi người nhận cuộc gọi, hoặc số máy đang gọi tạm thời không hoạt động (chẳng hạn như bị tắt máy) chuỗi trả về có dạng:
<CR><LF>NO CARRIER<CR><LF>
(2C) Nếu cuộc gọi không thể thiết lập được do máy nhận cuộc gọi đang bận (ví dụ như đang thông thoại với một thuê bao khác), chuỗi trả về sẽ có dạng:
<CR><LF>BUSY<CR><LF> (4s)
Tổng thời gian từ lúc modem nhận lệnh cho đến lúc nhận được chuỗi trên thông thường là 4 giây.
(2D) Nếu sau 1 phút mà thuê bao nhận cuộc gọi khơng bắt máy, chuỗi trả về sẽ có dạng:
<CR><LF>NO ANSWER<CR><LF> (60s)
(3) Trong trường hợp quá trình thiết lập cuộc gọi diễn ra bình thường, khơng có chuỗi thơng báo nào (2A, 2B, 2C hay 2D) được trả về, và chuyển sang giai đoạn thông thoại.
Quá trình kết thúc cuộc gọi được diễn ra trong hai trường hợp: (4A) Đầu nhận cuộc gọi gác máy trước: chuỗi trả về sẽ có dạng: <CR><LF>NO CARRIER<CR><LF>
(4B) Đầu thiết lập cuộc gọi gác máy trước: phải tiến hành gửi lệnh ATH, và chuỗi trả về sẽ có dạng:
<CR><LF>OK<CR><LF> Nhận tin nhắn:
Mọi thao tác liên quan đến quá trình nhận tin nhắn đều được thực hiện trên 2 ngăn 1 và 2 của bộ nhớ nằm trong SIM trong hình 2.11:
(1) Đọc tin nhắn trong ngăn 1 bằng lệnh AT+CMGR=1.
(2A) Nếu ngăn 1 khơng chứa tin nhắn, chỉ có chuỗi sau được trả về: <CR><LF>OK<CR><LF>
(2B) Nếu ngăn 1 có chứa tin nhắn, nội dung tin nhắn sẽ được gửi trả về TE với định dạng như sau:
<CR><LF>+CMGR: "REC UNREAD","+84929047589",,"07/05/15,09:32:05+28" <CR><LF>NỘI DUNG<CR><LF>
<CR><LF>OK<CR><LF>
Các tham số trong chuỗi trả về bao gồm trạng thái của tin nhắn (REC UNREAD), số điện thoại gửi tin nhắn (+84929047589) và thời gian gửi tin nhắn (07/05/15,09:32:05+28) và nội dung tin nhắn. Đây là định dạng mặc định của module SIM300CZ lúc khởi động. dạng mở rộng có thể được thiết lập bằng cách sử dụng lệnh AT+CSDH=1 trước khi thực hiện đọc tin nhắn.
(3) Sau khi đọc, tin nhắn được xóa đi bằng lệnh AT+CMGD=1.
Thao tác tương tự đối với tin nhắn chứa trong ngắn thứ 2 trong các bước 4, 5A (5B) và 6.
Gửi tin nhắn:
Quá trình gửi tin nhắn thể hiện qua hình 2.12 được trình bày từng bước như sau:
(1) Gửi tin nhắn đến thuê bao bằng cách sử dụng lệnh AT+CMGS=”số điện thoại”. (2) Nếu lệnh (1) được thực hiện thành cơng, chuỗi trả về sẽ có dạng:
<CR><LF>> (kí tự “>” và 1 khoảng trắng).
(3) Gửi nội dung tin nhắn và kết thúc bằng kí tự có mã ASCII 0x1A.