SSブログ

あれの開発記 26ページ目 [ColdFire V1]

投票感謝キャンペーンは以下のアドレスで行っています。
http://hamayan.blog.so-net.ne.jp/2008-09-01-2
Img_0671.jpg
net_set_radio_008.png
Day Timeのクライアントをやってみました。ちなみに今回はコンソールへの接続にXBeeのシリーズ1製品を使っています。

時刻の取得なので昔やったH8のネットワーク時計みたいにNTP(SNTP)でやろうかとも思いましたが、考えてみるとNTPを利用するメリットって、単に時刻を取得するだけではなく、内部時計を取得した時刻に擦り合せる、つまりいきなり大きく時刻を補正せず、ゆっくりと合わせて行くとか、なるべく細かい単位、ネットワーク時計の場合は1/8秒精度で合わせていましたが、つまりより高い精度を得られるのがNTPであり、別に1秒単位の精度で時刻を取得するなら、Day Timeで充分じゃないかい!と思ってしまいました。

細かい精度の時間を取得しても、SilentCががっちり掴んでいるだろうタイマーを横からいじる事は難しいので。

Day Timeサーバーには、昔作ったアプリケーションを使っていますが、勿論linux辺りのDayTimeを使っても宜しいでしょう。


main( char *s )
{
  char *buf,soc = CreateSocket( 0 );
  long dip = GetIP( s );
  int len;
  SendTo( soc, dip, 13, "hello", 6 );
  if( (len = RecvFrom( soc, 6000 )) > 0 )
  {
    buf = GetReceiveBuffer( soc, 1 );
    PrStr( buf );
    MemoryFree( buf );
  }
  CloseSocket( soc );
}

いやあ、これくらいだと簡単な記述で終るね。

マスタリングTCP/IP 入門編 第4版

マスタリングTCP/IP 入門編 第4版

  • 作者: 竹下 隆史
  • 出版社/メーカー: オーム社
  • 発売日: 2007/02/24
  • メディア: 大型本



詳解TCP/IP〈Vol.1〉プロトコル

詳解TCP/IP〈Vol.1〉プロトコル

  • 作者: W.リチャード スティーヴンス
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本



