最新 追記

一往確認日記


2016年12月01日 [長年日記]

_ MacのMail.appでGmailアカウントを使用すると、Gmailサイトで見ると下書きがたくさんできてしまっていることの対応

Gmailにアカウントをインポートした事を先日書きましたが、GmailサイトやGmailアプリ(スマホ用)で見ると下書きがたくさんできてしまっていました。

これはMacのMail.appから送信した際にできる様です。 Mail.appは(多分)自動で保存する機能があり、下書きメールボックスには見えない状態で下書きを作っているのではないかという気がします。 *1

検索キーワードがなかなかな見つかりませんでしたが、すでに解決している方がいました。

MacのMailでGmailを使う時のおすすめの設定 - auientが調べたこと

Gmail公式の設定ガイドにあるということです。

auientさんの内容を見てこの様に設定しました。

https://gyazo.com/397b256d4ecdda7db190fc602f4d84d9

多分大丈夫と思いますが、これで様子を見たいと思います。

*1 自分で下書きに入れたつもりがないのにゴミの様に残っていることがありますよね。


2016年12月02日 [長年日記]

_ Escalatorのラダー表記

今の所Escalatorはニーモニックで記述するので、自己保持回路はこの様に書きます。

LD   X0
OR   Y0
ANI  X1
ANI  Y1
OUT  Y0

表現方法ということで、下の様なことも考えられます。

記号的な表記

視覚的に分かりやすい様に接点やコイルを記号的に記述します。 接続が+がいいのか*が良いのかなど検討の余地はあります。

|X0|-+-|/X1|-|/Y1|---(Y0)
|Y0|-+

論理式表記

更に論理式で書くこともできます。 反転が/がいいのか~が良いのかというのもあります。 SET RSTなどをどう表現するかもあります。

(X0+Y0)*/X1*/Y1=Y0

---

分かりやすいのと自由度があるという面で記号的な表記が良いと思っていますがおいおいどうするか考えたいと思います。


2016年12月05日 [長年日記]

_ Web端末型IoTプラットフォーム IAクラウドデモ・セミナ-にてデモ展示しました。

事後報告になってしまいますが、ちょうど一週間前の11月28日に機械振興会館にてIAF(Industorial Automation Forum)主催のWeb端末型IoTプラットフォーム IAクラウドデモ・セミナ-が開催されました。

IAクラウドというのはHTTP(S)プロトコルでクラウド上のデータサーバー(CCS)に、製造機器(FDS)のデータを集約するための通信データについての取り決めを規格化*1したものです。 HTTP(S)プロトコルを利用することでWebブラウザーでホームページが見れる環境であればファィヤーウォールに特別な変更することなく、お使いのLANにIAクラウド対応の機器を接続するだけで、点在している工場や会社の生産状況などのデータをクラウド上に集約できるようになります。

今後IAクラウドでは双方向通信もサポートされる予定ですので、工場からのデータ吸い上げのみならず、生産指示をクラウド上から生産装置に与えることができるようになります。

縁があって、iOSデバイスでの実装ということでirBoardにIAクラウドを実装するということで関わらせていただいてます。

セミナーではデジタルの川田様からは他社の製品であるにもかかわらず紹介していただきありがとうございました。

デモ展示ではirBoardにIAクラウドを実装したものを展示していただいてました。 生産システム見える化展で展示していたものです。 デモ展示では数社さんから興味を持っていただけて良かったと思います。

今後また展示できる機会があるようですので、次回は告知してからにしたいと思います。

*1 まだβ版です


2016年12月06日 [長年日記]

_ Escalatorデバイスの実装

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。 ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。


今まではEscalatorの概念的なことやパソコン側の事が多かったのですが、PLC側でどう実装していくかについても書いていきたいと思います。

Escalatorでは

  • I/OとしてX、Yデバイス
  • 補助コイルとしてM
  • 保持リレーとしてL
  • カウンター、タイマーとしてT、C
  • 数値レジスターとしてD
  • 揮発性の数値レジスターとしてH
  • システム用としてコイルがSC、数値がSD

のデバイスを扱うことにしました。 これらは仮想的なデバイスです。

まずは三菱電機のiQ-RシリーズのR08に実装しています。

