目次

状態遷移シミュレーション(Python)

 小型ソーラーパネルが、発電していることを確認し
 2次電池への充電ができる装置を考えていました。

 小型ソーラーパネルは、次のデバイスを利用。



 発電しているかは、ある電圧レベルに
 なっているのかを次の回路で検出。



 電圧レベル値をA/Dコンバータの出力値で判断し
 2次電池への接続は、リレーを使うとします。



 回路動作は、次の仕様でよいはず。

 発電電力を見て、リレーをMAKEかBREAKにする。

 タイミングチャートで、発電による充電をさせるか
 させないか、リレーの動作で検証。



 タイミングチャートから、発電電力が充電するのに
 充分ということを検出し、MAKEかBREAKを指定する
 ように状態遷移を考えます。

 MAKEを0、BREAKを1として、状態をタイミング
 チャートに書き込んでみると、次のようになります。



 状態を2ビットのシフトレジスタに入れてみると
 次のように変化。



 現在の状態を、下位ビットに、ひとつ前の状態を
 上位ビットに入れてみると、状態遷移は、以下と
 なります。

 00 → 01 → 11 → 10 → 00 → 10

 10進数で表現すると、0、1、3、2、1、0と
 数列になっていることを見て、1ではBREAKにし
 2ではMAKEとすればよいとわかります。

 スクリプト言語で状態遷移をシミュレートするには
 ループの中に、状態値を変化させる処理を入れて
 制御信号として何を出力するかを記述することと
 等価と理解できます。

 以下に、シミュレートのスクリプトを示します。

print( '0 pstate = '+str(0)+' '+str(10)+' MAKE' )
pstate = 0
for e in range(1,32):
  # shift state
  pstate <<= 1
  # mask
  pstate &= 3
  # get power
  power = 10
  if e == 10 or e == 11 or e == 28 :
    power = 0
  if e >= 20 and e < 25 :
    power = 0
  # judge
  if power <= 0 :
    pstate = pstate + 1
  # default
  eflag = 0
  xtmp = '***'
  if pstate == 1 :
    tmp = 'BREAK'
    eflag = 1
  if pstate == 2 :
    tmp = 'MAKE'
    eflag = 1
  #
  if eflag == 1 :
    xtmp = tmp
  #
  print( str(e)+' pstate = '+str(pstate)+' '+str(power)+' '+xtmp )

 タイミングチャートでは、発電していない場合は
 出力電力をゼロで扱っていますが、論理処理では
 正の整数とそれ以外の整数で処理。

 スクリプトで、状態遷移をシミュレートすると
 以下となりました。

0 pstate = 0 10 MAKE
1 pstate = 0 10 ***
2 pstate = 0 10 ***
3 pstate = 0 10 ***
4 pstate = 0 10 ***
5 pstate = 0 10 ***
6 pstate = 0 10 ***
7 pstate = 0 10 ***
8 pstate = 0 10 ***
9 pstate = 0 10 ***
10 pstate = 1 0 BREAK
11 pstate = 3 0 ***
12 pstate = 2 10 MAKE
13 pstate = 0 10 ***
14 pstate = 0 10 ***
15 pstate = 0 10 ***
16 pstate = 0 10 ***
17 pstate = 0 10 ***
18 pstate = 0 10 ***
19 pstate = 0 10 ***
20 pstate = 1 0 BREAK
21 pstate = 3 0 ***
22 pstate = 3 0 ***
23 pstate = 3 0 ***
24 pstate = 3 0 ***
25 pstate = 2 10 MAKE
26 pstate = 0 10 ***
27 pstate = 0 10 ***
28 pstate = 1 0 BREAK
29 pstate = 2 10 MAKE
30 pstate = 0 10 ***
31 pstate = 0 10 ***

 状態維持ならば、'*'を3個表示したので
 変化がわかりやすくなっています。

 状態変数pstateの値で、リレーのMAKEかBREAKを
 出力していることを確認できています。


目次

inserted by FC2 system