Cấu trúc bức điện Modbus

Cấu trúc bức điện
     Một thông báo Modbus bao gồm nhiều thành phần và có chiều dài có thể khác nhau. Trong một mạng Modbus chuẩn, nếu một trong hai chế độ truyền (ASCII hoặc RTU) được chọn, một thông báo sẽ được đóng khung. Mỗi khung bao gồm nhiều ký tự khung có cấu trúc như được mô tả ở phần trên. Các ký tự này sẽ được truyền đi liên tục thành dòng ở chế độ RTU, hoặc có thể gián đoạn với khoảng cách thời gian tối đa một giây ở chế độ ASCII. Mục đích của việc đóng khung là để đánh dấu khởi điểm và kết thúc của một thông báo, cũng như bổ sung thông tin kiểm lỗi. Trường hợp thông báo không được truyền trọn vẹn có thể phát hiện được và báo lỗi.
    Hai chế độ truyền ASCII và RTU không những chỉ khác nhau ở cách mã hóa thông tin gửi đi và cấu trúc ký tự khung, mà còn khác nhau ở cấu trúc một bức điện gửi đi - hay nói cách khác là cấu trúc khung thông báo, cũng như biện pháp kiểm lỗi.
    Trong một mạng khác như MAP hay Modbus Plus, giao thức mạng có qui định riêng về cấu trúc khung thông báo. Hình thức định địa chỉ và phương thức truyền cũng hoàn toàn do giao thức mạng cụ thể định nghĩa, vì vậy phần địa chỉ nằm trong một thông báo Modbus có thể trở nên không cần thiết trong quá trình truyền dẫn. Tuy nhiên, một địa chỉ Modbus sẽ được chuyển đổi thành một địa chỉ trạm tương ứng của mạng phía dưới
Khung ASCII
    Trong chế độ ASCII, một thông báo bắt đầu với dấu hai chấm (:), tức ký tự ASCII 3A, và kết thúc bằng hai dấu quay lại-xuống dòng (CRLF), tức hai ký tự ASCII 0D và 0A (Hình 4.10). Mỗi byte trong thông báo được truyền đi bằng hai ký tự ASCII, vì vậy các ký tự được phép xuất hiện trong các phần còn lại của khung là 0-9 và A-F.
    Mỗi thiết bị tham gia mạng có trách nhiệm liên tục theo dõi đường truyền và phát hiện sự xuất hiện của dấu hai chấm. Khi dấu hai chấm nhận được thì hai ký tự tiếp theo sẽ mang địa chỉ của thiết bị được yêu cầu nhận thông báo hoặc thiết bị đã gửi thông báo đáp ứng. Khoảng cách thời gian tối đa cho phép giữa hai ký tự trong một thông báo là một giây. Nếu vượt quá giá trị này, bên nhận sẽ coi là lỗi.
      Khung ASCII sử dụng phương pháp LRC (Longitudinal Redundancy Check) để cho việc kiểm lỗi. Chi tiết về phương pháp này sẽ được mô tả trong chương mục tiếp theo (Bảo toàn dữ liệu). Khung RTU
     Trong chế độ RTU, một thông báo bắt đầu với một khoảng trống yên lặng tối thiểu là 3.5 thời gian ký tự. Thực tế, người ta chọn thời gian đó bằng một số nguyên lần thời gian ký tự, như được biểu thị bằng dãy (- - - -) trên Hình 4.11. Ô đầu tiên được truyền sẽ là 8 bit địa chỉ, sau đó đến 8 bit mã hàm, một số byte tùy ý dữ liệu và cuối cùng là thông tin kiểm lỗi CRC. Sau khi truyền ký tự cuối của mã CRC, khung thông báo cũng phải được kết thúc bằng một khoảng trống yên lặng tối thiểu là 3.5 thời gian ký tự, trước khi bắt đầu một thông báo mới. Thực chất, khoảng trống kết thúc của một thông báo cũng có thể chính là phần khởi đầu bắt buộc của thông báo tiếp theo.
     Khác với chế độ ASCII, toàn bộ khung thông báo RTU phải được truyền thành một dòng liên tục. Nếu một khoảng trống yên lặng lớn hơn 1.5 thời gian ký tự xuất hiện trước khi truyền xong toàn bộ khung, thiết bị nhận sẽ hủy bỏ thông báo chưa đầy đủ đó và cho rằng byte tiếp theo sẽ là địa chỉ của một thông báo mới.
Địa chỉ 
    Phần địa chỉ trong một khung thông báo bao gồm hai ký tự (ASCII) hoặc tám bit (RTU). Các giá trị địa chỉ hợp lệ nằm trong khoảng 0-247, trong đó địa chỉ 0 dành riêng cho các thông báo gửi đồng loạt tới tất cả các trạm tớ. Nếu Modbus được sử dụng trên một mạng khác, có thể phương thức gửi đồng loạt không được hỗ trợ, hoặc được thay thế bằng một phương pháp khác. Ví dụ, Modbus Plus sử dụng một cơ sở dữ liệu toàn cục, được cập nhật trong mỗi chu kỳ quay vòng token.
      Một thiết bị chủ sử dụng ô địa chỉ để chỉ định thiết bị tớ nhận thông báo yêu cầu. Sau khi thực hiện yêu cầu, thiết bị tớ đưa địa chỉ của mình vào khung thông báo đáp ứng, nhờ vậy thiết bị chủ có thể xác định thiết bị tớ nào đã trả lời. Trong một mạng Modbus chuẩn chỉ có một trạm chủ duy nhất, vì thế ô địa chỉ không cần thiết phải chứa cả địa chỉ trạm gửi và trạm nhận.
Mã hàm
     Giống như địa chỉ, phần mã hàm trong một khung thông báo bao gồm hai ký tự (ASCII) hoặc tám bit (RTU). Các giá trị hợp lệ nằm trong khoảng từ 1-255, trong đó các mã hàm trong thông báo yêu cầu chỉ được phép từ 1-127. Tuy nhiên, hầu hết các thiết bị chỉ hỗ trợ một phần nhỏ số hàm trên và một số mã hàm được dữ trữ cho sau này. Một số hàm tiêu biểu được liệt kê trong bảng 4.8.
         Khi một thông báo gửi từ thiết bị chủ tới một thiết bị tớ, mã hàm chỉ địn hành động mà thiết bị tớ cần thực hiện. Khi thiết bị tớ trả lời, nó cũng dùng chính mã hàm đó trong  thông báo đáp ứng bình thường. Trong trường hợp xảy ra lỗi, mã hàm trả lại sẽ là mã hàm trong yêu cầu với bit cao nhất được đặt bằng 1 và phần dữ liệu sẽ chứa thông tin chi tiết về lỗi đã xảy ra.
Dữ liệu
    Trong một thông báo yêu cầu, nội dung phần dữ liệu nói lên chi tiết hành động mà bên nhận cần thực hiện.Ví dụ trong một yêu cầu đọc các thanh ghi thì phần dữ liệu chứa thông tin về địa chỉ thanh ghi đầu tiên, số lượng các thanh ghi cần đọc và chiều dài thực tế của chính phần dữ liệu.
     Trong trường hợp bình thường, phần dữ liệu trong thông báo đáp ứng sẽ chứa kết quả của hành động đã thực hiện, ví dụ nội dung các thanh ghi đã đọc. Nếu xảy ra lỗi, phần dữ liệu chứa mã ngoại lệ, nhờ đó mà thiết bị chủ xác định hành động tiếp theo cần thực hiện. Lưu ý rằng, một số hàm không đòi hỏi tham số, vì vậy phần dữ liệu có thể trống.