FrontPage

主にCADツールやサーバ管理など、知財や共同研究に関係しない事項についてはこちらに書いておきます。気が向いたら分類していますが、分類方針があやふやなので、結局、検索しないとだめかも。


目次


コメント欄

コメントはありません。 Comments/公開作業日誌?

お名前:

PukiWiki関係

URLで画像を指定するとき、画像表示サイズが変更されない件

  • Pukiwiki.ini.phpに下記のように設定する
  • define('PLUGIN_REF_URL_GET_IMAGE_SIZE', TRUE);

パスワード設定

  • PukiWiki-officialの説明を参照: https://pukiwiki.osdn.jp/?PukiWiki/Authentication
    • 認証方式、ユーザIDとパスワード設定、閲覧|編集|検索制限ページの指定
      • 例: ABC/以降のページ $read_auth_pages = array( '#^ABC/#' => 'hoge',);
    • ユーザIDとパスワードの設定
      • 例: $auth_users = array('hoge' => '{x-php-md5}***********************',);
      • ****部分(MD5パスワード)の作成: echo -n 'パスワード' | md5sum

LTspice関係

OS X (Mac)へのインストール

  1. MikuInstaller?をインストール(Wineインストーラ)
  2. リニアテクノロジー社よりLTspiceIVをダウンロード
  3. ダウンロードしたLTspiceのインストーラ(.exe)をMikuInstaller?にドラッグでインストール

Linuxへのインストール

  1. 下記のURIよりOS(ディストリビューション)に合わせてWineをダウンロードしてインストール
  2. リニアテクノロジー社よりLTspiceIVをダウンロード
  3. コマンドラインより wine LTspiceIV.exe でLTspiceをインストール

初期設定

初期設定は人の好みなので、使いやすければ何でもよいわけですが。

  • [Tools] - [Control Panel] - [Operation] - Default Window Tile Pattern = Vert
  • [Tools] - [Control Panel] - [Drafting Options] - Orthogonal snap wires = OFF
  • [Tools] - [Control Panel] - [Netlist Options] - Convert 'μ' to 'u' = check
  • [Tools] - [Color Preferences] - [Selected Item = Background], Red = Green = Blue = 255

LTspice雑記帳

検索すれば、LTspiceの優れた解説ページやブログがたくさん見つかるので、いまさら解説ページを作成する意義は小さいのですが、講義のシミュレーション演習や自宅での学習の際、忘れやすい事項について参照するためのノートとしてまとめたものを以下のURIに置きます。

MOSES関係

2015.02.22: MOSES for Windowsのインストールと設定手順

  • Moses を適当なディレクトリにコピー(例: C:\Moses)
  • テクノロジデータのディレクトリを作成(例: C:\Moses\LIB)
  • テクノロジの種類別ディレクトリを作成(例: C:\Moses\LIB\CMOS_2u)
  • テクノロジの種類別ディレクトリに cex.mdl, drc.md, mos_tt.lib をコピー
  • gex.defが供給されている場合は、これもテクノロジの種類別ディレクトリにコピー(MakeLSIでは、Mosesディレクトリに含まれている)
  • Windowsに環境変数を設定(Windows7 の場合)
    • コンピュータを右クリック -> メニューでプロパティを選択
    • システムの詳細設定をクリック
    • システムのプロパティウインドウが表示されるので、環境変数...ボタンをクリック
    • ユーザ環境変数欄で、新規ボタン...で、以下の環境変数を入力(既に変数が定義されている場合は、編集...ボタンをクリックし、 ; で区切って追加)
      • PATH = %PATH%;C:\Moses (インストールディレクトリ)
      • GEXLIB = C:\Moses\LIB\ (テクノロジデータのディレクトリ)
      • RULE = CMOS_2u (テクノロジの種類別ディレクトリ)
  • GEX(レイアウトエディタ)本体のショートカットを作成
    • インストールディレクトリ\wgex.exeを右クリックし、スタートメニューに表示するを選択
    • Windowsのスタートメニューで、wgexを右クリックし、プロパティを選択
    • 作業フォルダー欄に、レイアウトデータを保存するディレクトリを指定(例: C:\Moses\WORK)
      • 作業フォルダーは事前に作成しておくこと
  • スタートメニューから、WGEXを起動
  • WGEXのメニューより、ファイル -> 新規作成
  • WGEXのレイヤー設定が使用するテクノロジになっていない場合は(テクノロジの種類別ディレクトリにパスが通っていない場合)、以下のようにしても設定できる
    • WGEXのメニューより、設定 -> 定義ファイルを設定
    • 使用テクノロジに対応するgex.def を選択
  • 以上でレイアウト作業を開始できる

PSoC Designer関係

プロジェクトのPSoCデバイスを後から変更する

  1. 新規プロジェクトを作成すると、次に Select Project Type フォームが開く
  2. Clone project欄の Path の Browse...ボタンで、旧デバイスで作成したプロジェクト内の .soc ファイルを選択
    • .socファイは、プロジェクト名/プロジェクト名/プロジェクト名.soc の保存されている
  3. その下の Select target device のラジオボタンを選択
  4. Select Target Device欄の Device を、新デバイスに設定
  5. OKボタンで、新デバイスへの移行が可能かどうかをチェックした結果が表示される
  6. Cloneボタンをクリックすると、新デバイスに変更したプロジェクトが作成される

    #ref(): File not found: "psoc20120827-2.png" at page "公開作業日誌"

PSoCのデバイス選択

デバイスの比較については、各種の解説ページやCypress社のドキュメントに説明されているが、実際には、メモリ容量や、アナログ/ディジタルブロック数を考えてデバイスを選択することは難しい。多くの場合は、使用できるユーザモジュールやIOピン数で選択することが多いと思われる。私の場合は、以下の基準で探しているが、妥当かどうかは不明。

  • CY8C29466-24PXI(28DIP)
    • DIPが入手できる汎用デバイスとして
    • ディジタルブロックがCY8C28445より多い
      • 例えば、UART4個, RX, TX単体なら8ポート搭載可能
  • CY8C29666-24LFXI(48MLF)
    • 小型化できる汎用デバイスとして
    • IO数が多い
      • MLFの半田付けには少し気合いが必要
  • CY8C28445-24PVXI(28SSOP)
    • 複雑なアナログ処理を行う場合
    • デルタ-シグマ型ADCの同時4入力が可能
      • デシメーションフィルタ専用ブロックが4系統ありディジタルブロックを消費しない
    • インクリメント型Triadc(同時3入力)、Dualadc(同時2入力)なら他のデバイスでも可能
      • PSoC1のADCはあまり高速ではないので、データの同時性が要求される場合AMUXによるアナログ入力切り替えでは補間が必要。同時サンプリングが必要無い場合は、インクリメント型ADCをAMUXで切り替えて使用する
    • DACは4個まで可能
    • CapSense?可能
    • 2系統のI2Cコントローラ専用ブロックが用意されている
  • CY8C21534-24PVXI(28SSOP)
    • CapSense?(20入力)を使いたいとき
    • USB-UARTを使うときはCY8C24794-24LFXI