仮想的なデバイスを実際のデバイスに割り当てる必要があり、適当に下の様に割り当てました。 できるだけ実デバイスと乖離がない様にしたほうが分かりやすいので、デバイスの先頭の方をEscalatorに割り当てています。

この定義は実際にはグローバルラベルの方で定義しています。

https://gyazo.com/7516420089d08cd5b5a179ae229fa4d1

このラベルを利用してPLC側で処理していきます。 グローバルラベルと、Escalatorのconfigファイルを変更することでデバイス数を変更したりできる様になる予定です。


2016年12月07日 [長年日記]

_ Cyber Monday WeekとしてAmazonでセールが開催されています。

昨日から来週の月曜(12/12 23:59)までの1週間Cyber Monday WeekとしてAmazonでセールが開催されています。

Amazon Prime Dayでもそうでしたが、車もAmazonで買えてしまうんですよね。(頭金だけですが) Amazon Prime Dayの時はNISSAN GTRでとても手が出る金額ではありませんでしたが、今回は大衆車が数種類ラインナップされていて、そろそろ買い換えようと思っている方にはリーズナブルではないでしょうか。

NISSANは残金の支払い方法をディーラーと相談できる様です。 というかもう売り切れてますね。 B01N6BH5PN

TOYOTA、SUZUKIの場合はリース契約の様です。

車以外にも様々な商品がセール対象になっています。 中にはAmazonプライ会員のみが対象となっている物もあります。 この機会にAmazonプライムに入ってみてはどうでしょうか?

ここでは、過去に"Amazonプライムは田舎の人にもお得です"とお伝えしています。 併せてみていただけると幸いです。


2016年12月08日 [長年日記]

_ う電卓 1.4.2でVoiceOver機能を強化しました。

う電卓はApple Watchのための電卓でしたが、今ではiPhoneでも電卓として使用できます。

う電卓を利用されている方から時間制限を解除するアイテムを購入したのがApple Watch側に反映されないというフィードバックがありました。 これが元でVoiceOverを使った場合に電卓のキーを読み上げないという事も教えていただきました。

iOSの場合は特に気にしなくてもVoiceOverはそれなりに対応出来る様なのですが、今回ボタンの配置に使用しているのがUICollectionControllerというクラスで、この場合にコードで対応しないとうまくいかない場合があり、そのため読み上げていませんでした。

以前「きくまなぶ」で配色についての問い合わせがあり、対応した事がありましたが、VoiceOverについては全く気にした事がありませんでした。

VoiceOverを頼りに操作されている方にとっては、全く使いにくく反省してます。

これをきっかけに全面的にVoiceOver対応をいたしましたのでご利用ください。

時間制限を解除するアイテムを購入したのがApple Watchに反映されないのや、細かい不具合も修正しています。

今後予定しているバージョンアップではApple Watch側での操作がより良くなる予定です。 Apple Watchのための電卓ということで作り始めましたが、Watch OSでの制限があり満足がいく様な形になっていませんでしたがWatch OS 3でできる事が増えたので、当初考えていたものに近い形に出来上がりそうです。

どうぞご期待下さい。


2016年12月09日 [長年日記]

_ Escalatorプログラム領域

前回のEscalatorデバイスの実装でプログラム領域の説明が抜けていました。

D3072から1KWord分をEscalatorのプログラムを格納する領域として定義しています。 プログラムは電源が落ちても保持する必要があるのでLatch領域として設定しています。 Hデバイスも保持するのでプログラム領域と連続したところに配置する様にしました。

Escalator用に使用するデバイスは以上です。

あと一時間半ほどしかありませんが、AmazonのCyber Mondayの本日の特選セールにHanes 5枚組 丸首Tシャツがありました。(プライム会員限定です) この間同じものを買ったばかりでタイミングが悪いですね。Mだと36%オフになってます。

B01IAS6NZO


2016年12月12日 [長年日記]

_ Cyber Monday セールは今日までですよ

Cyber Monday セールは今日までです。

Dellの2in1タイプの15.6インチPCが プライム会員価格で 84,980円になっています。 普段は114,980円ということなので3万円安くなっています。

B01LYTK6WV

