感圧紙の「赤」を見ちゃダメ RGB値で加圧力を数値化する方法:冴えない機械の救いかた(5)(5/5 ページ)
本連載「冴えない機械の救いかた」では、メカ設計の失敗事例を題材に、CAE解析や計測技術を用いて、不具合の発生メカニズムとその対策を解説していく。第5回は、感圧紙のRGB値を用いて加圧力を数値化する方法と、測定値を扱う際の注意点について解説する。
ビットマップ形式の画像データを読み取る「Visual Basic」のソースコード
最後に、ビットマップ形式の画像データを読み取るVisual Basicのソースコードを掲載します。「Visual Basic 2010」で動作確認済みです。62〜68行目が注意点となります。このソースコードは、Windows 3.1マシンの16bit版Visual Basicで作ったものですが、画像データ1行分のバイト数が4バイト(つまり32bit)の整数倍になるようにしてあります。すぐにWindowsが32bit化されることを見越して、データ構造を設計していたわけです。
Option Explicit On
Imports System.Math
Public Class Form1
Structure FileHeader
Dim Type1 As Byte
Dim Type2 As Byte
Dim Size As Integer
Dim Reserved1 As Short
Dim Reserved2 As Short
Dim OffBits As Integer
End Structure
Public BitmapFileHeader As FileHeader
Structure InfoHeader
Dim Size As Integer
Dim Width As Integer
Dim Height As Integer
Dim Planes As Short
Dim BitCount As Short
Dim Compression As Integer
Dim SizeImage As Integer
Dim XPelsPerMeter As Integer
Dim YPelsPerMeter As Integer
Dim ClrUsed As Integer
Dim ClrImportant As Integer
End Structure
Public BitmapInfoHeader As InfoHeader
Public rmap(257, 257) As Byte 'RGB data
Public gmap(257, 257) As Byte
Public bmap(257, 257) As Byte
Public buf() As Byte
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim iv, k4, i, k, ih, width3 As Integer
Dim ih3 As Integer
Dim flen As Integer
Dim s As String
Dim ier As Integer
Dim map_n As String
map_n = "c:\Temp\test_image.bmp"
ier = 1
On Error GoTo Read_mapdata_Er
flen = CInt(FileLen(map_n))
FileOpen(1, map_n, OpenMode.Binary)
FileGet(1, BitmapFileHeader, 1)
FileGet(1, BitmapInfoHeader)
If BitmapInfoHeader.BitCount <> 24 Then
MsgBox("BitmapInfoHeader.BitCount=" & CStr(BitmapInfoHeader.BitCount), 0, "Mapping data file must be 24bit BMPfile.")
GoTo read_mapdata_close_f
End If
width3 = BitmapInfoHeader.Width * 3
k = width3 Mod 4
If k = 0 Then
k4 = width3
Else
k4 = width3 + 4 - k
End If
ReDim buf(k4 - 1)
For iv = BitmapInfoHeader.Height To 1 Step -1
If EOF(1) Then MsgBox("Filename " & map_n, 0, "Error in Reading mapping data.") : GoTo read_mapdata_close_f
FileGet(1, buf)
For ih = 1 To BitmapInfoHeader.Width
ih3 = ih * 3
bmap(ih, iv) = buf(ih3 - 3)
gmap(ih, iv) = buf(ih3 - 2)
rmap(ih, iv) = buf(ih3 - 1)
Next ih
Next iv
FileClose(1)
ier = 0
Exit Sub
read_mapdata_close_f:
FileClose(1)
Exit Sub
Read_mapdata_Er:
FileClose(1)
s = Err.Description & vbCrLf
MsgBox(s, 16, "Error at read_mapdata")
End Sub
Profile
高橋 良一(たかはし りょういち)
RTデザインラボ 代表
1961年生まれ。技術士(機械部門)、計算力学技術者 上級アナリスト、米MIT Francis Bitter Magnet Laboratory 元研究員。
構造・熱流体系のCAE専門家と機械設計者の両面を持つエンジニア。約40年間、大手電機メーカーにて医用画像診断装置(MRI装置)の電磁振動・騒音の解析、測定、低減設計、二次電池製造ラインの静音化、液晶パネル製造装置の設計、CTスキャナー用X線発生管の設計、超音波溶接機の振動解析と疲労寿命予測、超電導磁石の電磁振動に対する疲労強度評価、メカトロニクス機器の数値シミュレーションの実用化などに従事。現在RTデザインラボにて、受託CAE解析、設計者解析の導入コンサルティングを手掛けている。⇒ RTデザインラボ
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
直動パーツフィーダー不具合をばね−マス系で読み解く
本連載「冴えない機械の救いかた」では、メカ設計の失敗事例を題材に、CAE解析や計測技術を用いて、不具合の発生メカニズムとその対策を解説していく。第3回は、同一設計にもかかわらず性能にばらつきが生じる直動パーツフィーダーの不具合を取り上げ、ばね−マス系と伝達関数の考え方から原因と対策の方向性を整理する。
共振はなぜ起きる? ばね−マス系と伝達関数で考える
本連載「冴えない機械の救いかた」では、メカ設計の失敗事例を題材に、CAE解析や計測技術を用いて、不具合の発生メカニズムとその対策を解説していく。第2回は、振動トラブルの背景にある「共振」に焦点を当て、ばね−マス系モデルと伝達関数を用いてその本質を整理する。
ストップ! 外注丸投げ――CAE解析や冷却系の設計を自分でやれるようになろう
CAE解析とExcelを使いながら冷却系の設計を“自分でやってみる/できるようになる”ことを目指す連載。連載第1回では、冷却系設計に関する題材をいくつか紹介し、本連載で取り上げるトピックスについて整理する。
連載「CAEを正しく使い疲労強度計算と有機的につなげる」の内容と有限要素法
金属疲労を起こした際にかかる対策コストは膨大なものになる。連載「CAEを正しく使い疲労強度計算と有機的につなげる」では、CAEを正しく使いこなし、その解析結果から疲労破壊の有無を予測するアプローチを解説する。連載第2回では本連載の「あらすじ」と「有限要素法」について取り上げる。
解析専任者に連絡する前に、設計者がやるべきこと
連載「CAEと計測技術を使った振動・騒音対策」では、“解析専任者に連絡する前に、設計者がやるべきこと”を主眼に、CAEと計測技術を用いた機械の振動対策と騒音対策の考え方や、その手順について詳しく解説する。連載第1回では、本連載の趣旨、振動対策や騒音対策が必要となる場面などについて取り上げる。
設計者なら一度はやってみたい形状最適化、お金をかけずにどこまでできる?
原理原則を押さえていれば、高額なソフトウェアを用意せずとも「パラメトリック最適化」「トポロジー最適化」「領域最適化」といった“形状最適化”手法を試すことができる! 本連載ではフリーのFEM(有限要素法)ソフトウェア「LISA」と「Excel」のマクロプログラムを用いた形状最適化にチャレンジする。