UARTとTX8, RX8の使い分け

UART, TX8, RX8, TX8SW(TX8のソフトウエア版)がある。UARTは双方向、TX8は送信専用、RX8は受信専用となっている。高レベルAPIはどれも殆ど同じ。複数のシリアル通信ポートが必要な場合には、使い分けが必要。例えば、多数のセンサによる計測システムでは、コマンドを送るための送信ポート1個と計測データを吸い上げるための受信ポートが多数必要となる。従って、1個のTX8と、多数のRX8を実装することになる。また、PCと1対1の通信を行う場合には、UARTを1個使用したほうが便利。

I2CとUARTの使い分け

I2Cは2線のBUS接続であるため、複数のチップ間の通信を容易に行え、また拡張性が高い(7bitアドレス)。しかし、データレートが100kまたは400kbpsに限られ、CPUクロックも制約を受ける。UARTは、BUS接続ではないため、通信相手毎にポートを作る必要がある。CY8C29466では、RX, TXの合計で8ポートまで。この範囲内であれば、UARTを使用することで、高速化が可能。UART接続でデバイス数を増やしたい場合は、ヘッダにデバイス番号を追加し、2つのUARTポートをスルーさせるように接続することで実現可能。ただし、この接続法では、ソフトウエア処理が挟まるため、デバイス間の遅延が発生し、処理の同時実行はできないので、別途割り込み専用の配線が必要となる。

VC3のアナログブロックでの利用

通信と計測を行う場合、異なるクロックが必要となる。クロックを分周した周波数ソースとして、VC1, VC2, VC3が用意されているが、分周比が大きい(低周波)のはVC3である。VC1, VC2で通信用のクロックを作成したとき、VC3でDACやADCを動かしたいことがあるが、アナログブロックのクロックとしてVC3が選択できない。別途カウンターを用意する方法もあるが、ディジタルブロックを複数消費するので、Misc Digital/DigInv?(インバータ)の入力をVC3とし、Analog Clock Select(アナログクロックのMUX)で、DigInv?を置いたディジタルブロックを選択して、アナログクロック他院に接続する。DigInv?ClockSync?をSync to SysClk?にしておくこと。インバータを通すので、アナログ部とディジタル部のクロック位相が180度ずれてしまうが、ADCやDAC単体では問題ないようだ。回路間の接続によっては、クロックの位相に注意が必要。DigBuf?というものもあるが、なぜか上手く動作しない。何かの設定が必要なのかも。

不揮発性メモリのエミュレーション

センサやADCの較正値の保持や前回終了時(電源OFF時)の状態の復元などに不揮発性メモリが必要なことが多い。大容量が必要ない場合には、外部マイクロSDモジュールを接続すしなくても、PSoC内のフラッシュメモリに書き込む方法が用意されている。

  • レイアウト画面で、E2PROMを配置(ブロックは消費しない)
  • Workspace Explorerで、flashsecurity.txtをダブルクリックして開く
    • flashsecurity.txtタブを選び、フラッシュメモリブロックの配置を調べる。1文字=1ブロック=64Byte(0x40Byte)を表す
    • 初期状態では、全領域 W(Write protected)になっている。デバイスに搭載されているフラッシュメモリ容量とプログラムの大きさを考慮して、使用するメモリ領域をU(Unprotected)に変更
    • Uに変更した領域の先頭ブロック番号を数えておく(1からスタート)
  • レイアウト画面に戻り、Parameters欄で、First Block(先頭ブロック番号※), Length(バイト)を入力する
    • ※ First Blockは、アドレスではなくブロック番号なので注意
    • First Blockの先頭アドレスが、プログラムで指定するアドレスの0番となる
  • E2PROM_bE2Write(先頭アドレス, データポインタ, データ長Byte, 温度), E2PROM_E2Read(先頭アドレス, データポインタ, データ長Byte) により書き込み/読み出しを行う
    • E2PROM_Start/E2PROM_Stop関数があるが使用しなくてもよい
    • E2PROM_bE2Writeの最後の引数は、PSoCの温度(摂氏)となっている。Flashメモリの書き込み特性の温度依存性に対応。温度測定モジュールFlashTemp?を使用するか、外部温度センサを利用または通常の使用環境温度を想定して値を代入。

FirstTouch?の回路図

自作の楽しみはないけれど、センサー、ブザー、LED、プログラマなど、全部付いていて、色々な実験ができるマイコンボードが3,000円ほどで買えるということで、早速、講義の演習に使用してみたが、学生には受けないようだった。CY8C21434 が搭載されていて、キャップセンス(タッチセンサ)も使える。

first_touch_SZ.jpg

評価ボード部分の等価回路図。

ftmf_circuit.png

評価ボードには、GPIOがピンヘッダーに接続されており、拡張が可能。写真はブレッドボードに挿せるようにした変換基板。RS232Cポートも付けてあるが、今ならUSBポートだろう。

br_ext_board.jpg

タッチイルミネーション

PSoC FirstTouch?の近接センサ(人体センサ)を使ったカラーイルミネーションの例

lab00_SZP.jpg
  • lab00.lzhをダウンロードして、適当な場所で解凍する。
  • lab00ディレクトリ内のlab00.appをダブルクリックするとPSoC Designerが起動する
  • PSoCデザイナのメニューより、Build - Generate/Build 'lab00' Projectを選ぶ
  • PSoC Device Configuration Selectionフォームで、CY8C21434 32-Pin(FirstTouch?に搭載されているPSoCの型番)が選ばれているのを確認してNextをクリック
  • User Pin Assignmentフォームで、Nextボタンをクリック
  • ファームウエア(組み込みプログラム)のコンパイルが始まる
  • Output欄に 0 error(s) 0 warning(s) と表示されていることを確認
  • FirstTouch?をプログラマに評価ボードを挿した状態で、PCのUSBポートに接続
  • PSoCデザイナのメニューより、Program - Program Part...
  • Program Partフォームで、Port SelectionがFirstTouch?/番号となっているのを確認
  • 下のステータスバーにConnectedと表示されているのを確認
  • 水色の矢印ボタンをクリックすると、PSoCにファームウエアがダウンロードされる
  • 下のステータスバーにPassと表示されているのを確認
  • これで、評価ボードがProximity Sensorとして動作するはず。電源はUSBから供給されているので、USBに挿したまま動作確認する。もし、電源が供給されていないようなら、Program Partフォームの電源マーク(丸に縦棒)をクリックする

LED体温計