この前Dellの13インチを購入したときは1.5万円引きという事が決め手になりましたが、3万円引いてくれるのであればこちらを選んだかもしれません。 結局後からSSDに換装したりしてるので、トータルでこのくらいの価格になっているのではないかと思います。

このあいだのシャツといいタイミングが悪いですね。


2016年12月14日 [長年日記]

_ 小さなチーム、大きな仕事

言わずと知れた名著です。

電子版をさらっと読んだことがありますが、書店に行ったら目に飛び込んできて、なんでこのコーナーに置いているんだという意外性も相まって、思わず手にしていました。

4150504814

ここで続けて書いているのも*1少なからずこの本の影響はあると思います。 ここで書いていることは中身があまりなくて申し訳ありませんが…

Amazonでは新着となっているので文庫本で新たに出たということでしょうか? (巻末にそう書いてました)

*1 昨日はお休みしましたけれど


2016年12月19日 [長年日記]

_ Escalator初期化

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。

ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。

PLCの実装という事で書き始めましたが、データ領域の定義のところまでで中断していました。 今回は初期化のところです。

実装に際して自分にとって分かりやすいST言語で実装する事にしました。 ラダーの方がブログラムサイズの削減や高速化が可能と思いますが、メンテナンスのしやすさ重視とします。

プログラムデータを順番に読んでいく事になるので、どこを読み込むか管理するカウンター(ポインター)が必要になります。 ローカルラベルでprogram_counterとして定義していて、PLC起動1サイクルのタイミングで0にしています。 SD_DEVICE[ESC_SD_TO_PLC_STATUS]、SD_DEVICE[ESC_SD_FROM_PLC_STATUS]はパソコン側との通信で用いるフラグになっています。 この値で同期をとって通信していきます。 初期値として0を入れています。

https://gyazo.com/0f4d104b171ea1a68d1fe5bed69b182b

memory_countとerrorがありますが今は使っていないと思うので削除しても良いかもしれません。

PS. 更新を怠ってしまいましたが、Macが起動しなくなってしまい復旧作業に追いやられてしまったりしてました。


2016年12月20日 [長年日記]

_ Escalator - bit stack 初期化

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。

ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。

今回はbit stackの初期化です。

パソコンとのやり取りの部分もありますが、省略します。

bit stackはLDから始まるブロックの状態やMPSなどで分岐する時に記憶するための領域です。

SD_DEVICE[ESC_SD_I_BSTACK]から4 word取っています。 ANBなどで最終的にすべてのANDを取ってtrue/falseを判定するので初期値としてオール1のFFFFを設定しています。 wordで処理しているのでブロックの最大レベルが16までとなります。

LDがあると今までの状態をbit0に入れて左にシフトします。

4word取っているのはMPSに出会うとword単位でshiftします。 MPSによる分岐が4レベルまで扱えることになります。

current_bit_valueが状態の初期値でtrueになります。

https://gyazo.com/f0258627c7be5b3843e39fbe882580cb

cycle_runningはラダー処理中であることを示しtrueになっています。

暫く触っていなかったのでbit stackが何をやっているのかすっかり忘れていました。 今後のためにもここに書き留めおいた方がいいですね。


2016年12月21日 [長年日記]

_ 消費税、チップ計算に対応したう電卓1.4.5がリリースになりました。

昨日「う電卓」1.4.5がリリースになっています。 う電卓はApple Watchのための電卓でしたがiPhone/iPadでも電卓として遜色ないiOSアプリです。

消費税、チップ計算は今までもできていたのですが、別画面での計算でした。 今回のアップデートで計算中に含むことができました。 (ただし、アイテムを購入するまで時間制限がありますので、常時利用したい場合はアイテムを購入してください。)

クリハラコンサルティングオフィスさんで、

iPhone向け電卓アプリを税理士が厳選!本当に使えるのはこれだ 無料で高機能なものを使いたいならば、広告表示がなく不満の少ない「う電卓」がおすすめです。

と評価いただいてました。 ありがとうございます。

ここではいくつか選定基準となる条件が載っていて、う電卓は税抜き計算と定数計算が該当していないということでした。 定数計算2 x 1 = = = = = = と入れるとその後どんどん2倍されていく計算です。 キャノンを参考に実装しているので掛け算だけ最初の2が繰り返し乗算されます。 他の計算は後の数値が繰り返されます。 1 + 2 = = = = = だと2が加算されていきます。

