Trong hệ thống biểu quyết điện tử số DCN sử dụng giao thức truyền thông Full cung cấp đầy đủ chức năng giao thức bao gồm truyển lại và kiểm tra truyền thông. Trong hệ thống Multi - CCU thì đòi hỏi số lượng lớn bộ nhớ khi sử dụng giao thức này.
Đặc tính của giao thức truyền Full:
- Ưu tiên sử dụng phát hiện header bằng việc sử dụng escape handling. - Thủ tục cung cấp thông tin ACK và NACK
- Thông tin được gửi bằng một khối. Bộ điều khiển trung tâm kiểm tra nếu mỗi byte nhận được trong 50 ms của byte trước. Nếu không thì gói NACK được gửi đi.
- Dựa vào việc nhận gói NACK sau đó thông tin được gửi lại.
- Mỗi thông tin bao gồm một số tuần tự. Việc nhận sử dụng dãy tuần tự này để nhận thông tin.
- Khi không có gói ACK được nhận trong 2 giây sau khi kết thúc việc truyền dữ liệu thì sẽ truyền lại.Tổng số truyền lại thông tin là 2 lần trước khi truyền gói dữ liệu bị huỷ bỏ.
- Kiểm tra kết nối sử dụng heartbeat. Mỗi gói nhận được có giá trị heart beat chính xác. Khi vượt qua thời gian heartbeat thì truyền thông sẽ dừng lại. Tất cả gói dữ liệu bị tạm dừng sẽ bị huỷ bỏ. Trên các ứng dụng sẽ thông báo đến bộ điều khiển từ xa là truyền thông lỗi, thất bại.
- Trong trường hợp đặc biệt thay đổi thông số truyền thông được thiết lập thông qua MDSC_COMMUNICATION_PARAMS: sau khi truyền thông tin này hệ thống đợi trả lời. Điều này giảm thông số truyền qua.
1. Định dạng thông tin header:
Header có kiểu như sau:
typedef struct { BYTEbyEscape; // có giá trị 0xC8 BYTEbyHeaderType; BYTEbySequence; } RSMT_HEADER;
byEscape Escape byte dùng cho nhận dạng phần header. Dạng escape byte kết hợp cùng với loại tiêu đề để định nghĩa ra mục đích của gói dữ liệu.
byHeaderType Thông tin loại gói dữ liệu
bySequence Thông tin tuần tự khi gói dữ liệu được kích hoạt
2.Định nghĩa kiểu gói dữ liệu:
Đặc tính giao thức Full sử dụng nhiều loại header để nhận biết thông tin truyền đi. Sau đây là các loại headertypes:
‘$’ Gói chứa thông tin dữ liệu.
‘@’ Gói thông tin xác nhận ACK. Gói dữ liệu này chỉ chứa header và checksum.
‘#’ Gói không xác nhận trả lời NAK. Gói dữ liệu này chỉ chứa header và checksum không có thông tin trong gói này. Gói này yêu cầu truyền lại dữ liệu xác định với số tuần tự trong header.
‘?’ Gói dữ liệu heartbeat . Khi số tuần tự được truyền qua thì số tiếp theo của gói tiếp được truyền. Gói này được sử dụng để kiểm tra truyền thông.
3.Tính toán kiểm tra lỗi Checksum:
Gói dữ liệu kết thúc bằng vùng checksum. Kiểm tra tất cả thông tin bên trong header và dữ liệu.
Gói checksum có cấu tạo:
correction checksum typedef struct
{
BYTEbyCorrection; BYTEbyChecksum;
} RSMT_CHECKSUM;
byCorrection Giá trị chính xác này tính toán bằng giá trị 0xC8. Cũng có thể giá trị này gồm: 0x00 hoặc 0x13.
byCheck Tính toán checksum thông qua header, thông tin dữ liệu và giá trị xác định.
The Checksum được tính toán theo thứ tự như sau: 1. Đặt byte chính xác bằng giá trị 0x00.
2. Tính tổng tất cả các bytes với tiêu đề, thông tin và kiểm lỗi. 3. Đảo bít của checksum để đưa về module 256.
4. Kiểm tra lại checksum có bằng giá trị (0xC8). Khi bằng: a. Gán giá trị kiểm lỗi bằng 0x13.
b. Trừ giá trị cũ bằng giá trị (0x00) và cộng giá trị mới (0x13) rồi tính tổng như bước 2.
c. Đưa module 256 vào tính toán checksum và thực hiện đảo ngược bit của checksum.
Kết quả không bao giờ bằng giá trị escape.
Việc tính toán checksum này gửi đi phụ thuộc vào gói dữ liệu. Việc nhận được thực hiện chỉ ở bước 2 và 3 .