lab02.lzhをダウンロードして、適当な場所で解凍してください。下記の回路図に合わせて、IOポートやクロックの設定をする必要があります。 LEDの色で体温を測る、LED体温計。30 - 40度ぐらいの温度を細かく測定する必要があります。ここでは、室温付近での温度変化を増幅する代わりに、ソフトゥエアでADCの変換結果(adc_out)を変数sensの倍率に拡大しています。但し、ソフトゥエアで増幅すると、その倍率に比例して精度(LSB当たりの変換電圧)が落ちることになります。精度を落とさないためには、ADCの前にアナログ電圧を増幅する方法がありますが、FirstTouch?に搭載されているPSoC CY8C21434には、Programmable Gain Amplifier のモジュールがありません。このため、ADCの変換ビット数を高くする必要があります。1bitの増加は、約6dBの増幅に相当します。

lab02_circuit.png

Thermistorは、温度によって抵抗値が変化するデバイスです。FirstTouch?に付いているものは、摂氏25度で10kohm, 温度依存性は、Cypress社のWEBページでAN2395というドキュメントに含まれる自動計算ソフトで計算できますが、ここでは、温度を数値で表すわけではないので、必要ありません。Zener (Zener diode)は、逆方向バイアスを加えると、一定電圧に保つことができるダイオードです。FurstTouch?には、2.4Vに保つダイオードが付いていて、これで一定電圧をThermistorに加えます。基準とする温度のときのTermistorの電圧を基準電圧(2.4V)/2となるように設定することで、その温度を中心として温度測定ができます。このため、10kohmの抵抗を接続しています。BGR(Bandgap Reference)は、ADCのMSBに相当する電圧を決める基準電圧源として使用しています。Thrmistorの出力電圧をADCでディジタル値に変換後、CPUにデータを転送し、2個のPWM回路のDuty Ratioを設定し、BlueとRedのLEDの明るさを制御して、色を変化させます。

PSoC Creator関係

PSoC Creatorのコンパイラライセンス登録

PSoC Creator をインストールすると、PSoC Creatorの登録画面が自動で起動するので、そのまま登録すればよいが(Cypress社のアカウント登録が必要)、コンパイラのライセンス登録は手動で行う必要がある。

  1. PSoC Creatorのメニュー: Help - Register - Keil...
  2. Keil License Registrationフォーム(下)で、Get LIC via Internet...ボタンをクリック
  3. ライセンスリクエスト用のWEBページが表示されれ、必要事項(太字の項目)を入力して送信すると、メールでライセンスコードが送られてくる
  4. メールのLicense ID Code (LIC)の文字列を、Keil License RegistrationフォームのNew License ID Code (LIC):欄にコピペ
  5. Add LICボタンをクリックすると、SUppoer Periodが更新される。ライセンスの有効期間は1年のようだ。

    #ref(): File not found: "psoccr20120827-1.png" at page "公開作業日誌"


TWE-Lite関係

インタラクティブモード

  • TWE-Liteには、ファームウエアを書き直さずに設定を変更するインタラクティブモードがあるが、親機と子機では、インタラクティブモードへの入り方が異なる。
    • 親機:TWE-Lite R(ライター)等でPCに接続し、+をゆっくり3回入力
    • 子機:TWE-Lite R等でPCに接続し、26番ピンをGNDに落とした状態でリセット(TWE-Lite Rの場合は、リセットスイッチを押す)

工作関係

レーザカッタの作図 (CorelDraw?)

  • CorelDraw?の極細赤線で書くと、切り線になる。
  • 周囲にでこぼこを作りたいときは、四角を貼り合わせて、一辺の線が完全に重なり合うようにする
  • 左のツールバーで、上から3番目(トリミング)のボタンをクリック - メニューが表示されるので、仮想セグメントの削除を選択
  • 線が重なっている部分にマウスカーソルを近づけると、カッターのアイコンが縦になる
  • 線の上をクリックすると、線が重なっている部分が削除され、四角形が一体化する

BNCとSMAケーブルの作り方

こちらに公開

2014.05.01: ワイヤーボンダーの基板は無電解金フラッシュ仕上げ

ワイヤーボンダーを行う基板は、ボンディングランド部分を無電解金フラッシュ仕上げにすること。簡易説明書に書き忘れていた。

近視老眼による半田付け

  • 近視の人は眼鏡を外して半田づけしてみましょう。視力の良い人より半田がうまく付けられる可能性があります。ただし、目が半田溶融部に近くなるので、フラックス等が目に入らないように注意。

老眼の場合、近視用眼鏡をしていると50cm-60cm離れた物しか見えないのですが、眼鏡を取ると、2-3cmのところにフォーカスが来ます。この状態だと、至近距離のため物が大きく見え、正確に半田付けを制御できます。半田付けのポイントは、半田の量と溶け具合を把握することですが、小さなパッド面積では、目が良くても溶け具合の把握が難しいので、精密工作用のレンズを使用するか、至近距離で見える目を持つことが必要です。フラックスで目がやられることだけ注意すれば、SSOP, 0.5mmQFPのほか、QFNやMLFでも半田付けできるようになります。

表面実装パッケージの半田付け

SSOP, QFPなどの表面実装パッケージの半田付け手順

  • ランド周辺にフラックスを塗る
  • ランドに半田を薄く付ける(複数本同時に付けて問題ない)
  • パッケージの位置を合わせて、角のピンを半田で固定する(固定できていればきっちり付いてなくてもよい)
  • 対角のピンも半田で固定する
  • 1本ずつピンの先端付近に半田を盛って半田を付けていく(先に固定したピンもしっかり付ける)
  • テスターでランドとパッケージピンの間の導通、隣接ピンのショートの有無を確認する

QFN, MLFの場合は、位置合わせまで行ったら、ピンセットで抑えて、ホットエアSMD除去機で加熱する。この場合、導通確認は難しいが、ショートの確認は可能。

PCBEによるGerberデータの出力

某P版.comに基板製造を発注したところ、拡張Gerberフォーマットで設計データを出して下さいと言われました。研究室でよく使用されているPCBE ver.0.4では、拡張Gerberフォーマットに対応していないため、PCBE ver.0.4で設計したPCBE0.4形式データを、PCBE ver.0.5で読んで、拡張Gerberデータを出力し、製造発注したところ、うまく製造できるようです。拡張Gerberデータの出力手順については、 http://jaco.ec.t.kanazawa-u.ac.jp/edu/vlsi/pcbe/ に書いておきました。

Miceosoft Windows10 関係

プリインストールアプリの削除

プリインストールアプリは、設定画面やコントロールパネルでは削除できないため、Power Shellで以下のコマンドを実行。

  • Get-AppxPackage?
  • または、Get-AppxPackage? | Select-String キーワード
  • インストール情報のリストから削除対象のアプリ_バージョン(例:Microsoft.Office.OneNote_***)を探し、PackageFullName?をコピーしておく
  • Remove-AppxPackage? 先程探したPackageFullName?

