ช่วงนี้หลังจากทำ Term Project เกี่ยวกับระบบ Lift ผมเลยอยากจดไว้ก่อนว่าตัวโปรแกรม SPIN GUI ที่เขียนโดยภาษา Promela สามารถทวนสอบ Linear time Temporal Logic(LTL) ได้อย่างไรครับ โดยทำตามขั้นตอน ดังนี้
สิ่งที่ต้องมี
- Promela Code - ที่เขียน Model ที่ต้องการทวนสอบ
- LTL - ชุดคำสั่งที่ให้สำหรับการทวนสอบ ว่า Model เรามีคุณลักษณะที่ต้องการ หรือป่าว
ขั้นตอนการทวนสอบ LTL ใน Spin GUI
- ทำการเขียนคำสั่ง LTL ตัวอย่าง ต้องการตรวจสอบว่าประตูลิฟต์ของช่องที่ 1 ในทุกๆชั้น สามารถเปิดได้ไม่เกิน 1 ตัว หรือปิดทั้งหมด ที่ใช้ <= 1 เพราะ มีกรณีที่ลิฟต์ปิดหมดทุกตัว และลิฟต์เปิดได้ 1 ตัว สามารถเขียนคำสั่ง ได้ ดังนี้
#define firstElevatorSiloSafedoors (firstElevatorDoorOpen[0] + firstElevatorDoorOpen[1] + firstElevatorDoorOpen[2] + firstElevatorDoorOpen[3] + firstElevatorDoorOpen[4] + firstElevatorDoorOpen[5] + firstElevatorDoorOpen[6] + firstElevatorDoorOpen[7]<= 1) ltl { [] firstElevatorSiloSafedoors }
หมายเหตุ: ในส่วนของการ #define ไม่ต้องใส่ ; ต่อท้าย
- Save Code และกดปุ่ม Syntax Check ดังรูป
- หลังจากกดปุ่ม Syntax Check แล้ว Spin ตรวจสอบโปรแกรมที่เขียนขึ้นสร้าง Model และทำกำหนด ID ให้กับ LTL แต่ละตัง ดังรูป
- การทวนสอบ LTL ที่เขียนขึ้น ให้ไปที่ Tab Verification
- ทำการกำหนดค่า ดังรูป
จุดที่ 1: เลือก Acceptance Cycles
จุดที่ 2: เลือก Use Claim
จุดที่ 3: Claim Name เลือก LTL ที่ได้จากการกด Syntax Check ในขั้นตอนที่ 3 จากตัวอย่างที่เลือกมา พบว่าเป็น ltl_0 - กำหนดค่าให้เรียบร้อย จากนั้นกดปุ่ม Run
- ถ้าสังเกตุที่ผลลัพธ์ตรง never claim มีการบอกว่าเป็นการทวนสอบ ltl_0
- ถ้าเลื่อนลงมาล่างสุดพบผลลัพธ์ของการทวนสอบ ซึ่งถ้ามี Error ระบบแสดง Trail ให้ แต่ถ้าไม่มีอะไรให้ระบบแสดง No errors found -- did you verify all claims? ดังรูป
สำหรับในส่วนนี้มีการบอกข้อมูลอื่นๆ ด้วย เช่น จำนวนหน่วยความจำที่ใช้ จำนวน State ที่สร้างขึ้น และมี State ไหนมีเข้าไม่ได้ถูก Execute เป็นต้น
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.