Mô hình Promela cho hệ thống báo động, báo cháy mức trừu tượng và

Một phần của tài liệu Kiểm chứng tính đúng đắn hệ thống tính toán của chương trình bằng kiểm duyệt mô hình (Trang 50)

4. Cấu trúc luận văn

3.2.2.Mô hình Promela cho hệ thống báo động, báo cháy mức trừu tượng và

và kiểm chứng thuộc tính đơn giản

Từ mô tả hệ thống báo động, báo cháy như trên, ta xây dựng mô hình cho hệ thống bằng ngôn ngữ Promela áp dụng cho hệ thống có 5 Sensors bao gồm: Các tiến trình environment(), sensors(i), alarm(), và control(). Các tiến trình giao tiếp với nhau qua các kênh thông điệp. Hệ thống có mục đích báo động, báo cháy tương ứng với hai sự kiện breaker (trộm) và fire (cháy) được khai báo trong mtype:

mtype = {breaker, fire};

Mô tả các biến toàn cục của chương trình:  chan env=[0] of {mtype,byte};

Biến kênh env thể hiện sự giao tiếp giữa môi trường Environment

Sensors. Kênh này xác định môi trường gửi thông báo động loại gì cho Sensor

nào, chẳng hạn env!breaker,3; có nghĩa môi trường gửi thông báo có trộm cho

Sensor 3.

chan control_sensor=[0] of {mtype,byte};

Biến kênh control_sensor thể hiện sự giao tiếp giữa SensorsControl Panel, kênh này khi gửi (nhận) thông báo sẽ xác định được là có động loại nào (trộm (breaker) hay cháy (fire)) và động tại Sensor nào, chẳng hạn

control_sensor?fire,2; có nghĩa là kênh control_sensor nhận thông báo cháy từ

Sensor 2.

chan control_alarm=[0] of {mtype};

Biến kênh control_alarm thể hiện sự giao tiếp giữa Control Panel và chuông báo Alarm. Qua kênh này khi Alarm nhận được thông báo có cháy hay trộm thì đều xử lý để phát âm thanh báo động, chẳng hạn

control_alarm?breaker;.  bit sound;

Biến sound kiểu bit thể hiện khi sound=1 là phát âm thanh, sound = 0 thì ngừng phát.

bit move;

Biến move kiểu bit được sử dụng như lính canh, khi môi trường bắt đầu có động thì move = 1.

Các tiến trình: Hệ thống báo động, báo cháy mức trừu tượng được mô tả qua 8 tiến trình: environment(), sensors(i) (i=1..5), alarm(), và control().

 Tiến trình environment:

proctype environment(){ show byte j=1;

do ::j<=5 -> atomic{env!breaker,j;move=1;j=j+1}; :: j<=5 -> atomic{env!fire,j;move=1;j=j+1}; ::j>5-> break; od }

Tiến trình environment giả lập một môi trường thông báo động tới

sensors(i)(i=1..5), mỗi khi có động biến move nhận giá trị 1 (move = 1).  Tiến trình sensors:

proctype sensors(byte i){ end: do

::env?breaker,i->control_sensor! breaker,i; ::env?fire,i->control_sensor! fire,i; od

}

Tiến trình sensors khi nhận được thông báo có động từ môi trường (cháy –

fire hay trộm – breaker) qua kênh env thì nó sẽ gửi thông báo đó cho Control Panel qua kênh control_sensor. Tại đây Control Panel sẽ nhận được thông báo động loại gì và do Sensor nào gửi tới.

 Tiến trình alarm: proctype alarm(){ end: do ::control_alarm?breaker->sound=1; ::control_alarm?fire->sound=1; od }

Trong tiến trình alarm, mỗi khi Control Panel nhận được thông báo có động (cháy hay trộm) từ control_sensor, nó sẽ gửi thông báo này tới Alarm qua kênh control_alarm để Alarm phát chuông báo động (sound = 1). (adsbygoogle = window.adsbygoogle || []).push({});

 Tiến trình control: proctype control(){ byte k; bit b; bit f; end: do ::b==0 && f==0 -> end1: if :: control_sensor?breaker,k -> b=1;

:: control_sensor?fire,k -> f=1; fi; ::b==1 -> atomic{control_alarm! breaker; b=0}; ::f==1 -> atomic{control_alarm!fire; f=0}; od }

Tiến trình control điều khiển nhận thông báo khi có động từ các Sensors

qua kênh control_sensor và gửi thông báo động cho Alarm qua kênh

control_alarm.

 Và tiến trình init:

init {

atomic{

run environment();

run sensors(1);run sensors(2);

run sensors(3);run sensors(4);run sensors(5); run alarm();

run control(); } }

Mô phỏng chương trình trên trong Xspin không có lỗi và được kết quả sau:

Hình 3.2: Kết quả khi mô phỏng mô hình hệ thống báo động, báo cháy mức trừu tượng

Sau khi chạy mô phỏng chương trình như trên, cần kiểm tra tính chất mà hệ thống phải thỏa mãn bằng việc chạy verify. Tính chất cần kiểm chứng của hệ thống báo động, báo cháy mức trừu tượng là: “bất cứ khi nào có động, hệ thống đều phải báo”.

Biểu thức LTL mô tả tính chất trên là: [](move-><>sound)

Spin sẽ tự động sinh ra cấu trúc never claim khi thêm công thức LTL trên. Kết quả chạy verify cho thấy không có lỗi vi phạm do vậy hệ thống thỏa mãn tính chất cần kiểm tra.

Hình 3.3: Kết quả kiểm chứng mô hình hệ thống báo động, báo cháy

Phân tích kết quả trên thấy errors: 0 nên mô hình đưa ra thỏa mãn thuộc tính đã nêu.

3.3. Hệ thống báo động, báo cháy mức 2 3.3.1. Mô tả hệ thống mức 2

Một phần của tài liệu Kiểm chứng tính đúng đắn hệ thống tính toán của chương trình bằng kiểm duyệt mô hình (Trang 50)