これを行う状況の例:Windows10には、何種類かのストアアプリがプリインストールされている。ストアアプリ版OneNote?もプリインストールされているが、これは、ログインアカウントをマイクロソフトアカウントからローカルアカウントに変更すると起動しなくなる。また、ローカルアカウントから関連付けしても復活できない。ただし、デスクトップ版OneNote?では、この現象は起こらない。起動しなくなったOneNote?は、一旦削除して、Windowsストアから再インストール(無料)すると、起動できるようになる。ただし、再インストールしてもローカルアカウントでは起動しない。

MS-IMEの変換が異常に遅い場合の対処

MS-IMEをしばらく使っていると、変換時間が遅くなり、キーボード入力の妨げとなることがある。予測変換に時間がかかっていると思われる。

  • MS-IMEのメニューでプロパティを選択
  • 詳細設定ボタンをクリック
  • 予測入力タブをクリック
  • 予測候補を表示するまでの文字数の数値を15にする(初期値では3)

ローカルアカウントとマイクロソフトアカウント

Windowsのアカウントには、PCに独自に設定したローカルアカウントとストアアプリを利用するときに必要なマイクロソフトアカウントがある。マイクロソフトアカウントを使用して、PCにユーザを作成した場合、ユーザ名がマイクロソフトに登録したままの名前になる。日本語で登録した場合、ユーザ名とホームディレクトリ名が日本語になり、日本語非対応のソフトなどが動作しない等の不都合がある。回避方法として下記が考えられる。

  • マイクロソフトアカウントの氏名を英語に変更する
    • マイクロソフト社のホームページ右上でサインイン
    • 右上メニューからアカウントを表示
    • 基本情報で名前の編集
  • 好きなユーザ名でローカルアカウントを作成し、後で設定画面からマイクロソフトアカウントでのサインイン方式に切り替える
    • この方法では、ユーザ名はマイクロソフトアカウント名に変更されるが、ホームディレクトリ名はローカルアカウントのユーザ名となる

ローカルアカウントのBitLocker?エラー

Windows8.1 の初期設定で、マイクロソフトアカウントではなく、ローカルアカウントを作成すると、システムドライブのBitLocker?が実行できないようで、ドライブエラーとなる(! マークが付くのでわかる)。そのまま使っても問題ないのだが、気持ちが悪いので、マイクロソフトアカウントを関連付けると解消される。しかし、エラーのまま(ローカルアカウントのまま)Windows10にアップグレードすると、BitLocker?解除も実行もできなくなり、エラーをクリアすることができず、Windows8.1再インストールとなる。もしかすると、Windows10のBitLocker?解除方法があるのかもしれないが。

Microsoft Windows7 関係

マウスカーソルをキャプチャーしたいとき

スタート - アクセサリ - コンピュータの簡単操作 で、拡大鏡を起動拡大鏡のウインドウにマウスカーソルを表示した状態で、スクリーンキャプチャーする。

デスクトップに一時的においたファイルが削除できないとき

デスクトップに一時的においたファイルを編集した後、削除ができなくなることがある。但し、この現象が起きるマシンとそうでない名心があるようで、特定マシンで頻繁に起きる。対策は、他のAdministratorアカウントで、ユーザフォルダの相当ファイルを削除する。コマンドラインでの実行は、

  • runas /user:hogehoge cmd (hogehogeはAdministratorアカウント名)
  • パスワード入力
  • hogehogeのコマンド端末で削除を実行

ログイン時にNASに自動接続できないとき

NASへの接続のためパスワードを保存設定するようにしておいても、「ネットワークドライブに再接続できませんでした」と表示され、接続ができないことがある。WindowsのバージョンやWindowsの更新状態にも依存しているようだ。いろいろな対処法が考えられるが、簡単な方法は以下の通り。Windows7 64bit Ultimate で動作確認(このバージョンは、金沢大学のMS包括ライセンス協定で提供されている)

  • コントロールパネル > ユーザーアカウントと家族のための安全設定 > 資格情報マネーージャー
  • Windows資格情報の追加
  • NASのサーバ名、ユーザ名、パスワードなどを設定してOKボタン
    • 以上の方法は、アカウントごとに行う必要がある

ATOKの言語バーが消える

ATOK2010以降変換精度が低いという噂があり(辞書の引き継ぎの問題では?)、ATOK2009を使い続けている人が多い。しかし、Windows7では、ATOK2009の言語バーが消えて使えなくなることがある。私の場合、Windows7 (64bit)でこの現象を確認した。ただし、この現象が出たのは、Dell OPTIPLEX のみで、他のマシンでは問題なく動作している。応急対処法は以下のとおり。

  • コントロールパネル > キーボードまたは入力方法の変更
  • キーボードの変更...ボタン
  • ATOK2009を選んで、プロパティボタンをクリック
  • ATOKプロパティウインドウの設定項目から、表示・ATOKナビを選ぶ
  • カーソル位置に入力モードを表示欄で、"しない"を選択
  • OKボタンで設定終了

2015.02.22: winmail.datの対処

Microsoft outlook から送信されたメールを受信すると、winmail.datという添付ファイルになっていることがある。このままでは、添付ファイルが読めないので、Gmailに転送して読む。専用のリーダソフトもあるようだが、稀に来るwinmail.datのために専用ソフトをインストールするのは面倒だ。

Microsoft Office関係

Wordに背景を貼り付ける

事務文書や推薦書などの専用様式が印刷物で提供されることが多い。スキャンした画像を背景として設定し、上に文字を入力すれば、プリント時の位置合わせの必要が無くなって便利だが、Microsoft Officeには、表だってこの機能が用意されていない。Wordの背景にスキャンした画像を貼り付けるには下記のようにする。

  • Word 2013
  1. メニューより、デザイン-ページ背景欄の「透かし」-ユーザ設定の透かし
  2. 図のラジオボタンをクリックして図の選択...(オフライン作業をクリックすると時間短縮できる)
  3. 背景図のファイルを指定
  4. 倍率=100%, にじみ=チェックしない-OK
  5. メニューより、挿入-ヘッダーとフッター欄の「ヘッダー」-ヘッダーの編集
  6. ヘッダー欄とフッター欄が表示される
  7. 図を左クリックすると、図のサイズや位置を調整できる
  8. 図を右クリックして、図の書式設定-色のリストボックス=白黒、などを選ぶ(ウオッシュアウト)
  9. 設定が終わったら、ヘッダーとフッターを閉じるボタンをクリック(背景は少し薄く表示されるが問題はない)
  • 参考:Woed 2010から2013で、ページレイアウトのメニューが一部デザインに移されている。以前あったレイアウト関係メニューが見つからない場合は、デザインを探してみると良い。
  • Word 2010
  1. メニューより、ページレイアウト-ページの背景欄の「透かし」-ユーザ設定の透かし
  2. 図のラジオボタンをクリックして図の選択...
  3. 背景図のファイルを指定(倍率=100%, にじみ=チェックしない)-OK
  4. メニューより、挿入-ヘッダーとフッター欄の「ヘッダー」-ヘッダーの編集
  5. ヘッダー欄とフッター欄が表示される
  6. 図を左クリックすると、図のサイズや位置を調整できる
  7. 図を右クリックして、図の書式設定-色のリストボックス=白黒、などを選ぶ(デフォルトではウオッシュアウト)
  8. 設定が終わったら、ヘッダーとフッターを閉じるボタンをクリック