あれの開発記 25ページ目 [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。
※業務連絡です。すいませんP社の方、ESECと書いてしまいましたが、購入したのはワイヤレスジャパンのキャンペーンです。
Img_0671.jpg
net_set_radio_006.png
net_set_radio_007.png
調子に乗ってしまって、先のUDPエコーサーバーを改造してシリアル/Ethernet間の簡単な(トランスペアレントな)ブリッジを作成してみました。ですが、結構苦労しました事は前回のアップから時間が掛かっているところからも想像できるかと思います。

SilentCにはシリアルライブラリがあるのだけれど、どうしても安定して動かす事ができない。コンソールとSCIが一致してしまうと駄目なんでしょうかね?。取り敢えずコンソールライブラリを「ああでもない、こうでもない」とやりながら、なんだかイマイチすっきりしない無理やりなプログラムです。マルチタスクでできればーーーー。


main()
{
#stop 0
  char c,*p,*e_buf;
  char soc = CreateSocket( 0 );
  char *s,*s_buf = MemoryAlloc( 80 );
  int len,dport;
  long dip = 0;
  Bind( soc, 7, 1 );
  s = s_buf;
  for(;;)
  {
    if( (len = RecvFrom( soc, 10 )) == (-1) )
    {
      break;
    }
    else if( len > 0 )
    {
      dip = GetSenderIP( soc );
      dport = GetSenderPort( soc );
      e_buf = GetReceiveBuffer( soc, 1 );
      for( p = e_buf; len > 0; len-- )
      {
        PrChar( *p++ );
      }
      PrStr( "\r\n" );
      MemoryFree( e_buf );
    }
    else ;

    while( (c = Getc( 0 )) > 0 )
    {
      PrChar( c );
      *s = c;
      if( c == 0x0d || c == 0x0a )
      {
        PrChar( 0x0a );
        *s = 0;
        if( StrCmp( s_buf, "END" ) == 0 )
        {
          CloseSocket( soc );
          MemoryFree( s_buf );
          return;
        }
        if( dip != 0 )
        {
          SendTo( soc, dip, dport, s_buf, StrLen( s_buf ) );
        }
        s = s_buf;
      }
      else
      {
        if( ++s >= &s_buf[ 80 ] ) s = s_buf;
      }
    }
  }
  CloseSocket( soc );
  MemoryFree( s_buf );
}

#stop 0制御命令を入れるとCtrl+Cでの停止が出来なくなるので、”END”と言う文字列をシリアル側でチェックして、そこで終了させています。
※while( (c = Getc( 0 )) > 0 )と記述しているので、トランスペアレントとは言えないですね。もっとも考えているフレームは全てテキストでやろうと思っているので、なんとかこれで行けるかな。

Interface (インターフェース) 2008年 10月号 [雑誌]

Interface (インターフェース) 2008年 10月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/08/25
  • メディア: 雑誌



Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌



あれの開発記 24ページ目 [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。
net_set_radio_005.pngなんとなくSilentCの使い方が判って来たので、ではでは簡単なUDPアプリケーションでも作成してみます。ECHOサーバーです。
クライアント側は随分昔に秋月のH8を使ったネットワークボードを評価した時に作成したオリジナルアプリケーションです。無事動けば、上に入力した文字と同じ文字が下に返って来ます。


Main側は以下の様に記述しました。
main()
{
  char *buf,soc = CreateSocket( 0 );
  int len,dport;
  long dip;
  Bind( soc, 7, 1 );
  for(;;)
  {
    if( (len = RecvFrom( soc, 6000 )) < 0 ) break;
    dip = GetSenderIP( soc );
    dport = GetSenderPort( soc );
    buf = GetReceiveBuffer( soc, 1 );
    SendTo( soc, dip, dport, buf, len );
    MemoryFree( buf );
  }
  CloseSocket( soc );
}

普通サーバー側は起動後滅多な事では停止しないでしょうけれど、いつまでもコンソールを占拠されてしまうと困るので、1分間受信が無いとサーバー処理を停止します。

マスタリングTCP/IP 入門編 第4版

マスタリングTCP/IP 入門編 第4版

  • 作者: 竹下 隆史
  • 出版社/メーカー: オーム社
  • 発売日: 2007/02/24
  • メディア: 大型本



マスタリングTCP/IP 応用編

マスタリングTCP/IP 応用編

  • 作者: Philip Miller
  • 出版社/メーカー: オーム社
  • 発売日: 1998/05
  • メディア: 単行本



詳解TCP/IP〈Vol.1〉プロトコル

詳解TCP/IP〈Vol.1〉プロトコル

  • 作者: W.リチャード スティーヴンス
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本



あれの開発記 23ページ目 [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。
net_set_radio_004.png折角なのでプロトコルスタックがアドレス解決をどの様に行っているかパケットを確認してみました。
main(”存在しないIPアドレス”)で実行した結果です。約3秒置きにARP要求を掛けていました。まあEthernet上のネットワーク装置なら数ms以内に応答を返してくるでしょうけれど、SilentCとしてはこの様に解決を計っていると言う事で。

マスタリングTCP/IP 入門編 第4版

マスタリングTCP/IP 入門編 第4版

  • 作者: 竹下 隆史
  • 出版社/メーカー: オーム社
  • 発売日: 2007/02/24
  • メディア: 大型本



詳解TCP/IP〈Vol.1〉プロトコル

詳解TCP/IP〈Vol.1〉プロトコル

  • 作者: W.リチャード スティーヴンス
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本



詳解TCP/IP〈Vol.2〉実装

詳解TCP/IP〈Vol.2〉実装

  • 作者: ゲリー・R. ライト
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/12
  • メディア: 単行本



あれの開発記 22ページ目 [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。
Img_0671.jpg今までの結果は多分、「シリアルコンソールから操作したからこうなった」と言う事ではなく、基本的にプロトコルスタック自体が持っている問題に思えます。

Interface誌の手順で行うと、
1.PCからtelnetでネットワークボードに接続する
2.telnetで接続したPC向けにmainを実行させる

となり、telnetで接続した時点でARP交換が行われ、ARPテーブルの更新が完了している為に、シリアルコンソールで起きたような問題が出なかっただけだと思います。
多分以下の構成で行った時は、同様の問題が発生するのではないでしょうか。
1.telnetで接続するPCと、UDPの結果を見る別のPCを用意する
2.操作側PCからtelnetでネットワークボードに接続する
3.結果を見る方のPC向けにmainを実行させる

そこで、Mainを以下の様に作り変えました。

main( char *s )
{
  char *d,soc = CreateSocket( 0 );
  long ip = GetIP( s );
  int n,r;
  d = MemoryAlloc( 6 );
  for( n = 0; n < 10000; n++ )
  {
    GetDigit( n, d );
    if( (r = SendTo( soc, ip, 30049, d, StrLen( d ) )) == 0 )
    {
      n--;
      continue;
    }
    else if( r < 0 )
    {
      PrHex( r );
      break;
    }
    else ;
  }
  CloseSocket( soc );
  MemoryFree( d );
}


※戻り値が0の時の条件式が、時には無限ループに陥る危険があるので、本当はここにもリミッターを入れるべきでしょう。
※まあしかし、エラー等を返す戻り値は常にチェックを入れる事が必要なんだと、あらためて思いましたよ。

Interface (インターフェース) 2008年 10月号 [雑誌]

Interface (インターフェース) 2008年 10月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/08/25
  • メディア: 雑誌



Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌



あれの開発記 21ページ目 [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。
Img_0671.jpgそこで一発目に何が起きているのだろうか?。転送できないなら出来ないなりに、何かエラーが返って来るだろうと、Mainを以下の様に作り変えました。


main( char *s )
{
  char *d,soc = CreateSocket( 0 );
  long ip = GetIP( s );
  int n,r;
  d = MemoryAlloc( 6 );
  for( n = 0; n < 10000; n++ )
  {
    GetDigit( n, d );
    if( (r = SendTo( soc, ip, 30049, d, StrLen( d ) )) <= 0 )
    {
      PrHex( r );
      break;
    }
  }
  CloseSocket( soc );
  MemoryFree( d );
}

つまり返り値を表示したのみです。
結果は!、面倒なので一々キャプチャしませんでしたが”0”が返って来ました。
ちょっと前に試験方法にミスが有ったので修正しましたよ。


Interface (インターフェース) 2008年 10月号 [雑誌]

Interface (インターフェース) 2008年 10月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/08/25
  • メディア: 雑誌



Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌



あれの開発記 20ページ目 [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。
Img_0671.jpg
net_set_radio_002.png
net_set_radio_003.png
では実験です。
シリアルからSilentCのコンソールに接続した場合、ネットワークの操作はできるか?。

結果は出来ませんでした。
不思議な動きです。一番最後のパケットモニタのキャプチャで1~4番目のパケットはARPの交換です。それ以降はWindowsが出したゴミで、SilentCからのUDPの転送は起きませんでした。

シリアルで接続した時、「ARPは出すがUDPは出さん」と言う事なんでしょうか。

再度チャレンジしてみたら、以下の手順でできました。
1.電源投入
2.シリアルコンソールに接続
3.まず一回目のmain("相手先IPアドレス")←しかしこの時はARPの交換のみ
4.もう一回main(”相手先IPアドレス”)
これでUDPの転送がスタートしました。うーむ。


※ICMP系も随分実装が削られている様です。オープンしていないポートにアクセスしても、ICMPによるエラーパケットは帰ってきません。
※無線とEthernetのブリッジをSilentCで実現できるかと期待したが、ちょっと微妙になってきたなぁ。←「先に調べて置けよ!」って話ですが。
※telnetで接続したまま暫く放置していると、偶に接続切れたり、TeraTermの画面にゴミが載っていたり、、、私のだけかなぁ。まさか熱房総半島!。

Interface (インターフェース) 2008年 10月号 [雑誌]

Interface (インターフェース) 2008年 10月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/08/25
  • メディア: 雑誌



Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌



あれの開発記 19ページ目 [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。

Img_0671.jpg
net_set_radio_001.png
久し振りにNET SET RADIOをちょこっと触っています。いままで全然触る事ができなかった。
今日はXBeeとの接続を試してみました。と言ってもSilentCのシリアルコンソールにアクセスするだけですけれどね。

まずXBeeは事前にX-CTUで設定しておきます。DTEの通信速度は57600bps、ルーター/エンドデバイス、送信先アドレス等を設定しておきます。

PC側にはコーディネーターを用意し、こちらもX-CTUで接続先アドレスを設定後、Tera TermでSilentCに接続したのが下のキャプチャです。

うーん、フロー制御無しだとどうしてもXBee側が取りこぼしをするみたいですね。
ですが、これで無線からの制御も可能と言う事で。

Interface (インターフェース) 2008年 10月号 [雑誌]

Interface (インターフェース) 2008年 10月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/08/25
  • メディア: 雑誌



Interface (インターフェース) 2008年 09月号 [雑誌]

Interface (インターフェース) 2008年 09月号 [雑誌]

  • 作者:
  • 出版社/メーカー: CQ出版
  • 発売日: 2008/07/25
  • メディア: 雑誌



あれの開発記 18ページ目 突入電流を観測する [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。

Img_0670.jpg思いっきりタコ足配線しているタップで例の扇風機のスイッチをON/OFFしていると、たまに他の電気機器の動作に影響を与えます(※自作した秋月のUSBオーディオステレオアンプですが)。
今度は突入電流を計測してみたいと思います。プログラムをちょっとだけ追加して、起動時から検出された最大の電流と電力を表示するようにしました。普通のテスターではこうはいかない、オリジナルの計測器の醍醐味です。

さて電化製品の電源投入時には突入電流が流れる事もある?訳ですので、それを検出してみます。例の扇風機ではどれ位の電流が流れるでしょうか。あまりにも巨大な電流が流れた場合(笑)、ブレーカーが飛ぶ事も考えられます。

通常、ブレーカーは機械的なリミッターで規定された電流値を超えた場合に電気を遮断する訳ですが、そこは機械なので一瞬でも電流がオーバーしたからと言って反応出来る訳ではない。しかし何時までも切れないと火事などの事故に至る事も考えられるので、あまり遅くてもいけない。当然遮断までの時間には規格があるとは思いますが、手元に資料が無いのでちょっと判りません。

このセンサーノードでは5波分の波形を取り込んでから電流値を計算していますので、事実上100ms内での平均電流と言う事になります。流石に100msも規格オーバーの電流が流れた場合、遮断されてしまうかもしれません。

結構何度もスイッチをバチコン、バチコンやって0.66Aを叩き出しました(笑)。定常時の約1.4倍です。

結論は、「電化製品は上手に使いましょう」と言う事ですね。

あれの開発記 17ページ目 再び電力を計ろう [ColdFire V1]

※一生懸命作ったので、宜しければ投票お願いします。http://www.freescale.co.jp/event/FTFJ/index.html
フリスクメンバーのログインが必要です。

※ここでも同様の実験を行っています。
http://hamayan.blog.so-net.ne.jp/2007-02-13
まず半田鏝の消費電力が落ちるのは、温度が上がると抵抗値も上がるからです。これは熱暴走しない見事な特性ですね。

この実験の時に使用した扇風機は自称44Wの扇風機でしたが、実際に流れていた電流は0.812Aだったので、今回使用した扇風機に比べて随分効率(力率)が落ちている事になります。やはり電化製品は新しい物の方がエコなのか?。あまり表に見えない性能上の改良を地道に行っているメーカーを探す。そう言った比較も面白いのではないでしょうか。

Img_0661.jpg
Img_0662.jpg
Img_0664.jpg
Img_0665.jpg
fan_low_power.png
fan_mid_power.png
fan_hi_power.png
前回は抵抗性負荷の代表としてオーブントースターの電圧・電流・電力を計ってみました。今度は誘導性負荷の代表として扇風機の電力を計って見ます。

一番上の写真が扇風機とセンサーノードのセットです。扇風機ですが去年買った割にはスイッチが押しボタン式とアナログな奴ですが、しかしマイコン野郎が改造にするには持って来いの奴です。

2番目、3番目、4番目の写真がそれぞれボタンの”弱”、”中”、”強”になっています。
それぞれ電流と電力を見て行くと、”弱”が0.22Aで21W、”中”が0.29Aで29W、”強”が0.48Aで40Wとなっています。
ちなみにこの扇風機の消費電力を見てみると、50Hzで40Wと記載されていますのでピッタリですね。ですが、、、何か変ではないでしょうか。

そうです、”強”の時の電流値が0.48AなのでVAで言えば48VAとなります。8VA分何処かに行ってしまいました。

続いてオシロスコープの波形を見てみます。緑色の波形は電圧波形、黄色の波形は電流波形です。1番目から”弱”、”中”、”強”となっています。

これを見ると”強”の波形のみ電流が随分遅れている事が判ります。”弱”、”中”はそれ程でも有りません。

この電流の遅れが8VAの誤差となっています。コイル等の誘導性負荷に交流信号を入れると、電圧波形に対して電流波形が90°遅れる事はご存知かと思います。勿論扇風機が全て誘導性負荷で出来ている訳ではないので、抵抗、誘導、容量の合成ベクトル分位相が変化する事になりますが、基本的に容量に対して誘導成分が大きいので、この様に電流が遅れて見えています。

前回電流や電力の計算方法を示しましたが、この様に電圧と電流の位相にずれが生じると、消費電力はずれが0°に比較して小さくなってしまいます。一見消費電力が小さくなって良い様に思えますが、実際には電気の使用効率が落ちているのであって決して良い事ではありません。実際にこの扇風機に必要な電流は0.48Aなので、それだけ余分な電流が配線やブレーカー等の機器の全てに負担となって掛かっている事になります。

また、電気機器のラベル等に記載されている消費電力で概算する電流よりも実際には大きな電流が必要と言う事は、契約電流値もその分を考慮しておかないと、思ってもみないところでブレーカーが落ちてしまったりする訳です。

一般家庭では電気会社とは電流契約なのであまり関係無いのですが、事業所等では電力契約を結ぶ事となります。
この時位相誤差が大きいと、それに応じて割高な電気料金を課金されてしまいます。
そこで事業所等では誘導成分で遅れた位相を進める為に、コンデンサを入れて位相の遅れを調整する所も有ります。力率改善コンデンサとか、進相用コンデンサとか呼ばれています。
一般家庭に比べて電力消費の大きな事業所での電気代節約等に役に立ちます。

まあいずれにせよ、一般家庭でも事業所でも、消費電力だけでなく、無効となってしまった電力も調べるのは、エコ(私の場合はエコノミーね!)には有効です。

ちなみに”弱”、”中”であまり位相が変化しなかったのは、もしかして抵抗が直列に入っているのかな。その内バラしてみましょう。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。