我是Jspin
和Promela
的新手。我试图实现以下系统:
家庭报警系统可以使用个人ID密钥或密码激活和停用,激活后系统进入约30秒的等待时间,允许用户撤离报警装备后的安全区域的时间,当检测到入侵时,警报具有内置的等待时间或15秒的延迟,以允许入侵者输入密码或刷卡密钥从而识别自己,如果在分配的15秒内未发出识别警报将关闭,直到使用身份证或密码取消激活它。
这是代码:
mtype = {sigact, sigdeact};
chan signal = [0] of {mtype};
/*chan syntax for declaring and initializing message passing channels*/
int count;
bool alarm_off = true; /*The initial state of the alarm is off*/
active proctype alarm()
{
off:
if
:: count >= 30 -> atomic {signal!sigdeact; count = 0;alarm_off = false; goto on;}
:: else -> atomic {count++; alarm_off = true; goto off;}
fi;
on:
if
:: count >=15 -> atomic { signal!sigact; count = 0;
alarm_off = false; goto off;}
:: else -> atomic {signal!sigact; alarm_off = true; goto off;}
fi;
pending:
if
:: count >= 30 -> atomic {count = 0; alarm_off = false; goto on;}
:: count < 30 -> atomic {count++; alarm_off = false; goto pending;}
fi;
}
当我使用Jspin
运行代码时,我收到此消息:
Error: undeclared variable: sigact
但我在标题中声明了这一点。
我该如何解决这个问题?
答案 0 :(得分:1)
根据Promela
的{{3}},您正确使用mtype
。
事实上,我无法使用spin
版本6.4.3
重现您的错误,因此我怀疑这是Jspin
未正确更新的特定问题。
除非您想使用spin
代替Jspin
,否则您可以尝试以下解决方法,即使使用Jspin
也可以使用>:
#define sigact 0
#define sigdeact 1
chan signal = [0] of {short}; // or bool for only 2 values
...
由于没有人从signal
读取,我认为系统模型不完整,稍后会添加更多进程。
请注意,在以下指令序列中:
atomic { signal!sigdeact; count = 0; alarm_off = false; goto on; }
原子性将alarm
signal
0
因为off
是同步频道(它的大小为count >= 30
})所以另一个进程必须立即安排读取正在发送的消息。
在count
州,当0
将alarm_off = false
重置为on
时,请设置on
,然后转到州alarm_off
}。在true
州,您立即将pending
设置回alarm
。这是有意的吗?看起来有些错误,也许你打算去州input
。
通过阅读系统说明,signal
似乎缺少某种pending
信号。我怀疑您使用的off
频道与其预期目的不同。
如果正确的个人ID / 密码>,该模型是否应该从状态public class NewsBlock : BlockData
{
[CultureSpecific]
[Display(
Name = "Heading",
Description = "Add a heading.",
GroupName = SystemTabNames.Content,
Order = 1)]
public virtual String Heading { get; set; }
}
转换为public class NewsBlockController : BlockController<NewsBlock>
{
// GET: NewsBlock
public override ActionResult Index(NewsBlock currentBlock)
{
// apistuff
ApiModelWhatever returnFromApi = "whatever";
var model = new LatestNewsViewModel(currentBlock, returnFromApi);
return PartialView(model);
}
}
em>被使用了吗?