Officeでよく使う操作をアイコン化する

Office2003以降、ツールバーがなくなりリボンで各種操作を行うようになった。よく使う機能をツールバーにアイコンとして並べておくと便利なのだが、Office2003以降では、リボンよりも、クイックアクセスツールバーにアイコン登録しておくほうが便利。

  1. ウインドウ上部のクイックアクセスツールバー右端の逆三角記号(ユーザ設定)をクリックし、リボンの下に表示をチェック(リボンの上に表示した方が使いやすい人もいるかもしれない)
  2. クイックアクセスツールバー右端の逆三角記号(ユーザ設定)をクリックし、その他のコマンドを選択
  3. コマンド選択のリストボックスで、全てのコマンドを選択
  4. クイックアクセスツールバーに表示したい操作を選んで、追加ボタンをクリック
  • PowerPoint?, Word, Excelのクイックアクセスツールバーに、上付き、下付き、シンボルフォントを設定、くらいを登録しておくと便利

Android関係

2015.02.08: NEXUSのスリープモード無効化

タブレットを表示器に使用する場合などは、スリープモードにならないようにする。設定画面 - {}開発者向けオプション - スリープモードにしないをチェック。開発者向けオプションは、デフォルトでは使用できないので、「Nexus7 への自作プログラムのインストール」の項を参照して、開発者になっておくこと。

2015.02.21: Androidのバックライトを付けたままにする

Android の画面は操作しないと消灯になり、最大30分まで設定できる。しかし、表示器として使用する場合には、点灯したままにしたい。Backlight Switchというアプリを使用して、指定アプリの起動時に、消灯しないように設定することができる。

Nexus7 への自作プログラムのインストール

Eclipse環境で開発したAndroidアプリケーションをスマホに転送するのは、スマホをUSB接続した状態で、Eclipseでアプリを実行し、エミュレータと接続された実機の接続画面で、実行したい機種を選択するだけというお手軽さだが、Google Nexus は少し手順が必要だ。Android端末は、PCにUSB接続すると、自動的にストレージと認識され音声や動画をUSBメモリと同じように転送できるが、Androidのシステムとして認識させるためにはPC側にドライバーをインストールする必要がある。一旦、Androidとして認識させると、DDMSから実機上でのデバッグが可能となり、これほど楽ちんな開発環境は、見たことがないほどだ。

手順は下記のような感じ。検索すると色々な手順が示されていて、Adnroidのバージョンにも依存するようだ。

  • Nexus7で設定 - タブレット情報 - ビルド番号を表示させ、ビルド番号を何度かタップすると、デベロッパーになるには後何ステップのような表示が出る
  • タップを繰り返すと、設定画面に、開発者向けオプションの項目が追加される 開発者向けオプションに入り、右上のスイッチがONになっていることを確認
  • USBデバッグのチェックを入れる
  • 設定画面から、セキュリティ画面に入り、提供元不明のアプリにチェックを入れる
  • USBケーブルでPCと接続すると、WindowsのデバイスマネージャーにNexus7が不明なデバイスとして表示されるので、これを右クリックしてメニューから"ドライバーソフトウエアの更新"を選ぶ
  • "コンピュータを参照してドライバーソフトウエアを検索します"を選択
  • "次の場所でドライバーソフトウエアを検索します"の参照ボタンで、ユーザディレクトリ配下の(Android SDKをインストールした場所)、android-sdks\extras\usb_driverを選ぶ
  • サブフォルダーも検索するにチェックを入れて、次へボタンをクリックする
  • ドライバのインストールが完了するとデバイスマネージャーにAndroid Deviceが表示される
  • Nexus7が、USBデバッグを許可するか聞いてくるのでOKする
  • EclipseでRunまたはDebugさせると、Android Devices Chooser が起動し、起動中のエミュレータおよび接続されたデバイスのリストが表示される
  • Nexus7を選んでOKをクリックすると、アプリがそのデバイスに転送および実行される
  • 実機で実行されていてもブレークポイントやログは有効である。さらに、PerspectiveをDDMS(Dalvik Debug Monitor Service)モードにすると、より詳細な実機の状態をPC側でモニタすることができる

ソフトウエアキーボードの制御

Androidスマートフォンで文字入力入力(エディットテキスト)にフォーカスすると、自動的にソフトキーボードが起動する。しかし、初期状態で起動されると都合の悪い場合がある。画面が余っていれば、下の方をソフトキーボードエリアとして残しておけば使い勝手がよいが、起動画面に多くの情報を表示する場合、最初からソフトウエアキーボードで画面が隠れるのは避けたい。この場合は、表示設定処理の前に下記のような記述を入れる。android.view.WindowManager?.LayoutParams?インポートすること。

   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       
       // Suppress the soft keyboard(追加部分)
      getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
       // Set the activity contents(表示設定)
       setContentView(R.layout.activity_main);
   }

NULL文字列の取り扱い

テキストボックスに何も入力されなかった場合の処理が必要な場合が多いが、空の文字列の判定でエラーを出すことが意外と多い。メモリに割り当てられたインスタンス(オブジェクト)の文字列の空と、変数宣言における空、または、オブジェクト同士を比較したことによるシンタクスエラーだが(英語の"a"と"the"の違いと同じ)。無いということ自体が抽象的概念であるため、混乱しやすい。以下のように判定を行うと覚えておくことにする。

               EditText inputNum  = (EditText) findViewById(R.id.editTextInputNum);
		String inputText = inputNum.getText().toString();
               // 空文字の判定部分
		if(inputText.equals("")) inputText = "0";

つまり、imputTextオブジェクトの文字を""と比較している。例えば、if(inputText == "")としたのでは、別のオブジェクト(ポインタ)の比較なのでNG。当然、インスタンスを持たないnullとの比較もNGとなる。

VB/C#.NET関係