この定数計算は入れていたのですが、不具合で機能してませんでした。

税抜きもできているつもりでしたが、操作がわかりにくかったのだと思います。

今回のアップデートでどちらもわかりやすい形で入っていると思いますのでお試しください。 用途で加算器方式も選択できます。*1

これ以上に、Apple Watchでの操作性が格段にアップしています。 Apple Watchでの操作性は一番ではないかと手前味噌に思っていますので、Apple Watchを持っている方は是非お試しください。

*1 これも前から入ってます


2016年12月22日 [長年日記]

_ Escalator - 命令のデコード(1)

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。

ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。

では実際にEscalatorのプログラムを読み込んでいくところを説明します。

P10のfetch 1 byteはプログラムデータを1byte読み込むサブルーチンになっています。 (これはまた後で説明します)

読み込むとsub_argsからの配列に入ります。 1byteなので先頭のsub_args[0]にコードがはいっています。 これをoperandに一旦移してoperand_bitsから始まるbitデバイスに展開しています。

https://gyazo.com/4811abf0f6e093682284a872d5c5b1a1

命名をデコードする際、多量の条件分岐が発生しますが、bit展開しておくとラダーのORとANDで表現できる様になり見通しが良くなるかなということで、使用しています。

その分、無駄に256bitも使用してしまっています。


2016年12月26日 [長年日記]

_ Escalator - 命令のデコード(2)

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。

ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。

プログラムデータから1byte読み込む部分です。 ここはサブルーチンとして実装しています。

program_counterが現在読み込もうとしている位置になります。 PLCはワード単位で格納しているので、バイト位置を出すために2で割ってprog_index[0]に入れています。 prog_index[1]には偶数か奇数かを入れていて、偶数なら上位バイトを取り、奇数なら下位バイトを取りFD0に入れています。

program_counterを1進めます。

https://gyazo.com/622550d64e194dc73878ee9c3295a96b


2016年12月27日 [長年日記]

_ Escalator - 命令のデコード(3)

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。

ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。

昨日の1バイトに続いて2バイト読み込む部分です。

https://gyazo.com/0bc402c9ca11fd8f20fd5b3a7fc138a1

program_counterが現在読み込もうとしている位置になります。 PLCはワード単位で格納しているので、バイト位置を出すために2で割ってprog_index[0]に入れています。 prog_index[1]には偶数か奇数かを入れていています。

ここまでは1バイトの時と同じです。

偶数の場合はそのままwordで読み込んだ値をFD0に入れて返しますが、奇数の場合は(IF分の中)prog_index[0]の位置にあるデータの下位8bitとprog_index[0]+1の位置にあるデータの上位8bitをくっつけてFD0に入れて返します。

https://gyazo.com/87b06c7c0e8093fd995861cdb3be271c


2016年12月28日 [長年日記]

_ Escalator - 命令のデコード(4)

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。

ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。

サブルーチンの説明が続いているので、このままサブルーチンの説明を進めます。

デバイスの状態を読み込んだり直値を得る部分です。

デバイスを表すデータ形式はこの様になっています。

https://gyazo.com/23edfaac11bff449d1008571101290bb

最上位ビットが0の場合は、そのあとのビットで数値を表し直値として0-127の値として返します。 1の場合はデバイスから取得するですが、ここで7bit以上の直値を得る方法がない事に気づいてしまいました。 必要な段階になったら再検討します。

具体例としてはこの様な変換になります。

https://gyazo.com/7358e5cebfa63b7dfbc6f03c4da8ed5b

この処理をする部分ですが、まずは1バイト読み込みopcode1に代入します。 bit7をnon_immedeateに取り出します。 0なら読み込んだ値opcode1を直値としてFD1に入れて戻ります。 bit7が1の場合はbit4をlen_16に取り出します。

https://gyazo.com/f3ee5d6df31453d86bdcce05ef048c93

len_16が1の場合は2バイト読み込み、0なら1バイト読み込みopcode2に入れています。 これがデバイスの何番目かを示すポインターになります。

https://gyazo.com/99b3be7fb0f93a3544c1f596459eddc5

