...

遠隔制御を用いた マシニングセンタの加工精度向上

by user

on
Category: Documents
67

views

Report

Comments

Transcript

遠隔制御を用いた マシニングセンタの加工精度向上
学士論文
遠隔制御を用いた
マシニングセンタの加工精度向上
に関する研究
1p-84p
完
平成 17 年 2 月 16 日提出
指導教官
1050158
長尾 高明 教授
長尾
和昌
目次
2
1緒言
1.1 研究の背景・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・6
1.2 従来の研究・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・6
1.3 研究の目的・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・7
1.4 本論文の概要・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・7
2マシニングセンタの構成と計測機器
2.1 加工知能化の基礎概念・・・・・・・・・・・・・・・・・・・・・・・・・・・9
2.2 熱変形能動補償の意義・・・・・・・・・・・・・・・・・・・・・・・・・・・11
2.3 マシニングセンタの構成・・・・・・・・・・・・・・・・・・・・・・・・・・12
2.3.1 マシニングセンタ・・・・・・・・・・・・・・・・・・・・・・・・・・・12
2.3.2 熱アクチュエータ・・・・・・・・・・・・・・・・・・・・・・・・・・・14
2.4 計測機器・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・17
2.4.1 レーザ測長器・・・・・・・・・・・・・・・・・・・・・・・・・・・・・17
2.4.2 反射ミラー・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・19
2.4.3 多点集計装置(データロガー)・・・・・・・・・・・・・・・・・・・・・・ 20
2.4.4 ストレインアンプ・・・・・・・・・・・・・・・・・・・・・・・・・・・22
2.4.5 デジタルファインサーモ DG2・・・・・・・・・・・・・・・・・・・・・・23
3遠隔制御
3.1 遠隔操作の概念・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・26
3.2 遠隔操作の構成・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・26
3.3 遠隔操作画面の構成・・・・・・・・・・・・・・・・・・・・・・・・・・・・28
3.3.1 図 3.2 のプログラム特性・・・・・・・・・・・・・・・・・・・・・・・・29
3.3.2 図 3.3 のプログラム特性・・・・・・・・・・・・・・・・・・・・・・・・29
3.3.3 遠隔操作画面の機能・・・・・・・・・・・・・・・・・・・・・・・・・・30
3.4 考察と問題点・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・31
4変形検出機構
4.1 変形検出機構(変形センサ)性能評価実験概要・・・・・・・・・・・・・・・・・33
4.2 変形センサのシステム概略・・・・・・・・・・・・・・・・・・・・・・・・・34
4.2.1 変形センサ説明・・・・・・・・・・・・・・・・・・・・・・・・・・・・34
4.3 性能評価実験の概略図・・・・・・・・・・・・・・・・・・・・・・・・・・・35
4.4 実験内容・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・35
4.5 実験結果・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・38
3
5 実験
5.1 学習実験・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・40
実験1 長時間稼動時・・・・・・・・・・・・・・・・・・・・・・・・・・・ 42
実験2 主軸回転変化時・・・・・・・・・・・・・・・・・・・・・・・・・・ 43
実験3 フライス加工時・・・・・・・・・・・・・・・・・・・・・・・・・・ 44
実験4 熱アクチュエータ使用時・・・・・・・・・・・・・・・・・・・・・・ 45
5.2 考察・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・46
5.3 今後の展望・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・46
6 結論
6.1 結論・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・48
謝辞・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・49
参考文献・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・50
付録・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・51
遠隔操作プログラム
フライス加工実験
NC プログラム
4
第1章
緒言
5
1.1
研究の背景
長期に続く不況が工業界だけをとって考えると日増しに経済回復の兆しが見られる
中、製造業各社は省コスト、省労力の経営努力に励んでいる。それに伴い、工場の生産
ラインの無人化、自動化が著しく進んでいる。省力化、自動化の実現を目指す上で工作
機械の高精度化、高信頼性化の迅速な対応が求められている。そうした要求に応えるに
は、工作機械の機械構造自体が高精度化、高信頼化である必要がある。そのためには、
基本となる機械構造の高精度化、高剛性化を図るとともに、加工精度低下の主な要因で
ある切削力、熱による外乱の影響に対応可能なシステムの構築が重要である。しかしな
がら機械構造の高精度、高信頼、高剛性化を図るには比較的外乱に強い高価な高剛性の
金属を使用する等でコストの面で反することが考えられる。
よって、それら以外で工作機械における高精度化や高信頼性化を実現するために、熱
変形を抑制することの重要性は従来からよく認識されている。実際は熟練者が経験に基
づいて補正する、機械を空運転によって熱変形が安定するのを待ってから使用するとい
った方法が取られている。より能動的な方法として、加工中に発生した熱を抑える方法
が上げられる。しかし、これによってすべての熱を抑えることは不可能である。また、
熱や加工反力、加工時における振動等による変形を抑制するといった手段も講じられて
いるが、熱伝播、熱膨張をまったくなくすことが出来ない限り解決にはならない。
以上のように精度の低下の原因となる発熱に関して、根本的な解決策を見つけ出すの
は極めて困難な問題である。しかし、省力化、自動化の流れの中での機械の高精度化は
実現されなければならない問題である。熟練者が行う経験の加工精度を一番と考えて工
作機械がどれだけ近づくことができるか挑戦しなければならない。
1.2 従来の研究
工作機械における高精度や高信頼性を実現するために、熱変形を抑制することの重要性
は上でも述べたとおりだが、それに伴いこれまでにも数多くの研究がなされている。熱変
形への対策は大きく 2 つに分けることができる。ひとつは、熱変形を何らかの形で抑制
する方法。もうひとつは、熱変形を容認し、計測または予測して補償する方法である。
前者として、熱変形の発生する場所、大きさ、原因を調べる研究、また、その熱変形
を抑制するように、高剛性化、加熱法や熱変形補償形構造、熱伝導の小さい材料(コン
クリートやセラミックス)や線形膨張率の小さい材料(低熱膨張鉄材など)を用いる方
法、ヒートパイプを用いる方法などが試みられている。
後者には、レーザで熱変形を外部から測定する研究、代表点などの温度を計測し、物
理モデルによって熱変形を予測する試みなどがある。
6
1.3
研究の目的
本研究の目的は、温度環境を変化させ、マシニングセンタの熱変形によって生じる主
軸の傾き、及び変位を計測する。また、予測誤差を小さくするような予測方法の改善策
を考え、熱変形による加工誤差を自ら補償することのできるマシニングセンタの開発を
最終の目標とする。
1.4
本論文の概要
本論文は全 6 章から構成される。
第 1 章では、研究の背景及び目的について述べる。
第 2 章では、知能化加工の基礎概念及び本研究で使用するマシニングセンタの構成と
実験などに使用した機器の説明をする。
第 3 章では、遠隔操作プログラムについて述べる。
第 4 章では、変形センサの検定実験について述べる。
第 5 章では、実験を行い、考察を述べる。
第 6 章では、本論文の結論を述べ本研究のまとめとする。
7
第2章
マシニングセンタの構成と計測機器
8
2.1
加工知能化の基礎概念
加工をするということは、提示された製図の寸法で正確かつ効率よく製品を作り出す
ことを目的にしている。しかし、実際のところ製品を正確に効率良く加工することはと
ても困難である。
加工個所
主軸モータ
力や熱によ
る変形
工具
熱の伝達
加工の全体像
温度分布
音
熱
内部応力
加工反力
振動
外部応力
熱伝達
構造体
力の伝達
固定具
送り装置
図 2.1 加工中に生じる物理現象
9
図 2.1 に示す物理現象は加工中における加工誤差の原因である。実験に使用したマシ
ニングセンタだけでなく工作機械全般にわたりこれらの物理現象が発生し、力と熱で変
形する。また、歪み、音、温度などで高精度加工ができない。そこで、著者は加工精度
低下の原因となる情報をセンサによって取り込み、機械の設定数値とセンサで得た数値
とのずれを把握し、マシニングセンタに付属してあるファン、ヒータ(計 14 個)でずれ
を修正すれば正確な製品を作り出すことが可能になるであろうと考える。また、マシニ
ングセンタをクライアントとサーバのコンピュータを設けて制御することにより、セン
サで得たデータや熱アクチュエータの動作内容、加工状態を把握し、それに基づいて内
部モデルを修正することで、機械自体が学習し「加工の知能化」を実現しようとしてい
る。その基本構成を図 2.2 に示す。
図 2.2 加工知能化の基本構成
10
2.2 熱変形能動補償の意義
前述したように製品の加工中には様々な物理現象が加工物、工作機械全体に生じ加工
誤差を生じさせているが、特に加工反力と熱による変形がマシニングセンタの加工精度
を一番低下させていることは今までの研究によって証明されている。
工作機械本体の剛性を高めることで、加工反力による変形を補い変形を抑えるという
方法がとられてきたが、構造体の重量が過大となり、またコストがかかるなどの問題に
より解決までには至っていない。
熱による変形については、熱が発生している部分を冷やす、発熱部からの伝熱を遮熱
体等で防ぐといった対策が行われてきた。また、本論文の第5章により行った実験でも
明らかになったことだが、加工や主軸回転のしない状態、すなはち、空運転であっても
10 時間稼動すれば主軸位置 X,Z は 5∼10μm、Y 軸に至っては 20μm の変位が発生す
ることがわかっている。しかし、主軸モータや、加工中の工具と工作物からの発熱や外
気温の影響、工場の室温といった全ての熱を取り除きコントロールすることは不可能で
ある。
また、マシニングセンタのような多くの部品で構成されている工作機械は複雑な構造
であるため、物の加工反力による変形と熱変形を具体的に解析、モデル化することは非
常に困難であることが容易に予測できる。モデル化による熱変形補正は問題が多く複雑
な熱変形を十分に補うことは難しい。
そこで本研究では、変形センサやレーザ測長器などを用いて熱補正をするわけだがそ
れぞれ設置が難しいものである。それに高価なものでもあるのでできるだけ安価で取り
付けやすいとされる熱電対を用い「加工の知能化」を実現させることが目的である。マシ
ニングセンタの各部の温度を測定し、その情報を基に温度変化による変形を予測するこ
とを試みていくことが本論文の目的である。
11
2.3 マシニングセンタの構成
2.3.1
マシニングセンタ
図 2.3 に本研究に用いたマシニングセンタの外観及びその仕様を示す。
図 2.3 マシニングセンタ
本研究の実験風景の一部である。
この工作機械がマシニングセンタである。大阪機工株式会社(OKK)社製の VM4Ⅱと
いう汎用マシニングセンタで、コラム下部に熱アクチュエータ(ヒータ 8 箇所、ファン 6
箇所)が装備されており、熱変形に対してアクティブな補正が可能としている。
マシニングセンタの主軸頭部に 2 本、コラム部を囲むように 4 本配置されている変形
センサが取り付けられており、加工時、熱アクチュエータ使用時等の変形情報がリアル
タイムで得ることができる。
次頁にこのマシニングセンタの仕様を示す。
12
表 3.2 高性能マシニングセンタの仕様
テーブル作業面
800 × 400mm
最大移動距離
テーブル(左右)…X
630mm
サドル(前後)
…Y
410mm
ヘッド(上下)
…Z
460mm
切削送り速度
早送り速度
主軸回転数
主軸オーバーライド
1∼10000 ㎜/min
24m/min(X、Y)
12m/min(Z)
25∼6000rpm
S5 桁
50 ∼ 150%
13
2.3.2 熱アクチュエータ
本研究に用いている三軸(X,Y,Z)のマシニングセンタでは、構造体の変形による主軸位
置変位のうち並進方向の変化については座標系の原点をずらすことで 1 ㎛刻みでの補
正が可能であるが、主軸の傾きについては NC 機能では補正できない。そのために、マ
シニングセンタのコラム下部に配置された熱アクチュエータで能動的にコラムを変形
させることによって主軸の傾きを制御する。
熱アクチュエータは加熱用の面状発熱体を 16 枚、冷却用のファンを 14 個ずつ配置
されている。加熱用の面状発熱体は坂口伝熱製のサミコン 230SR の 100V140W70×
100mmを主軸側に 4 枚、その他の場所には 100V200W100×200mm を 4 枚ずつ 12 枚
用いている。冷却ファンについては、オリエンタルモータ製の MS14-DC を主軸側に 2
個、MU825S-43 を背面に 4 個、MU925S-41 を側面に 4 個ずつそれぞれコラムに取り
付けられたフィンに搭載している。図 2.4 に熱アクチュエータの外観を示す。
図 2.4 熱アクチュエータ
次頁に熱アクチュエータ(ファン、ヒータ)の仕様表 3.3、3.4 を示す。
14
表 3.3 加熱用面上発熱体の仕様
型番
坂口電熱(株)製サミコン 230
発熱体
ニッケルクロム系合金箔
絶縁層
ガラスクロス入りシリコンゴム
リード線
シリコンガラス耐熱電線
使用温度範囲
65℃∼230℃(表面)
電力許容差
±10%
絶縁抵抗値
DC500V メガ-にて 100Ω以上
耐電圧
1500V/min
厚さ
0.5mm∼1mm(端子部除く)
表 3.4 冷却用ファンの仕様
型番
オリエンタルモータ MS14-DC
電圧
単層 200V
電流
0.10A
入力
17W
周波数
50Hz
60Hz
回転数
2550r/min
2900r/mm
最大風量
2.8 ㎥/min
3.1 ㎥/min
最大静圧
7.9mmH2O
8.4mmH2O
77Pa
82Pa
43dB
48dB
騒音
・ 最大風力、最大静圧はダブルチャンバー方式で測定した値である。
・ 騒音はファンの吸引口より 1m の距離において A レンジで測定した値である。
・ インピーダンスプロテクトされている。
次頁に熱アクチュエータによる変形モードの図 2.5 を掲載する。
15
これらの熱アクチュエータによって加熱、冷却することで図に示すように構造体を変
形させることが可能になる。この変形によって、主軸の傾きを変化させることで熱変形
による主軸の傾きの変化を打ち消すことができる。
X軸まわり曲げモーメント
冷却
Y軸まわり曲げモーメント
加熱
図 2.5 熱アクチュエータの変形モード
16
2.4
計測機器
以下に本研究に用いた計測機器の仕様を示す。
2.4.1 レーザ測長器
レーザ測長器を使って主軸位置を計測した。測定方法は次項で説明する。外観を図
2.6 から 2.8 に、仕様を表 2.3 に示す。
図 2.6 レーザ測長器
表 2.1 レーザ測長器の仕様
型番
(株)東京精密製 DISTAX L-IM-20B
最大測定範囲
10m
分解能
10nm
最大応答速度
630mm/sec
精度
±(L×10-7+0.01×10-6)m
L=測定長さ
タイプ
ヘリウム−ネオン、連続波
最大ビームパワー
350mW
公称波長
633nm
消費電力
75VA
17
図 2.7 レーザヘッド
図 2.8 コーナーキューブミラー
18
2.4.2 反射ミラー
本研究ではレーザ測長器を用い三軸の変位測定を行うため一部レーザを図 2.9 に示す
反射ミラーで屈折させなければならない。そのために用いた反射ミラーの仕様を表 2.2
に示す。
図 2.9 反射ミラー
表 2.2 反射ミラーの仕様
型式
(株)インデコ MY‐Φ-633
波長
633nm
レーザ
ヘリウム−ネオン
反射率
99.80%
最大出力
500MW/㎝
Φ
25
19
2.4.3 多点集計装置(データロガー)
熱電対からの出力を集計するために図 2.10 に示す多点集計装置(以下データロガー)
を用いた。合計 16 チャンネルの入力が可能である。このデータロガーは USB と PC
カードを介して外部コンピュータと通信を行うことができる。データロガーの仕様を表
2.4 に示す。
図 2.10 データロガー
表 2.3 データロガーの仕様
型式
(株)キーエンス NR-1000
熱電対入力
K 熱電対:−200∼1300℃
入力インピーダンス
1MΩ以上
精度
K 熱電対:±(0.05%of rdg+1℃)
分解能
16bit
サンプリング周期
0.1sec∼24h
時間軸精度
±100ppm
使用周囲温度
0∼+50℃
使用周囲湿度
20∼85%RH(結露しないこと)
ウォームアップ時間
データ収集後 30 分
20
熱電対
マシニングセンタの温度の計測にフォーク端子取り付けタイプの熱電対を用いた。合
計 10 箇所の温度を測定しデータロガーでデータを収集した。外観を図 2.11 に仕様を表
2.4 に示す。
図 2.11 熱電対
表 2.4 熱電対の仕様
型式
八光商事株式会社 HT-150
被覆熱電対種類
ガラス編組被覆 0.65 単線
測温接点
接地形(非接地にして用いた)
常用限度
200℃
長さ
3m
21
2.4.4 ストレインアンプ
図 2.12 に示すストレインアンプはマシニングセンタの各部に取り付けた変形センサ
のアナログデータを 6ch の A/D 変換ボードでデジタル値に変換することが可能である。
ストレインアンプの仕様を表 2.5 に示す。
図 2.12 ストレインアンプ
表 2.5 ストレインアンプの仕様
適用ゲージ率
ブリッジ電源
平衡調整方式
120Ω∼1kΩ
2V、0.5Vrms 内部切り替え
正弦波 25kHz
抵抗分自動バランス、バックアップ約 1 ヵ月、
容量分自動除去
平衡調整範囲
抵抗分±約 2%(±約 1000×10-6 ひずみ)
電圧感度
200×10-6 ひずみ入力にて 5V 以上(VAR 最大)
測定範囲
(200、500、1k、2k、5k)×10-6 ひずみ/FS、OFF
(VAR 最大、BV=2V)
非直線性
±0.2%/FS 以内
周波数特性
DC∼10kHz±10%
22
2.4.5 デジタルファインサーモ DG2
図 2.13 に示すデジタルファインサーモは変形センサ検定時に使用。加熱部のシリコンラ
バーの仕様を示す。デジタルファインサーモ(本体)の仕様を次頁に示す。
図 2.13 シリコンラバーヒータ
表 2.6 シリコンラバーヒータの仕様
連続使用温度
200℃
最大使用温度
250℃
寸法 最大
幅 500mm×3000mm
寸法 最小
幅 25mm×50mm
寸法 厚さ
1.5mm
寸法 リード線長さ
300mm
材質
シリコンゴム
23
表 2.7 デジタルファインサーモの仕様
型番
DGC1150
入力電圧
AC100V(50/60Hz)
最大負荷
1.5kW(抵抗負荷)
温度設定範囲
0℃∼600℃
温度表示精度
±(1%F.S.+2.5℃)
温度補正精度
±3℃
制御方式
ON/OFF 制御
センサ
0℃∼40℃(温度 85%以下)
外形寸法
幅 66 ㎜×長さ 210 ㎜×厚さ 33 ㎜
24
第3章
遠隔制御
25
3.1
遠隔操作の概念
工作機械のイメージとしては、今までは汚い、危険であるとか、きつい仕事だという、
いわゆる3K の概念が多分にあるのではないだろうか。また近年の工作機械の発展はめざ
ましくそれに伴いより複雑化、高性能化している。NC 工作機械の慣れていない作業員が使
用するには上達にかなりの時間を要する。初心者であればなおのことである。また、工作
機械の稼動時における不都合に対しても作業員が現場に赴きトラブルを解決しなければな
らない。このような現状の中では遠隔操作は非常に有効で多くの利点が得られるはずであ
る。危険な製作所からなるべく作業員を遠ざけ、トラブルに対するシミュレーションを行
うことができる。また最大の利点として世界のどこにいてもシステムの指導をすることが
でき人間が実際に動かなくても現場にいることと変わらないように立ち振る舞うことがで
きるわけである。
また、ネットワークを形成することにより生産拠点である工場と設計等の拠点である企
業を結ぶことが可能になり、迅速な新製品開発が実現できるという利点もある。
技術開発において開発に要する時間、コストの軽減が非常に重要になってくる。そこで
それらを多く占める人や資材の移動をなるべく抑える情報化生産システムが今後非常に求
められる分野になるだろう。
3.2
遠隔操作の構成
実験に使用するオープン CNC マシニングセンタを HSSB 回線(High Speed Serialbus)
を介して CNC サーバーコンピュータ(以下サーバ)より制御できるプログラムを作成する。
また NC モード変換機能やタイマ機能、主軸回転数等を指示し、サーバ側をリアルタイム
で表示。また非常停止、サーバ側のトラブルを知らせる外部オペレータを瞬時にサーバ側
から CNC に伝えるプログラムを作成する。
サーバはインターネット接続されており、遠隔地から操作するクライアントコンピュー
タ(以下クライアント)と常にデータの交換でき遠隔操作を可能としている。
本研究ではこれらのサーバ側とクライアント側のコンピュータ、CNC 知能化マシニング
センタを用いることによって遠隔操作としている。今回、著者は特にサーバ側を重点にお
いてシステム構築を行ったのでサーバ側を中心に述べる。
次頁の図 3.1 は本研究し使用した機器の遠隔操作システムの構成図である。
26
遠隔操作システムの構成図
図 3.1 遠隔操作におけるシステム全体の構成図
27
3.3
遠隔操作画面の構成
マシニングセンタは Microsoft Visual C++6.0 でプログラムを作成することによって遠隔
操作が可能である。初心者でも分かりやすく機械を動かせるように作成した。サーバ側が
待ち状態であればこのプログラムで世界中どこからでもインターネットと介し研究室のマ
シニングセンタを稼動させることができる。
以下の図 3.2 は、CNC サーバ側の操作画面である。サーバ側から指示を送りマシニングセ
ンタを制御する。
図 3.2 主軸制御のダイアログ
図 3.3NC モード切替制御のダイアログ
28
3.3.1
図 3.2 のプログラム特性
タイマ機能
遠隔操作システムにおいて求められるものにリアルタイム性があげられる。マシニング
センタ側に制御コンピュータ、いわゆるサーバ側が制御命令を送信する。CNC はサーバか
らの情報を一定間隔で受信し、オペレーション・サイトのコンピュータに送らなければな
らない。そのため、Visual C++付属のタイマ機能「Ontimer」関数を利用する。
タイマとは操縦者が指定した時間が経過するごとに決められたイベントを発生させる機
能である。マシニングセンタの CNC、サーバ、クライアント間での通信を行う。
次頁の図 3.4 により使用法を詳しく説明する。
外部オペレータメッセージ機能
サーバ側のパソコンから CNC 側のマシニングセンタにメッセージを送る。サーバ側の状
況やマシニングセンタの状態をマシニングセンタのモニターに表示することが可能である。
次頁の図 3.5 により一例を示す。
3.3.2
図 3.3 のプログラム特性
マシニングセンタの基本的な操作を実行することができるプログラムである。
NC モード切替機能
マシニングセンタのモード切替が可能である。MDI、MEMORY、EDIT モードを変更し
表示する。
主軸回転制御機能
図 3.2 の主軸回転機能との違いは主軸 SpindleOverride により、指定した回転数の
50~150%(±5%)単位で制御することが可能である。
29
3.3.3
遠隔操作画面の機能
CNC に直接主軸回転の NC プログラムを送信しリアルタイムで制御する機能を作成した。
もし、時間、主軸回転数以外のものが入力されるとその行からストップしエラーとなる。
Txt ファイルに時間と回転速度を入力して Spn ファイルに変換して「開く」から読み込
ませる。そして、タイマ開始を押すと命令が 0 番から順番に実行されていく、タイマ機能
のカウント方法は 10 秒で 1 カウントをとり表示される。Spn ファイルの時間は絶対値指令
(アブソリュート)で実行される。
図 3.4 タイマ機能
外部オペレータメッセージの一例
このようにマシニングセンタ側にサーバ側の状況をメッセージとして送ることができる。
“サギョウチュウシ”以外にもプログラム中のアスキーコードを変更させることによって
多様なメッセージを送ることが可能である。
図 3.5 マシニングセンタのモニターに表示される“サギョウチュウシ!!”
30
3.4 考察と問題点
今回作成した遠隔操作プログラムでは、主軸回転、タイマ機能等は問題なく実行できた
のだが、一度主軸回転プログラムを実行させて 0 番から 1 番のイベントにうつるときにエ
ラーが生じることがある。そんなときはキャンセルを押してもう一度プログラムを実行さ
せればイベントはなんの問題もなく実行される。正しく実行されていることは確認済みで
あるが、しかし、遠隔操作でのリアルタイム性の利点を欠くことになるのでこの点は今後
の課題としたい。
31
第4章
変形検出機構
32
4.1
変形検出機構(変形センサ)性能評価実験概要
私たちは主軸側面に取り付けてあった変形検出機構(以下 変形センサ)が破損したための
修復を行った。同時に変形センサの信頼性を測るために性能評価実験を行った。
図 4.1 変形センサ性能評価実験
33
4.2 変形センサのシステム概略
変形センサシステムの概略を示す。
図 4.2 変形センサシステム
4.2.1 変形センサ説明
変形センサとは構造体の 2 点間に固定された 2 個の弾性ブロックと、その 2 個のブロッ
クを結ぶ連結棒からなる。この連結棒はスーパーインバーを使用し熱変形に強く純粋な変
形を検出することができる。この 2 個のブロックは片方に平行平板構造を設けていること
が特徴であり、この構造によってブロックに外力が加わると平行平板が大きく変形し、こ
れを検出し測定する。本研究では 2 ゲージ法を用いる。図 4.3 が実物である。
図 4.3 変形センサ
34
4.3 性能評価実験の概略図
図 4.4 変形センサ
4.4 実験内容
SS400 の鉄板に製作した変形センサを取り付けて図 2.13 のシリコンラバーヒータを図
4.4 に示す位置に装着する。
3600sec.計測する。始めの 1800sec.は 100℃まで加熱したヒータで鉄板を膨張させる。残
りの 1800sec.はヒータの電源を切り冷却状態にする。
以上のことから、以下の結果を得た。
35
変形センサ B の実験結果1
400
70
350
60
Deformation μst.
300
50
250
40
200
30
150
20
100
50
10
0
0
0
600
1200
1800
2400
Time sec.
Temperature ℃
変形センサB出力
3000
0.05
70
0.04
60
50
0.03
40
0.02
30
0.01
Temperature ℃
Displacement μm
レーザ測長器出力B
20
0
10
-0.01
0
0
600
1200
1800
2400
Time sec.
3000
36
変形センサ B の実験結果2
相関図B
0.045
0.04
0.035
0.025
0.02
0.015
0.01
0.005
0
-0.005
0
50
100
150
200
250
300
350
400
Deformation μst.
450
0.045
400
0.04
350
0.035
300
0.03
250
0.025
200
0.02
150
0.015
100
0.01
50
0.005
0
Displacement μm
変形センサBとレーザの出力
Deformation μst.
Displacment μm
0.03
0
0
600
1200
1800
2400
Time sec.
レーザ
3000
Sensor B
37
4.5 変形センサの特性
変形センサの特性として引っ張りを(+)圧縮を(−)として出力する。これを参考にして以
下 5 章の実験を行い。考察を行う。
4.6 実験結果
ストレインアンプ、レーザ測長器との相関図を見るかぎり若干のヒステリシスがみられ
るが、それは、鉄板との固定やヒータによる鉄板の反り等によるノイズと判断できるもの
であると推測される。全体的に良く一致しており期待通りの結果が得られた。よってこの
変形センサは充分に信頼し得るといえる。
これを本研究に使用する。
38
第5章
実験
39
5.1
学習実験
いよいよ実験である。研究対象となるマシニングセンタ各部に変形センサ、熱電対、
を設置し主軸回転時、フライス加工時、10 時間稼動時、熱アクチュエータ反応実験の
測定を行った。
10 時間稼動実験の際に変形センサ、熱電対とともにレーザ測長器を使用し計測を行
った。以下の図 5.1、5.3、5.4 に変形センサ、熱電対、レーザ測長器の配置図を示す。
図 5.1 変形センサ配置図
図 5.2 各部にある変形センサの長さ
A=595mm
B=295mm
C,D=1060mm
E,F=1322mm
40
図 5.3 熱電対配置図
図 5.4 レーザ測長器配置図
以上の装置を用いて実験を行い、次頁以降の実験結果を得た。
41
実験1:マシニングセンタを 10 時間空運転させたときの変形を図に示す。
変形センサの測定結果
レーザ測長器の測定結果
熱電対の測定結果
42
実験2:主軸回転数を 60sec.(一分間)毎に 1000rpm 上げていく。
変形センサの測定結果
熱電対の測定結果
条件:
使用工具 :エンドミル
径:6.0mm
43
実験3:アルミ材をフライスで表面加工する。
変形センサの測定結果
熱電対の測定結果
条件:
送り速度 :20mm/min
主軸回転数:1000rpm
加工深さ :1.0mm
使用工具 :フライス
径:90mm
工作物
スケール:120×120×30(㎜)
:アルミニウム
44
実験4:熱アクチュエータの反応実験
600sec.毎にヒータ、ファンの順で稼動させ 3600sec.計測を行った。
変形センサの測定結果
レーザ測長器の測定結果
熱電対の測定結果
45
5.2
考察
これまでの熱変位実験の結果をまとめると以下のことがいえる。
1. 加工法によってデータの傾向が比較的予測しやすい。
2. マシニングセンタは空運転時であっても変形を起こす。
3. 主軸回転数の変更によるギア交換時には突発的な振動が起こる。
4. 主軸回転時、加工時は主軸周りの変形し、熱アクチュエータ稼動時はコラム部周辺の変
形が著しい。
5. 加工中の 2 つ以上のデータで同じ変形をみせていても必ずしも同じ温度変化をみせる
とは限らない。
2.3.5.の要因によって変形傾向は予測できても同じ条件の加工や主軸回転、アクチュエー
タ稼動時であっても変位量にばらつきがみられる。
実験2,3における主軸回転、加工実験において変形センサの反応は Sensor(A,B)が
大きくなり、実験4におけるコラム部周辺に設置した熱アクチュエータ稼動時は
Sensor(C,D,E,F)の反応が大きくなることがわかった。実験1における長時間の空運転では
Sensor(A,B)はわずかに圧縮(−側)に Sensor(C,D,E,F)は膨張(+側)に推移していることがわ
かる。
実験1の長時間空運転の変形は実験4の熱アクチュエータ稼動時の変形を比較すると非
常に軽微なものであることがわかった。
5.3
今後の展望
熱アクチュエータを稼動させたときに期待通りの変形はみせるのだが変位量が得られな
かった。誤差や室温管理の配慮が甘かったと考え、性能をよく理解しデータを正確にとる
必要がある。
まだ、著者の理解していない技術であるニューラルネットワークの学習が必須であると
気がついた。これについては今後の課題としたい。
著者の希望としては熱電対を用いるだけで変形量を読み取り補正を行うシステムについ
ての研究を今後の課題としたい。
46
第6章
結論
47
6.1 結論
本論文ではマシニングセンタの各部に熱電対を取り付け長時間稼動、主軸回転、加工等
の実験をおこなってきたが、温度分布が様々で温度でみて変形を計ることは非常に困難で
あるということがわかった。しかし、熱電対は他の変形センサ、レーザ測長器とは違い安
価で取り付けも容易な計測機器であることから、熱変形補正に用いると非常に有利な点が
多い。よって今後、熱電対を用いてマシニングセンタの歪量を予測し補正を行うシステム
を開発したい。
48
謝辞
本研究を進めるにあたり、多くの方々にご指導、ご協力いただきました。本論文を締め
くくるにあたり、高精密マシニングセンタの販売元である大阪機工株式会社(OKK)様をは
じめとしまして開発、研究に携わってこられた多くの先輩方に感謝の意を表します。
指導教官である長尾教授、日頃から親身なご指導、研究方針について明確な指示をいた
だき大変有意義な大学生活を送ることができました。
前年度ご卒業された修士の小林さんは学生の立場から根気よく指導いただきありがとう
ございました。
また、長尾研究室の同志である小林さん、田村さん、山本さん、西村さんには手探りな
がらいろいろな面でお世話になりました。特に田村さん、貴方のその素晴らしい問題解決
能力には幾度となく救われました。研究の楽しい時間を共有できてとてもうれしいです。
心からありがとう。
同研究室である小林研究室の皆様には大変よくしていただきありがとうございました。
なかでも同学年の小林さん、里見さん、木内さんには研究の合間でのアクティブな語らい
は楽しかったです。感謝しております。
私がこの一年間で一番感謝したい方は東京大学博士の花山さんです。未熟者である私に
マシニングセンタの基礎から丁寧に叩き込んでくれました。感謝以上の言葉があればそれ
をおくりたいと思います。
以上の方々に深く感謝し、厚くお礼を申し上げます。
49
参考文献
[1] 花山良平,
“熱変形能動補償型高精密マシニング・センタによる加工精度向上の研究”
1998 年度東京大学工学部機械工学科卒業論文,
[2] 小林正和,“高精密マシニングセンタの熱変形補償に関する研究”
2004 年度高知工科大学知能機械システム修士論文,
[3] 高谷周一郎,
“工作機械熱変形補償制御用変形センサの開発”
2003 年度高知工科大学知能機械システム卒業論文,
[4] 越智照文,植松健一,清水康晶,秀和システム“これからはじめる Visual C++6.0”
[5]OKK 大阪機工(株) VM4-Ⅱ 使用説明書
[6]高橋賞,河井正安,大成社“ひずみゲージによる歪測定入門歴史から測定まで”
50
付録
51
本研究で作成したプログラムを付録といたします。
プログラムの主要部(cpp ファイル)のみの掲載となります。
seigyoDlg.cpp ………… 遠隔操作サーバプログラム(タイマ、外部オペレータ)
seigyo_testDlg.cpp …… 遠隔操作サーバプログラム(NC モード切替、主軸回転)
52
// seigyoDlg.cpp : インプリメンテーション ファイル
//
#include "stdafx.h"
#include "seigyo.h"
#include "seigyoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// ダイアログ データ
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard は仮想関数のオーバーライドを生成します
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV のサポート
//}}AFX_VIRTUAL
// インプリメンテーション
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
53
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// メッセージ ハンドラがありません。
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSeigyoDlg ダイアログ
CSeigyoDlg::CSeigyoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSeigyoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSeigyoDlg)
m_spin = 0;
m_spin_ovr = 0;
m_count = 0;
m_read = _T("");
m_shift = 0;
//}}AFX_DATA_INIT
// メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
54
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSeigyoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSeigyoDlg)
DDX_Control(pDX, IDC_BUTTON_HSSB, m_hssb_butoon);
DDX_Text(pDX, IDC_EDIT_SPIN_SPEED, m_spin);
DDX_Text(pDX, IDC_EDIT_SPIN_OVR, m_spin_ovr);
DDX_Text(pDX, IDC_EDIT1, m_count);
DDX_Text(pDX, IDC_EDIT_read, m_read);
DDX_Text(pDX, IDC_EDIT_SHIFT, m_shift);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSeigyoDlg, CDialog)
//{{AFX_MSG_MAP(CSeigyoDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_HSSB, OnButtonHssb)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON_timer_start, OnBUTTONtimerstart)
ON_BN_CLICKED(IDC_BUTTON_timer_stop, OnBUTTONtimerstop)
ON_BN_CLICKED(IDC_BUTTON_SPIN_STOP, OnButtonSpinStop)
ON_BN_CLICKED(IDC_BUTTON_SPIN_START, OnButtonSpinStart)
ON_BN_CLICKED(IDC_BUTTON_EMG, OnButtonEmg)
ON_BN_CLICKED(IDC_BUTTON_open, OnBUTTONopen)
ON_BN_CLICKED(IDC_BUTTON_SHIFT_P, OnButtonShiftP)
ON_BN_CLICKED(IDC_BUTTON_SHIFT_M, OnButtonShiftM)
ON_BN_CLICKED(IDC_BUTTON_MSG, OnButtonMsg)
ON_BN_CLICKED(IDC_BUTTON_MSG_CLEAR, OnButtonMsgClear)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
55
/////////////////////////////////////////////////////////////////////////////
// CSeigyoDlg メッセージ ハンドラ
BOOL CSeigyoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// "バージョン情報..." メニュー項目をシステム メニューへ追加します。
// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
// 大きいアイコンを設定
// 小さいアイコンを設定
// TODO: 特別な初期化を行う時はこの場所に追加してください。
hssb_flag = 0;
count = 0;
spin_num_tmp = 0;
rpm_tmp = 0;
m_shift = 0;
56
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
void CSeigyoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// もしダイアログボックスに最小化ボタンを追加するならば、アイコンを描画する
// コードを以下に記述する必要があります。MFC アプリケーションは document/view
// モデルを使っているので、この処理はフレームワークにより自動的に処理されます。
void CSeigyoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// クライアントの矩形領域内の中央
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
57
// アイコンを描画します。
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// システムは、ユーザーが最小化ウィンドウをドラッグしている間、
// カーソルを表示するためにここを呼び出します。
HCURSOR CSeigyoDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
//HSSB 制御
void CSeigyoDlg::OnButtonHssb()
{
if(hssb_flag==0){
if(okk.HssbOpen()==true){
hssb_flag = 1;
//dispMode();
//m_spin_ovr = okk.GetSpinOvr();
}
}else{
if(okk.HssbClose()==true){
hssb_flag = 0;
}
}
if(hssb_flag == 0){
m_hssb_butoon.SetWindowText("HSSB open");
}else{
m_hssb_butoon.SetWindowText("HSSB close");
m_shift = 0;
58
}
UpdateData(false);
}
// HSSB close
/*
void CSeigyoDlg::OnButtonHssbClose()
{
if(okk.HssbClose()){
m_hssb_start = "close";
m_hssb_button.EnableWindow(true);
m_hssb_button2.EnableWindow(false);
UpdateData(false);
}
}
*/
// 非常停止
void CSeigyoDlg::OnButtonEmg()
{
okk.Emgstp();
}
//主軸回転
// 主軸回転開始
void CSeigyoDlg::OnButtonSpinStart()
{
UpdateData(true);
//spinstart(m_spin);
}
void CSeigyoDlg::spinstart(int rpm)
{
sprintf(okk.NCbuf,"¥nS%d¥n",rpm);
okk.SetNCCodeMDI();
Sleep(100);
okk.SetPMCBit(PMC_R,356,0,true);
Sleep(100);
59
okk.SetPMCBit(PMC_R,356,0,false);
}
// 主軸回転停止
void CSeigyoDlg::OnButtonSpinStop()
{
spinstop();
}
void CSeigyoDlg::spinstop()
{
okk.SetPMCBit(PMC_R,356,2,true);
Sleep(100);
okk.SetPMCBit(PMC_R,356,2,false);
}
// 主軸オーバーライド変更
void CSeigyoDlg::ChangeSpinOvr(int ovr)
{
if(ovr > 200){
ovr = 200;
}else if(ovr < 20){
ovr = 20;
}
okk.SetSpinOvr(ovr);
}
// S コード変更
void CSeigyoDlg::ChangeSpinRpm(int rpm)
{
// 使用回転数域の制限
if(rpm > 6000){
rpm = 6000;
}else if(rpm <200 && rpm != 0){
rpm = 200;
60
}
if(!(rpm_tmp==0 && rpm==0)){
// 回転数変更
if(rpm==0){
sprintf(okk.NCbuf,"¥nM5¥n");
}else if(rpm_tmp==0){
sprintf(okk.NCbuf,"¥nS%d¥nM3¥n",rpm);
}else{
sprintf(okk.NCbuf,"¥nS%d¥n",rpm);
}
// MDI 実行
okk.SetNCCodeMDI();
}
rpm_tmp = rpm;
m_spin
= rpm_tmp;
UpdateData(false);
}
//タイマ
void CSeigyoDlg::OnTimer(UINT nIDEvent)
{
count++;
if(count/6 >= spin_min[spin_num_tmp]){
ChangeSpinRpm(spin_rpm[spin_num_tmp]);
spin_num_tmp++;
}
if(spin_num_tmp > spin_num){
KillTimer(1);
ChangeSpinRpm(0);
61
}
/*
if(count == 6){
ChangeSpinOvr(50);
spinstart(1000);
}else if(count == 12){
ChangeSpinOvr(100);
}else if(count == 24){
ChangeSpinOvr(75);
}else if(count == 27){
spinstop();
ChangeSpinOvr(100);
}else if(count == 30){
KillTimer(1);
}
*/
m_count = count;
UpdateData(false);
CDialog::OnTimer(nIDEvent);
}
void CSeigyoDlg::OnBUTTONtimerstart()
{
SetTimer(1,10000,NULL);
}
void CSeigyoDlg::OnBUTTONtimerstop()
{
KillTimer(1);
}
void CSeigyoDlg::OnBUTTONopen()
{
62
char ss[256];
char crlf[]="¥x0d¥x0a";
int n;
int num;
int i;
char buf[64];
CFileDialog myDLG(true,"spn","*.spn",
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"回転(*.spn) |*.spn| テキスト(*.txt) | *.txt| 全て(*.*) | *.*||");
//myDLG.m_ofn.lpstrInitialDir="..";
myDLG.m_ofn.lpstrInitialDir="e:¥¥kazumasa¥¥seigyo";
if( myDLG.DoModal()==IDOK ){
CStdioFile fin(myDLG.GetPathName(),CFile::modeRead);
num = 0;
while(fin.ReadString(ss,255)!=NULL){
n=strlen(ss);
ss[n-1]='¥0';
sscanf(ss,"%d %d",&spin_min[num],&spin_rpm[num]);
num++;
}
spin_num = num;
m_read = "";
for(i=0;i<spin_num;i++){
sprintf(buf,"%d : %2dmin :%5drpm¥r¥n",i,spin_min[i],spin_rpm[i]);
m_read = m_read + buf;
}
UpdateData(false);
}
}
// 機械座標系シフト +
void CSeigyoDlg::OnButtonShiftP()
{
63
UpdateData(true);
m_shift += 5;
okk.MachineAxisShift(AXIS_X,5);
UpdateData(false);
}
// 機械座標系シフト −
void CSeigyoDlg::OnButtonShiftM()
{
UpdateData(true);
m_shift -= 5;
okk.MachineAxisShift(AXIS_X,-5);
UpdateData(false);
}
void CSeigyoDlg::OnButtonMsg()
{
okk.SetExtData(0xc4,44);
okk.SetExtData(0xc3,0xbbb7);// サキ
okk.SetExtData(0xc3,0xdeae);// ”ョ
okk.SetExtData(0xc3,0xb3c1);// ウチ
okk.SetExtData(0xc3,0xadb3);// ュウ
okk.SetExtData(0xc3,0xbc21);// シ!
//okk.SetExtData(0xc3,0xbbde);//
//okk.SetExtData(0xc3,0xb221);//
}
void CSeigyoDlg::OnButtonMsgClear()
{
okk.SetExtData(0xc5,44);
}
// seigyo_testDlg.cpp : インプリメンテーション ファイル
64
//
#include "stdafx.h"
#include "seigyo_test.h"
#include "seigyo_testDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// ダイアログ データ
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard は仮想関数のオーバーライドを生成します
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV のサポート
//}}AFX_VIRTUAL
// インプリメンテーション
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
65
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// メッセージ ハンドラがありません。
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSeigyo_testDlg ダイアログ
CSeigyo_testDlg::CSeigyo_testDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSeigyo_testDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSeigyo_testDlg)
m_hssb_stat = _T("");
m_mode = _T("");
m_spin = 0;
m_spin_ovr = 0;
//}}AFX_DATA_INIT
// メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
66
void CSeigyo_testDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSeigyo_testDlg)
DDX_Control(pDX, IDC_BUTTON_HSSB, m_hssb_button);
DDX_Control(pDX, IDC_BUTTON_HSSB2, m_hssb_button2);
DDX_Text(pDX, IDC_STATIC_HSSB_STAT, m_hssb_stat);
DDX_Text(pDX, IDC_STATIC_MODE, m_mode);
DDX_Text(pDX, IDC_EDIT_SPIN_SPEED, m_spin);
DDV_MinMaxInt(pDX, m_spin, 200, 20000);
DDX_Text(pDX, IDC_EDIT_SPIN_OVR, m_spin_ovr);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSeigyo_testDlg, CDialog)
//{{AFX_MSG_MAP(CSeigyo_testDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_HSSB, OnButtonHssb)
ON_BN_CLICKED(IDC_BUTTON_HSSB2, OnButtonHssbClose)
ON_BN_CLICKED(IDC_BUTTON_EMG, OnButtonEmg)
ON_BN_CLICKED(IDC_BUTTON_MODE_EDIT, OnButtonModeEdit)
ON_BN_CLICKED(IDC_BUTTON_MODE_MEMORY, OnButtonModeMemory)
ON_BN_CLICKED(IDC_BUTTON_MODE_HANDLE, OnButtonModeHandle)
ON_BN_CLICKED(IDC_BUTTON_SPIN_START, OnButtonSpinStart)
ON_BN_CLICKED(IDC_BUTTON_SPIN_STOP, OnButtonSpinStop)
ON_BN_CLICKED(IDC_BUTTON_SPIN_OVR_P, OnButtonSpinOvrP)
ON_BN_CLICKED(IDC_BUTTON_SPIN_OVR_M, OnButtonSpinOvrM)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON_timer_sta, OnBUTTONtimersta)
ON_BN_CLICKED(IDC_BUTTON_timer_stop, OnBUTTONtimerstop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
67
/////////////////////////////////////////////////////////////////////////////
// CSeigyo_testDlg メッセージ ハンドラ
BOOL CSeigyo_testDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// "バージョン情報..." メニュー項目をシステム メニューへ追加します。
// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
// 大きいアイコンを設定
// 小さいアイコンを設定
// TODO: 特別な初期化を行う時はこの場所に追加してください。
hssb_flag = 0;
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
68
void CSeigyo_testDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// もしダイアログボックスに最小化ボタンを追加するならば、アイコンを描画する
// コードを以下に記述する必要があります。MFC アプリケーションは document/view
// モデルを使っているので、この処理はフレームワークにより自動的に処理されます。
void CSeigyo_testDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// クライアントの矩形領域内の中央
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// アイコンを描画します。
dc.DrawIcon(x, y, m_hIcon);
}
69
else
{
CDialog::OnPaint();
}
// 表示の初期化
m_spin = 500;
m_spin_ovr = 100;
m_hssb_stat = "close";
m_hssb_button.SetWindowText("HSSB open");
UpdateData(false);
}
// システムは、ユーザーが最小化ウィンドウをドラッグしている間、
// カーソルを表示するためにここを呼び出します。
HCURSOR CSeigyo_testDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
// HSSB 回線制御
void CSeigyo_testDlg::OnButtonHssb()
{
if(hssb_flag==0){
if(okk.HssbOpen()){
hssb_flag = 1;
dispMode();
m_spin_ovr = okk.GetSpinOvr();
}
}else{
if(okk.HssbClose()){
hssb_flag = 0;
}
}
70
if(hssb_flag == 0){
m_hssb_stat = "close";
m_hssb_button.SetWindowText("HSSB open");
}else{
m_hssb_stat = "open";
m_hssb_button.SetWindowText("HSSB close");
}
UpdateData(false);
}
// HSSB close
void CSeigyo_testDlg::OnButtonHssbClose()
{
if(okk.HssbClose()){
m_hssb_stat = "close";
m_hssb_button.EnableWindow(true);
m_hssb_button2.EnableWindow(false);
UpdateData(false);
}
}
// 非常停止
void CSeigyo_testDlg::OnButtonEmg()
{
okk.Emgstp();
}
// NC 運転モード
// EDIT
void CSeigyo_testDlg::OnButtonModeEdit()
{
okk.SetMode(NCMODE_EDIT);
dispMode();
}
71
// MEM
void CSeigyo_testDlg::OnButtonModeMemory()
{
okk.SetMode(NCMODE_MEMORY);
dispMode();
}
// HND
void CSeigyo_testDlg::OnButtonModeHandle()
{
okk.SetMode(NCMODE_HANDLE);
dispMode();
}
// モード表示
void CSeigyo_testDlg::dispMode()
{
int res;
// モード取得
res = okk.GetMode();
switch(res){
case NCMODE_INTERRUPT:
m_mode = "INT";
break;
case NCMODE_EDIT:
m_mode = "EDT";
break;
case NCMODE_REMOTE:
m_mode = "RMT";
break;
case NCMODE_MEMORY:
m_mode = "MEM";
break;
case NCMODE_MDI:
m_mode = "MDI";
72
break;
case NCMODE_HANDLE:
m_mode = "HND";
break;
case NCMODE_JOG:
m_mode = "JOG";
break;
case NCMODE_RAPID:
m_mode = "RPD";
break;
case NCMODE_ORIGIN1:
m_mode = "OR1";
break;
case NCMODE_ORIGIN2:
m_mode = "OR2";
break;
default:
m_mode = "---";
break;
}
UpdateData(false);
}
// 主軸回転
// 主軸回転開始
void CSeigyo_testDlg::OnButtonSpinStart()
{
UpdateData(true);
if(m_spin > 6000){
m_spin = 6000;
}else if(m_spin < 200){
m_spin = 200;
}
UpdateData(false);
73
sprintf(okk.NCbuf,"¥nS%d¥n",m_spin);
okk.SetNCCodeMDI();
Sleep(100);
okk.SetPMCBit(PMC_R,356,0,true);
Sleep(100);
okk.SetPMCBit(PMC_R,356,0,false);
}
// 主軸回転停止
void CSeigyo_testDlg::OnButtonSpinStop()
{
okk.SetPMCBit(PMC_R,356,2,true);
Sleep(100);
okk.SetPMCBit(PMC_R,356,2,false);
}
// 主軸オーバーライド変更 +5%
void CSeigyo_testDlg::OnButtonSpinOvrP()
{
UpdateData(true);
m_spin_ovr += 5;
ChangeSpinOvr();
UpdateData(false);
}
// 主軸オーバーライド変更 −5%
void CSeigyo_testDlg::OnButtonSpinOvrM()
{
UpdateData(true);
m_spin_ovr -= 5;
ChangeSpinOvr();
UpdateData(false);
}
// 主軸オーバーライド変更
74
void CSeigyo_testDlg::ChangeSpinOvr()
{
if(m_spin_ovr > 150){
m_spin_ovr = 150;
}else if(m_spin_ovr < 50){
m_spin_ovr = 50;
}
okk.SetSpinOvr(m_spin_ovr);
Sleep(100);
m_spin_ovr = okk.GetSpinOvr();
}
void CSeigyo_testDlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent){
case 1:
UpdateData(true);
m_spin_ovr ++;
UpdateData(false);
break;
case 2:
UpdateData(true);
m_spin += 200;
UpdateData(false);
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
void CSeigyo_testDlg::OnBUTTONtimersta()
{
SetTimer(1,10000,NULL);
75
SetTimer(2,25000,NULL);
}
void CSeigyo_testDlg::OnBUTTONtimerstop()
{
KillTimer(1);
KillTimer(2);
}
76
データ集
5 章 実験 1
長時間稼動実験…18000sec.空運転時の変形
左上:変形センサ 右上:レーザ測長器 左下:熱電対 の測定結果である。
10800sec.空運転時の変形
77
3600sec.空運転時の変形
78
5 章 実験 2
主軸回転変化 実験内容と条件は実験 2 と同じである。
変形センサの測定結果
条件は同じではあるが稀に SensorA が 6000rpm(300sec.時)のギア変換と同時に過大な衝撃を受け
る。
79
5 章 実験 3
フライス加工実験…0.1∼1.0mm までを 0.1mm 毎に掲載する。右:変形センサ 左:熱電対
25
20
15
10
5
0
-5 0
-10
-15
100
200
300
温度推移
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
28
Tempareture ℃
Deformation μst.
フライス加工0.1mm
27.5
27
26.5
26
0
Time sec.
100
20
10
0
100
200
300
-10
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
28
27.5
27
26.5
26
25.5
0
100
200
300
Time sec.
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
28.5
28
27.5
27
26.5
26
25.5
0
100
100
200
-10
Time sec.
300
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
Tepmareture ℃
Deformation μst.
5
300
温度推移
15
10
200
Time sec.
フライス加工0.4㎜
0
-5 0
300
温度推移
Temperature ℃
Displacement μst.
フライス加工0.3mm
100
200
Time sec.
Time sec.
20
15
10
5
0
-5 0
-10
300
温度推移
Temperature ℃
Displacement μst.
フライス加工0.2㎜
0
200
Time sec.
28.5
28
27.5
27
26.5
26
0
100
200
Time sec.
300
機構内
室温
主軸上部
主軸前面
主軸前面上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
機構内
室温
主軸上部
主軸前面
主軸電源上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
機構内
室内
主軸上部
主軸前面
主軸電源上
コラム背面下
コラム前面下
コラム背面下
コラム右側面
コラム左側面
機構内
室温
主軸上部
主軸前面
主軸前面上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
80
温度推移
フライス加工0.5mm
15
10
Sensor A
Sensor B
5
Sensor C
Sensor D
0
0
50
100
150
200
250
300
Sensor E
Sensor F
-5
Tempareture ℃
Deformation μst.
28
27.5
27
26.5
26
0
-10
Time sec.
100
15
10
5
0
100
200
300
300
-10
温度推移
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
Tempareture ℃
Deformation μst.
フライス加工0.6mm
-5 0
200
Time sec.
28.5
28
27.5
27
26.5
26
0
Time sec.
100
200
300
Time sec.
温度推移
15
5
0
-5 0
100
200
300
-10
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
Temperature ℃
Displacement μst.
フライス0.7mm
10
28.5
28
27.5
27
26.5
26
0
Time sec.
100
5
0
200
-10
-15
300
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
Temperature ℃
Deformation μst.
15
100
28.5
28
27.5
27
26.5
26
0
100
200
Time sec.
Time sec.
300
機構内
室温
主軸上部
主軸前面
主軸電源上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
機構内
室温
主軸上部
主軸前面
主軸電源上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
温度推移
フライス加工0.8mm
-5 0
200
Time sec.
10
機構内
室温
主軸上部
主軸前面
主軸前面上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
300
機構内
室温
主軸上部
主軸前面
主軸電源上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
81
温度推移
Deformation μst.
10
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
5
0
-5
0
100
200
300
Temperature ℃
フライス加工0.9mm
機構内
室温
主軸上部
主軸前面
主軸電源上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
29
28.5
28
27.5
27
26.5
26
0
-10
100
200
300
Time sec.
Time sec.
温度推移
フライス加工1.0mm
100
200
Sensor A
Sensor B
Sensor C
Sensor D
Sensor E
Sensor F
300
Tempareture ℃
Deformation μst.
27.6
25
20
15
10
5
0
-5 0
-10
27.4
機構内
27.2
室温
27
主軸上部
26.8
主軸前面
26.6
主軸電源上
26.4
コラ ム背面下
26.2
コラ ム前面下
26
コラ ム背面上
25.8
0
50
100
150
200
250
300
コラ ム右側面
コラ ム左側面
Time sec.
Time sec.
空運転 300sec.…フライス加工との比較
温度推移
空運転
25.5
Deformation μst.
6
4
Sensor A
2
Sensor B
Sensor C
0
-2
0
50
100
150
200
250
300
Sensor D
Sensor E
-4
Temperature ℃
8
25
24.5
24
23.5
Sensor F
23
-6
0
-8
Time sec.
100
200
Time sec.
300
機構内
室内
主軸上部
主軸前面
主軸電源上
コラム背面下
コラム前面下
コラム背面上
コラム右側面
コラム左側面
82
5 章 実験 4
熱アクチュエータ使用時の反応実験
変形センサの測定結果
83
5 章 実験 3
フライス加工用 NC プログラム
O0820(MILLER);
G90G28F20;
G00X-100Y40;
G43Z70.H20;
S1000M03;
Z55.;
G01X120.F20;
Y80;
X-100;
G00Z70.M09;
G91G28X0Y0Z0;
M30;
%
84
Fly UP