自作の計測システムを手っ取り早く作成するためのPCのプログラミング方法をまとめておく。市販の計測器を組み合わせてシステム化する場合は、LabView?を使用するのが効率的だが、自作の回路基板をPCと接続するには、シリアル接続 + 自作プログラムのほうが簡便。こうしておけば、ZigBee?やBluetoothによる無線化も容易に実現できる。
VB(Visual Basic)使いの学生はあまり見かけないが、電子情報分野以外のPCユーザにはVBが普及しており、また、市販計測器のマニュアルには、大抵BASICのプログラム例が掲載されていて、慣れている人が多いという事情からVB.NETの例を示す。C#でも殆ど違いはない。

数値の変換

Stringから整数, 実数

   adc16  = Short.Parse(rcvData)
   adc32  = Integer.Parse(rcvData)
   offset = Double.Parse(calData)

整数からString

   '固定小数点3桁
   Label1.Text = offset.ToString("F3")

待ち時間

   System.Threading.Thread.Sleep(ミリ秒)

シリアルポートの利用

フォームにSerialPort?ComboBox?を配置し、ComboBox_Portをいう名前にしたと想定。ComboBox_Portには、現在使えるポート番号一覧を表示する。

   '起動フォームのクラスより前にインポート
   Imports System.IO
   'データの受信用バッファを想定
   Dim rcvDataStr As String 
   '起動処理
   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       'ポート番号用の配列
       Dim PortList As String()
       '利用可能なシリアルポート名の配列を取得
       PortList = IO.Ports.SerialPort.GetPortNames()
        'シリアルポート番号リストの表示をクリア
       ComboBox_Port.Items.Clear()
       Dim PortName As String
       'シリアルポート名をコンボボックスにセット
       For Each PortName In PortList
           ComboBox_Port.Items.Add(PortName)
       Next PortName
        'シリアルポートの初期選択(任意)
       If ComboBox_Port.Items.Count > 0 Then
           ComboBox_Port.SelectedIndex = 0
       End If
   End Sub
   '終了処理(フォームが閉じられたとき)
   Private Sub Form1_Close(sender As System.Object, e As System.EventArgs) Handles MyBase.FormClosing
       'シリアルポートの状態確認
       If SerialPort1.IsOpen = True Then
           '制御対象のデバイスの停止命令送信の例
           SerialPort1.Write("stop" + Chr(13) + Chr(10))
           'シリアルポートのクローズ
           SerialPort1.Close()
       End If
       'フォームの終了
       Me.Close()
   End Sub
   'COMポートのオープン/クローズの実行
   Private Sub Button_Com_Click(sender As System.Object, e As System.EventArgs) Handles Button_Com.Click
       If SerialPort1.IsOpen = False Then
           'ドロップダウンリストによるシリアルポートの設定
           If ComboBox_Port.SelectedItem = "" Then
               MessageBox.Show("デバイスをPCに接続してから本プログラムを再起動してください", "Error", MessageBoxButtons.OK)
           Else
               SerialPort1.PortName = ComboBox_Port.SelectedItem
           End If
           'シリアルポートのオープン
           Try
               SerialPort1.Open()
           Catch ex As Exception
               MessageBox.Show(ex.Message, "シリアルポート開始エラー", _
                   MessageBoxButtons.OK, _
                   MessageBoxIcon.Error, _
                   MessageBoxDefaultButton.Button3)
           End Try
       Else
           SerialPort1.Write("stop" + Chr(13) + Chr(10))   'stopコマンドの送信
           rcvDataStr = SerialPort1.ReadExisting()         '受信バッファのクリア
           rcvDataStr = ""                                 '受信変数のクリア
           'シリアルポートのクローズ
           SerialPort1.Close()
       End If
   End Sub

シリアルポートを使用する前の確認

面倒でも、シリアルポートにコマンドを送る前に実行するとよい。

   'データの受信用バッファを想定
   Dim rcvDataStr As String 
       'シリアルポートの確認
       If SerialPort1.IsOpen = False Then
           MessageBox.Show("シリアルポートが開いていません", "Error", MessageBoxButtons.OK)
       Else
           rcvDataStr = SerialPort1.ReadExisting()         '受信バッファのクリア
           rcvDataStr = ""                                 '受信変数のクリア
           SerialPort1.Write("start" + Chr(13) + Chr(10))  'startコマンドの送信を想定
       End If

多チャンネル化

多チャネル化を行う場所は2カ所考えられる。(1)センサの多チャンネル化(マイコンの入力ポートを増やす)、(2)PCの多チャンネル化(シリアルポートを増やす)。(1)はクロック精度での同時性を保障することができる。(2)は、空間的に分散させることができる。通常、1つのシリアルポートに1つの計測制御ソフトを用意し、さらに複数の計測制御ソフト1つのソフトで制御する構成が便利である。作例をに示す。

#ref(): File not found: "key_ctrl.png" at page "公開作業日誌"

上段左から、計測ソフトの起動、一斉スタート(モード1)、一斉ストップ(モード2)、一斉ストップ、下段左から、状態表示欄、起動しているプロセスIDリストの表示欄。ただし、プロセス間の実行命令時刻は、10ms程度ズレが生じるため、マイコン基板にRTCを搭載(32.768kHzが多い)してもよいが、面倒な割には精度は上がらない。時刻確認のためのタイムスタンプ機能(クリックするとPC側の時刻をデータに追加する)も搭載している。コード例は、他の項目で機能毎に分解して紹介する。

他フォームの表示と終了

フォームの開始

       Dim f As New Form2()
       f.Show(Me)

フォームの終了

       Me.Close()

他のプログラムの起動

フォームにProcessを配置する。

       'TEST.exeプログラムを起動
       'Microsoft.VisualBasic.Interaction.Shell("TEST.exe", AppWinStyle.NormalFocus)
       Process.Start("TEST.exe")
       'プログラムを起動したことをStatusStripのLabelに表示(無くてもよい)
       ToolStripStatusLabel1.Text = "New TEST is invoked"

プロセスIDの取得と表示

フォームにComboBox?とProcessを配置する。現在起動しているTEST.exeのプロセスIDを取得して、ComboBox?のリストに表示する。

   'フォームのClass
   Dim procID(32) As Integer   '動作中のTEST.exeのProcess ID
   Dim Nproc As Integer        '動作中のTEST.exeのプロセス数
   '先に起動していたプロセスIDの取得
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       'FVSプロセスのリスト作成
       getID()
   End Sub
   'プロセスの起動毎に、getID()を実行する
   'プロセスIDの取得とComboBoxへのリスト表示
   Private Sub getID()
       Dim processes() As Process
       'Processの再チェック
       processes = Process.GetProcesses()
       'TESTプロセスのリスト再作成
       ComboBox1.Items.Clear()
       ComboBox1.Text = "TEST Process ID"
       Nproc = 0
       For i As Integer = 0 To processes.Count - 1
           If processes(i).ProcessName = "TEST" Then
               procID(Nproc) = processes(i).Id
               ComboBox1.Items.Add(procID(Nproc).ToString())
               Nproc = Nproc + 1
           End If
       Next
       ToolStripStatusLabel2.Text = Nproc.ToString()
   End Sub

