Developer Camp

Similar documents
プログラミング基礎I(再)

Microsoft PowerPoint - visualprogram.ppt

CodeGear Developer Camp

Microsoft PowerPoint - OSS運用管理勉強会資料_ a.pptx

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

Delphi/400 テクニック公開 Delphi/400開発 ~ パフォーマンス向上テクニック ~

JavaプログラミングⅠ

ファイナライザを理解する ~ ファイナライザに起因するトラブルを避けるために ~ 2013 年 11 月 25 日 橋口雅史 Java アプリケーションでファイナライザ (finalize() メソッド ) を使用したことがあるプログラマーは多いと思います しかし ファイナライザの仕組みや注意点につ

Microsoft Word - VBA基礎(6).docx

Microsoft PowerPoint - FormsUpgrade_Tune.ppt

XNA Framework

Delphi/400でFlash動画の実装

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

HashMapからConcurrentHashMapへの移行

V8.1新規機能紹介記事

管理者から携帯電話に向けて命令や位置確認を行います 携帯電話からリアルタイムに情報をアップロードするとともに サーバ側のデータと同期をします GPS 測位を用いて 現在位置や軌跡を管理します 携帯電話からシステム契機でメールを送付します 基幹サーバと連携するためのデータファイルの出力や プリンタ連携

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

05-scheduling.ppt

TopSE並行システム はじめに

製品を使う前に基本操作インターネットアプリケーション Q&A 付録 Web Internet Explorer の使い方 1 Web Web Windows Internet Explorer Web Internet Explorer Internet Explorer を ❶ 起動する Inte

Indyを利用したメール送信機能開発

/ COMBINATION 入出力の状態 バッテリ状態などをリアルタイムで確認できます 停電などのイベント発生時および一定時間ごとの の状態を履歴として記録し表示できます Webブラウザ またはTelnet 端末を使用して, 遠隔からの状態確認や設定変更ができます Java Web Start また

Microsoft PowerPoint - はじめてのDataSnapアプリケーション_

intra-mart Accel Platform

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

Microsoft PowerPoint - chap10_OOP.ppt

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

Microsoft Word - XPC4ソフトマニュアル.doc

04-process_thread_2.ppt

Java知識テスト問題

POSIXスレッド

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

もくじ

コンテンツセントリックネットワーク技術を用いた ストリームデータ配信システムの設計と実装

PowerPoint プレゼンテーション

iExpressソフトフォン TE20-ST-EX

CS-3000/5000 用 LabView ドライバ 取扱説明書 第 1 版 2014/7/28 岩通計測株式会社 1. 使用条件 a. 装置 : 岩通計測製 CS-3000/CS-5000 シリーズ b. 動作確認 PC/OS:IBM PC/AT 互換機 マイクロソフト Windows7 c.p

Delphi/400バージョンアップに伴う文字コードの違いと制御

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

Microsoft PowerPoint - OS04.pptx

PowerPoint プレゼンテーション

サインイン 最初にサインインを行います サインインしたときとそうでないときでは 表示やメニューなどが少し違います アカウントがない場合 最初にアカウントを作りましょう サインインしていないとき サインインしたとき メッセージ 更新情報とお知らせがとどきます

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

もくじ

開発者が知りたい実践プログラミングテクニック! ~明日から使えるテクニック集~

Microsoft PowerPoint - prog04.ppt

目次 1. はじめに... 1 動作環境... 1 その他 他の人が利用する ID を発行したい... 2 ユーザー ID 作成を作成しましょう パソコンのデータを自動でアップロードしたい... 4 PC 自動保管機能を使用してみましょう 不特定多数の

TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : 活用アイデア部門アプリケーション開発部門 作品のタイトル : Toppers_JSP と Scicos_lab / (Scilab でも可 ) による 組込みメカトロニクス制御シミュレーション 作成者 : 塩出武 ( シオデタ

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Outlook2010 の メール 連絡先 に関連する内容を解説します 注意 :Outlook2007 と Outlook2010 では 基本操作 基本画面が違うため この資料では Outlook2010 のみで参考にしてください Outlook2010 の画面構成について... 2 メールについて

今月の呼びかけ 添付資料 ファイル名に細工を施されたウイルスに注意! ~ 見た目でパソコン利用者をだます手口 ~ 2011 年 9 月 IPA に RLTrap というウイルスの大量の検出報告 ( 約 5 万件 ) が寄せられました このウイルスには パソコン利用者がファイルの見た目 ( 主に拡張子

クラス図とシーケンス図の整合性確保 マニュアル

Program Design (プログラム設計)

1 POP 系の設定 重要事項 Windows10 のメールアプリで CCNet のメールを利用する場合 以下の点にご注意ください Windows 10 に標準でインストールされている メール アプリは 弊社のメール方式 (POP) に対応はしておりますが 本マニュアル制作時点 ( バージョン 17

E-Post BossCheck Server 運用マニュアル&事例集

TFTP serverの実装

10th Developer Camp - B5

PowerPoint プレゼンテーション

Microsoft Word Proself-guide4STD+Prof.docx

智美塾 ゆもつよメソッドのアーキテクチャ

S-maqs利用の手引きver1.0

プロセス間通信

漏電監視端末 SW150LF/LF8 漏電監視 漏電監視 ZCT 最大 4 個まで取り付けられます ZCT 最大 8 個まで取り付けられます SW150LF 端子台 温度監視 SW150LF8 端子台 温度センサー最大 4 個まで取り付けられます 接点入力合計 4 点 ( 最大 ) 2

機能追加 2.1. ロール設定項目の追加 2.2. アカウント発行機能の追加 2.3. 修了証テンプレート管理機能を追加 2.4. バナー設定機能を追加 2.5. 修了証の置換文字列に修了証番号を追加 2.6. レスポンシブデザイン受講機能で修了証が出力できる機能を追加 2.7. レスポンシブデザイ

LINE

Microsoft PowerPoint ppt

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

MultiLABELISTOCX と MultiLABELISTV4 MLOCX は MLV4 のレイアウト発行機能を継承しています したがって MLV4 の振分発行やプ リセット発行を使用するための登録情報は使用できません MLV4 のレイアウト管理でレイアウトを作成すると 拡張子が m lay

の ご紹介

EBooklet2 / EBooklet2Pro 概要 EBooklet2 は店頭で対面での商品説明 小規模な会議など対面でのプレゼンテーションをサポートするツールです EBooklet2, EBooklet2Pro EBooklet2Pro iphone ipod touch ipad 通常のプレ

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

User Support Tool 操作ガイド

Microsoft PowerPoint - G-1_Flexでつくる初めてのRIA.ppt

■ ジャストスマイルワープロ講座 ■ 新聞を作ってみよう

PowerPoint プレゼンテーション

21st Embarcadero Developer Camp T8

Gmail を利用する場合 ComLink のメールアドレスを Gmail アカウントに追加する方法 ご注意 Gmail に追加後は ComLink のサーバにメールを残しておくことができないため 他のメールソフトで受信できなくなります ComLink のメールアドレスで送信はできません 送信時は

スライド 1

ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014

ヘルスアップWeb 簡単操作ガイド

Fusion360でCAD設計を覚えよう。

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

9.3 同期 共有データへの読み書きの同期 複数のスレッドから共有データを読み書きするときに発生する問題について 一つのフィールドに対して複数のスレッドが同時にアクセスする可能性がある場合 その順番によっては整合性が保てなくなる可能性があるので スレッドの制御フローが独立していては困ることがある 次

PowerPoint プレゼンテーション

生存確認調査ツール

REX-USB56 「FAX送信」編 第6.0版

Microsoft PowerPoint - Outlook2016(新)

3. 回路図面の作図 回路図の作成では 部品など回路要素の図記号を配置し 要素どうしを配線するが それぞれの配線には 線番 などの電気的な情報が存在する 配線も単なる線ではなく 信号の入力や出力など部品どうしを結び付ける接続情報をもたせることで回路としての意味をもつ このように回路図を構成する図面は

レコードとオブジェクト

国土技術政策総合研究所 研究資料

プレポスト【問題】

Javaの作成の前に

21 章のお話

JavaプログラミングⅠ

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Windows 10の注意点

Prog1_10th

KDDI ペーパーレスFAXサービス

論文番号 分 2-2 平成 24 年度全国情報技術教育研究会第 41 回全国大会 ( 新潟大会 ) Xbee を活用した無線通信の研究 期日平成 24 年 8 月 9 日 ( 木 )~10 日 ( 金 ) 場所長岡市シティホールプラザ アオーレ長岡 香川県立三豊工業高等学校 電子科 本行

Microsoft Word - シャットダウンスクリプトWin7.doc

Transcription:

2F Delphi/C++ チュートリアルセッション Delphi でキカイを制御する アプリケーションの設計とテクニック 株式会社イマジオム代表取締役 高木太郎

1 はじめに

この講演の内容 制御プログラムというもの 制御プログラム設計のポイント 制御プログラム実装のテクニック 3

どんなものを考えているのか? 例 :3 次元プリンタ ここに入っている PC がシステム全体を制御

3 次元プリンタ原理 レーザで材料粉末を層ごとに焼き固め 積み重ねて 実物 を作る 5

3 次元プリンタ造形物 データさえ用意すれば 3 次元形状を自由に作ることができる 6

制御プログラムの データ 画面 3 次元データをロードして配置 7

制御プログラムの 手動操作 画面 装置を準備して 3 次元プリントを開始 8

制御プログラムの 造形 画面 3 次元プリントの進捗状況を表示 9

制御プログラムの 状態 画面 装置の状態をリアルタイムに監視 10

メインテーマ このような制御プログラムを どのように設計 実装すればいいのか? 11

制御プログラムと 2 いうもの

普通のプログラム と何が違う? サードパーティ製品を使わないといけない 多くの動作を同時に行わないといけない 頻繁な仕様変更に対応しないといけない ユーザにはいつでも応答しないといけない 13

サードパーティ製品を使わないといけない ユーザインタフェース サーボモータ 制御プログラム RS232C PLC ヒータ温度計各種センサ 独自 DLL WinSock 制御ボード 電子メール レーザスキャナ 14

多くの動作を同時に行わないといけない 3 次元データ配置動作 断面形状計算動作光学系制御動作機械系制御動作環境監視 制御動作電子メール送信動作 しかもリソースの取り合いが起きる 3 次元データ 断面形状 画面表示 PLC 光学系 電子メール 15

頻繁な仕様変更に対応しないといけない 下層側 ( ハードウェア側 ) が変わることが多く 修正が大変 使用部品の変更 画面の変更 寸法の変更 データ形式の変更 制御方法の変更 16

ユーザにはいつでも応答しないといけない どんな時でも 非常停止だけはさせたい 17

制御プログラム 3 設計のポイント

最初に結論を書きます マルチスレッドプログラムにする ユーザインタフェース以外の すべて をワーカスレッドにやらせる 19

本当か? マルチスレッドが必要なのはわかる しかし すべて をワーカスレッドにやらせなくてもいいのでは? やってみると ハングアップが頻発することがわかる 20

マルチスレッドと排他制御 マルチスレッド = 複数の実行単位 ( スレッド ) を同時に実行させる方法 排他的リソース = 複数のスレッドが同時に使ってはいけないリソース リソース = コンピュータが扱うあらゆる もの コードやデータ ハードウェアなど 排他処理 = 排他的リソースが 同時に複数のスレッドから使われないようにする方法 TCriticalSection を使うのが一般的 try CriticalSection.Enter; UseExclusiveResource(...); finally CriticalSection.Leave; end; 21

デッドロック 開始 リソース A 確保 リソース B 確保 開始 リソース B 確保 リソース A 確保 異なる順番でリソースを確保する複数のスレッドは デッドロックを起こすことがある つまりデッドロックを避けるには リソース順位を決め いつも同じ順番で確保すればよい リソース B 解放 リソース A 解放 リソース A 解放 リソース B 解放 これは よく言われること 終了 終了 22

リソースが一つでもデッドロック? 開始 リソース C 確保 Application.ProcessMessages Application.ProcessMessagesの処理するメッセージが リソースCを使おうとするとどうなるか? リソースCを使わないメッセージを選んで処理するのは困難 どんなメッセージが来るかわからない リソース C 解放 終了 メインスレッドでは 排他的なリソースを使ってはいけないことがわかる 23

それではどうするか? 排他的リソースは すべてワーカスレッドで使用する メインスレッドでのトリガによって排他的リソースを使う処理を実行する場合 ワーカスレッドに処理をやらせる ワーカスレッドでは 通常の リソース順位 を使った排他制御を行う トリガ ( メインスレッド ) ユーザからの入力タイマイベント機器からの信号電子メールの受信 排他的リソースの使用 ( ワーカスレッド ) 3 次元データ断面形状画面表示 PLC/ 光学系電子メール 24

制御プログラム 3 実装のテクニック

今回紹介するテクニック 別のスレッドに実行させる 実行待ち行列クラスTCommandQueue 引数を渡すことのできるSynchronize ワーカスレッドで実行させるAsynchronize コンテキストスイッチの高速化 26

別のスレッドに実行させる 実行終了を待たない ( ノンブロッキング ) 実行終了を待つ ( ブロッキング ) メインスレッドに実行させる TTimerCommand- Queue Synchronize ワーカスレッドに実行させる TThreadCommand- Queue Asynchronize 27

実行待ち行列クラス TCommandQueue uses CommandQueues; type TSomeForm= class(tform) private CommandQueue:TTimerCommandQueue; procedure DoSomething(CommandParams:TCommandParams); public procedure Execute; end; メソッドを非同期で順番に実行させる procedure TSomeForm.Execute; begin SomeParams:=TSomeParams.Create; SomeParams.Name:=' 高木太郎 '; SomeParams.Age:=43; CommandQueue.Add(DoSomething,SomeParams); end; 28

TCommandParams で引数を渡す 引数を TCommandParams オブジェクトでメソッドに渡す type TSomeParams= class(tcommandparams) public Name:string; Age:LongInt; end; procedure TSomeForm.DoSomething; begin WriteLn(' 名前は ',TSomeParams(CommandParams).Name); WriteLn(' 年齢は ',TSomeParams(CommandParams).Age); end; 29

タイマキューとスレッドキュー 実行方法の異なる ( 使い方は同じ ) 二つの実行待ち行列を用意 TTimerCommandQueue: メインスレッドのメッセージループで実行 TThreadCommandQueue: 一つのワーカスレッドで順番に実行 type TCommandQueue= class(tobject) public function CommandCount:LongInt; procedure Add(Method:TCommandMethod; Params:TCommandParams); procedure Delete(CommandIndex:LongInt); property OnError:TCommandErrorEvent; end; type TTimerCommandQueue=class(TCommandQueue) type TThreadCommandQueue=class(TCommandQueue) 30

引数を渡すことのできる Synchronize TThread.Synchronizeは引数を持っていない 引数を渡そうとすると クラスのメンバ変数やグローバル変数を使わなければならない 引数を渡すことのできるSynchronizeを作っておく uses Synchronizers; begin SomeParams:=TSomeParams.Create; SomeParams.Name:=' 高木太郎 '; SomeParams.Age:=43; Synchronize(DoSomething,SomeParams); end; 31

ワーカスレッドで実行させる Asynchronize ワーカスレッドからメインスレッドに処理をさせる場合 Synchronize が使える しかしメインスレッドからワーカスレッドに処理をさせる簡便な方法は用意されていない uses Synchronizers; begin SomeParams:=TSomeParams.Create; SomeParams.Name:=' 高木太郎 '; SomeParams.Age:=43; Asynchronize(DoSomething,SomeParams); end; 32

コンテキストスイッチの高速化 コンテキストスイッチ= 実行スレッドを切り替えること 通常のコンテキストスイッチの間隔は 20ミリ秒ほど これを短縮することでシステムの応答が向上する グローバル設定なので 高速応答が不要になったら必ずもとに戻す uses MMSystem; procedure FormCreate; begin TimeBeginPeriod(1); end; procedure FormDestroy; begin TimeEndPeriod(1); end; 33

2 まとめ

制御プログラムを設計するには (1) プログラムが同時に行わなければならない処理をリストアップ それぞれの処理が使うリソースをリストアップ 複数の処理に使われる 排他的 リソースをリストアップ 排他的リソースを使う処理は すべてワーカスレッドに実行させる (Asynchronize) VCL を使う処理は メインスレッドに実行させる (Synchronize) 35

制御プログラムを設計するには (2) 排他的リソースの依存関係をできるだけ排除 リソース A を使っていなければ リソース B が使えない 状況を避けるよう 実行タイミングをずらす (TCommandQueue) それでも依存関係が残る場合 排他的リソースに順位を決める すべての排他的リソースをクリティカルセクションで保護 メッセージ応答を高める必要がある場合 コンテキストスイッチの間隔を短くする (TimeBeginPeriod) 36

まとめ (1) 制御プログラムは ユーザ操作が主体のプログラムとは異なる性格を持っている 開発の際には その性格を意識した設計が求められる 特に処理実行のトリガが複数ある場合 デッドロックや再入には特に注意する必要がある それらの防止に 排他的リソースを使う処理をすべてワーカスレッドに実行させる方法が効果的 37

まとめ (2) 多くのスレッドを使用する制御プログラムの実装に役立つテクニックを紹介した Delphi ユニット ( ソースコード付き ) も 近く弊社ホームページ (http://www.imageom.co.jp/) で公開するので 併せて活用されたい 38

Q & A