opcode1の下位4bitをdevice_typeに取り出し、該当するデバイス配列から値をよみ出し、デバイスタイプによってFY0かFD1に入れて返しています。

ELSEのFX0、FX1への代入が何をしようとしてたのか思い出せない… FY0、FD1の間違いの様な気がしますが不都合がでたら考えます。

https://gyazo.com/82620c2076e19f90a32889ae5cceb326

https://gyazo.com/804288ffc437b548598fe4ef481f615b

今はwordデバイスを扱いう命令がないので、Value Typeは判断していません。 命名を追加*1した段階で入れる事にします。

*1 するところまでいけるかどうかという事もありますが…


2016年12月29日 [長年日記]

_ Escalator の KV-5000対応

Escalatorというのは、各種PLCがメーカーや機種毎にプロジェクトデータが異なるため互換性がなく、移植するのが大変なのを解決しようとするものです。

ここのescalatorのカテゴリーを見てもらえると今までの経緯を見てもらうことができます。

PLCの実装についての説明を続けてきましたが、KV-5000用のPLCプログラムが公開できるレベルになったので、中断してこの事について書きます。 (予想では年明けになってしまいそうでしたが、何とか年内に滑り込む事ができました。)

Gemを更新していますのでgem installでインストールまたは更新できます。 Rubyが実行できる環境を準備してからコマンドプロンブトで以下の様にコマンドを実行します。

$ gem install escalator

適当なフォルダーでescalatorコマンドを打ち込むとescalatorプロジェクトが作られます。

$ escalator create my_project

ファイルは次の様に作られます。

.
├── Rakefile
├── asm
│   └── main.esc
├── config
│   └── plc.yml
└── plc
    ├── keyence
    │   └── kv-5000
    │       └── kv-5000
    │           ├── DocumentWindowInfo.xml
    │           ├── Escalator.mod
 
             .
             .

    │           ├── kv-5000.kpr
    │           ├── kv-5000.lbl
    │           ├── kv-5000.mil
    │           ├── kv-5000.spl
    │           ├── operand-history.txt
    │           └── sample.al2
    └── mitsubishi
        └── iq-r
            └── r08
                ├── LICENSE
                └── r08.gx3

keyence以下が今回追加されたファイルになります。 KV STUDIOで開いて適切なIPアドレスに変更します。

plc.ymlにkv-5000用の設定が追加になっていますので、ここでもhostの行にPLCに設定したIPアドレスに書き換えます。 (下はkv-5000に関係する部分の抜粋です)

  kv5000:
    cpu: kv-5000
    protocol: kv_protocol
    host: 192.168.0.11

main.asmがラダープログラムになります。 必要に応じて変更します。

Rakeコマンドでescalatorプログラムを転送します。 kv-5000の場合はtarget=kv5000と指定します。

$ rake target=kv5000
hex asm/main.esc
uploading build/main.hex ...
done uploading

  Escalator is an abstract PLC.
  This is a console to communicate with PLC.

> 

KV-5000を実装してみて

I/Oの扱いについて

三菱電機ではX、Yですが、KVの場合はRで入出力どちらにも割り当てができる様になっています。 そして普通にR30000など上位に割り当てられたりするので、どう扱うか悩んでいます。 補助コイルを仮想的な入出力として、別の方法で実際にI/Oにマッピングすることになるかもしれません。

タイマー、コイルの扱い

タイマー、コイルについては三菱でも実装されてないのですが、KVの場合はタイマーを配列としてラベル登録する事ができませんでした。 ラベルでアドレスを変える事で自由にエリアを変更できる様にしていますが、どこかに固定するしかないかなという感じです。

今後について

まずはKVでも同じコードで動作できる事を証明できましたので、実用的に使用出来るレベルに上げていきたいと思っています。

今はPLCですが、マイコンボードでもescalatorを実行できるプログラムを作れば、簡単なものであればPLCで動作確認し、マイコンボードで量産品を作るなども可能になります。

と、まあ構想だけは大きいのですが、なにぶん一人で進めているので、なかなか進みは遅いです。 せっかくオープンソースで進めているので、興味がある方は参加してもらえるとはかどります。

今年はこれで最後になります、また来年もよろしくお願いします。