複数のプログラムへのコマンドの通知

       'コマンドを送るプロセスのリスト作成(プロセスIDの取得の項参照)
       getID()
       '例えば、[CTRL] + [s] を子プロセスのあるコマンド1に割り当ててあるとする
       For i = 0 To Nproc - 1
           AppActivate(procID(i))
           SendKeys.Send("^s")
       Next
       ToolStripStatusLabel3.Text = "Running in mode 1"
       '必要ならフォーカスを制御元である自分に戻す
       Me.Activate()

ホットキーの作成

フォーカスの有無にかかわらず、ホットキーのポーリングを行うには、(1) GetAsyncKeyState? API関数, (2) RegisterHotKey? API関数, の方法が一般的だが、実際に実装してみると、かなり処理が重い。計測の開始、停止を制御するだけであれば、フォーカスを持つフォームのキーイベントを受け取れればよいことが多いので、下記のような簡便な方法でも対応可能。

   'キーイベントの取得
   Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
       'コマンドを送るプロセスのリスト作成(プロセスIDの取得の項参照)
       getID()
       'Form1に対してMe.KeyPreview = Trueにしておくこと
       If e.KeyCode = Keys.T Then    '[CTRL] + [t] でコマンド1開始
           If e.Control Then
               For i = 0 To Nproc - 1
                   AppActivate(procID(i))
                   SendKeys.Send("^t")
               Next
               ToolStripStatusLabel3.Text = "Running in mode 1"
           End If
       ElseIf e.KeyCode = Keys.S Then    '[CTRL] + [s] でコマンド2開始
           If e.Control Then
               For i = 0 To Nproc - 1
                   AppActivate(procID(i))
                   SendKeys.Send("^s")
               Next
               ToolStripStatusLabel3.Text = "Running in mode 2"
           End If
       ElseIf e.KeyCode = Keys.X Then    '[CTRL] + [x] でコマンド停止
           If e.Control Then
               For i = 0 To Nproc - 1
                   AppActivate(procID(i))
                   SendKeys.Send("^x")
               Next
               ToolStripStatusLabel3.Text = "Stopped"
           End If
       End If
       '次のキーイベントを受け取るため、フォーカスを自分に戻しておく
       Me.Activate()
   End Sub

データのファイル読み出し

フォームにOpenFileDialog?を配置。

   '起動フォームのクラスより前にインポート
   Imports System.IO
   Private Sub ReadCSV(ByRef DataLine() As String)
       OpenFileDialog1.FileName = "calibration_data.csv"
       OpenFileDialog1.Filter = "CSVファイル|*.csv|全てのファイル|*.*"
       If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
           Using reader As New StreamReader(OpenFileDialog1.FileName)
               For i As Integer = 0 To calEL
                   DataLine(i) = reader.ReadLine
               Next
           End Using
       End If
   End Sub

データのファイル書きだし

フォームにSaveFileDialog?を配置。

   '起動フォームのクラスより前にインポート
   Imports System.IO
   Private Sub WriteCSV(ByRef DataLine As String)
       SaveFileDialog1.FileName = "measurement_data.csv"
       SaveFileDialog1.Filter = "CSVファイル|*.csv|全てのファイル|*.*"
       If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
           Using writer As New StreamWriter(SaveFileDialog1.FileName)
               writer.Write(DataLine)
           End Using
       End If
   End Sub

ファイル名に日付を付けてデータを保存(計測データ保存の基本形)

フォームにSaveFileDialog?を配置。

   '起動フォームのクラスより前にインポート
   Imports System.IO
   'ヘッダー文字列の設定
   header = "Input (V), Output (A)" + Chr(13) + Chr(10)
   'データのファイル書き出しルーチンの呼び出し
   saveData(header)
   Private Sub saveData(ByRef header As String)
       SaveFileDialog1.FileName = DateTime.Now.ToString("\d\a\t\ayyyyMMdd-HHmmss") + ".csv"
       SaveFileDialog1.Filter = "CSVファイル|*.csv|全てのファイル|*.*"
       If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
           If File.Exists(SaveFileDialog1.FileName) Then
               Dim result As DialogResult
               result = MessageBox.Show("同じ名前のファイルがあります。上書きしますか?", "ファイルの新規作成", MessageBoxButtons.YesNo)
               If result <> Windows.Forms.DialogResult.Yes Then Return
           End If
           '日本語文字コード指定書き込み(Shift-JIS)
           Using writer As New StreamWriter(SaveFileDialog1.FileName, False, System.Text.Encoding.GetEncoding("shift_jis"))
               'ヘッダーの書き込み
               writer.Write(header)            
               'データの書き出し
               For i As Integer = 0 To Nd - 1
                   writer.WriteLine(input(i).ToString() + "," + output(i).ToString())
               Next
           End Using
       End If
   End Sub

ヘルプの作成

ヘルプは、HTMLで提供する。インストールしておいたHELPファイルを参照させるか、インターネットを通じてHELPファイルを提供しているURLを参照させる。ヘルプは、頻繁に改訂が必要なため、URLを参照させたほうが便利。

       'HELPファイルのパス指定
       'Dim helpFileName As String = ".\help_files\help.html"
       Dim helpFileName As String = "http://jaco.ec.t.kanazawa-u.ac.jp/j/"
       'HELPファイルのオープン
       Try
           Help.ShowHelp(Me, helpFileName)
       Catch ex As Exception
           MessageBox.Show("ヘルプファイルが見つかりません")
       End Try

コマンドラインをEnterキーでシリアルポートに送信

   'シリアルポート送信処理
   Private Sub TexBox_Cmd_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox_Cmd.KeyPress
       If e.KeyChar = Chr(13) Then     'Enterキーの判定
           If SerialPort1.IsOpen Then
               If String.IsNullOrEmpty(TextBox_Cmd.Text) = False Then  'TextboxがNullの場合は送信無し
                   Try
                       'シリアルポートからコマンドを送信する.
                       SerialPort1.Write(TextBox_Cmd.Text + Chr(13) + Chr(10))
                       'コマンドボックスをクリアする
                       TextBox_Cmd.Clear()
                   Catch ex As Exception
                       MsgBox(ex.Message)
                   End Try
                   'e.KeyChar = ""          'Enterキーのクリア
               End If
           Else
               MessageBox.Show("シリアルポートが開いていません", "Error", MessageBoxButtons.OK)
           End If
       End If
   End Sub

シリアルポート受信内容のテキストボックス表示

   'デリゲートの宣言
   Private Delegate Sub Delegate_RcvDataToTextBox()
   Private Delegate Sub Delegate_logData()
   'シリアルポート受信イベント処理
   Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
       'シリアルポートをオープンしていない場合、処理を行わない.
       If SerialPort1.IsOpen Then
           Try
               '受信バッファの行データ読み出し(ASCII)
               'rcvDataStr = SerialPort1.ReadLine()
               '受信バッファの行データ読み出し(Binary)
               '(配列変数, 配列変数のオフセット(Byte), 読み出しByte数)
               'SerialPort1.Read(rcvDataBin, 0, 16)
               '受信バッファの全データ読み出し
               rcvDataStr = SerialPort1.ReadExisting()
               '
               '受信データの変数処理ルーチンに転送(ASCIIモード受信処理)
               Invoke(New Delegate_logData(AddressOf Me.logData))
               '
               '受信したデータをテキストボックス処理ルーチンに転送
               Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox))
           Catch ex As Exception
               MsgBox(ex.Message)
           End Try
       Else
           MessageBox.Show("シリアルポートが開いていません", "Error", MessageBoxButtons.OK)
       End If
   End Sub
   '受信データをテキストボックスの最後に追記する
   Private Sub RcvDataToTextBox()
       If IsNothing(rcvDataStr) = False Then
           TextBox1.AppendText(rcvDataStr)
       End If
   End Sub
   '受信データを処理する
   Private Sub logData()
       '受信データの処理内容
   End Sub

ベクトルの描画

   '起動フォームのクラスより前にインポート
   Imports System.Drawing
   'データ
   Dim X(8), Y(8) As Double
   Private Sub vactorDraw()
       Dim ix(8), iy(8), im(8), norm As Integer
       Dim prsclr(8) As Color      '色分け用変数
       norm = 20                   '表示倍率調整
       '座標の計算
       For i As Integer = 0 To 7
           ix(i) = (X(i) + 125) * norm
           iy(i) = (Y(i) + 125) * norm
           im(i) = Math.Sqrt((X(i) * X(i)) + (Y(i) * Y(i)))
       Next
       '軸の描画
       Dim gport As New Bitmap(PictureBox1.Width, PictureBox1.Height)
       Dim g As Graphics = Graphics.FromImage(gport)
       g.DrawLine(Pens.LightGray, 125, 0, 125, 250)
       g.DrawLine(Pens.LightGray, 0, 125, 250, 125)
       g.DrawEllipse(Pens.LightGray, 94, 94, 62, 62)
       g.DrawEllipse(Pens.LightGray, 62, 62, 125, 125)
       g.DrawEllipse(Pens.LightGray, 31, 31, 187, 187)
       g.DrawEllipse(Pens.LightGray, 0, 0, 250, 250)
       '時間に対するペン色の割り当て
       Dim BPen0 As New Pen(Color.Black, 2)
       Dim BPen1 As New Pen(Color.DimGray, 2)
       Dim BPen2 As New Pen(Color.Gray, 2)
       Dim BPen3 As New Pen(Color.DarkGray, 2)
       Dim BPen4 As New Pen(Color.Silver, 2)
       Dim BPen5 As New Pen(Color.LightGray, 2)
       Dim BPen6 As New Pen(Color.Gainsboro, 2)
       Dim BPen7 As New Pen(Color.WhiteSmoke, 2)
       'ベクトルの→描画
       g.DrawEllipse(BPen7, ix(7) - 2, iy(7) - 2, 4, 4)
       g.DrawLine(BPen7, ix(7), iy(7), 125, 125)
       g.DrawEllipse(BPen6, ix(6) - 2, iy(6) - 2, 4, 4)
       g.DrawLine(BPen6, ix(6), iy(6), 125, 125)
       g.DrawEllipse(BPen5, ix(5) - 2, iy(5) - 2, 4, 4)
       g.DrawLine(BPen5, ix(5), iy(5), 125, 125)
       g.DrawEllipse(BPen4, ix(4) - 2, iy(4) - 2, 4, 4)
       g.DrawLine(BPen4, ix(4), iy(4), 125, 125)
       g.DrawEllipse(BPen3, ix(3) - 2, iy(3) - 2, 4, 4)
       g.DrawLine(BPen3, ix(3), iy(3), 125, 125)
       g.DrawEllipse(BPen2, ix(2) - 2, iy(2) - 2, 4, 4)
       g.DrawLine(BPen2, ix(2), iy(2), 125, 125)
       g.DrawEllipse(BPen1, ix(1) - 2, iy(1) - 2, 4, 4)
       g.DrawLine(BPen1, ix(1), iy(1), 125, 125)
       g.DrawEllipse(BPen0, ix(0) - 2, iy(0) - 2, 4, 4)
       g.DrawLine(BPen1, ix(0), iy(0), 125, 125)
       'オブジェクトの開放
       BPen0.Dispose()
       BPen1.Dispose()
       BPen2.Dispose()
       BPen3.Dispose()
       BPen4.Dispose()
       BPen5.Dispose()
       BPen6.Dispose()
       BPen7.Dispose()
       g.Dispose()
       PictureBox1.Image = gport
   End Sub

チャートコントロールによるグラフの表示

   '起動フォームのクラスより前にインポート
   Imports System.Windows.Forms.DataVisualization.Charting
   '過去8点のベクトル描画の例
   Private Sub vectorChart()
       Dim series1 As New Series()
       'チャート表示用変数
       Dim chartMag As Double
       Dim chartDir As Double
       'グラフのタイプを設定
       series1.ChartType = SeriesChartType.Polar
       'データ系列の初期化
       Chart1.Series.Clear()
       'マーカの設定
       series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Star4
       Chart1.Palette = ChartColorPalette.SemiTransparent
       series1.MarkerSize = 20
       'データポイントの設定
       For i As Integer = 0 To 7
           'データ数(pid)がプロット数に足りない場合(0, 0)をデータポイントに設定
           If i > pid Then
               chartMag = 0
               chartDir = 0
           Else
               chartMag = Double.Parse(mag(pid - i)) 
               chartDir = Double.Parse(dir(pid - i))
           End If
           'X-Yデータポイントの追加
           series1.Points.AddXY(chartDir, chartMag)
       Next
       'グラフ出力
       Chart1.Series.Add(series1)
   End Sub

Visual Studio Express 2012 のOS互換性エラー

Windows 7 (64bit)に Visual Studio Express 2012 for Desktop をインストールして起動すると、OSの互換性に問題があるというメッセージが出る場合がある(出ない場合もある)。patch_KB2781514を適用(エラーメッセージから検索できる)しても、問題が解決しない場合は、Visual Studio 2012 Update 3 により解決する。 http://www.microsoft.com/visualstudio/jpn/visual-studio-update#story-update

その他

WinSCPでディレクトリツリーが取得できない

とりあえず、下記で接続してみる。

  • プロトコル = FTP
  • セッションの設定
    • 設定 - FTP - ディレクトリ一覧にMLSDコマンドを使用 = OFF
    • 設定 - 接続 - パッシブモード = ON
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS