概要
TunerStudioを、究める。
憧れのTunerStudioに、手、出してみる。
iniファイルを書いて、tunerstudioに読み込ませて、usbに繋いだ、shrike-liteをEFIと思わせる。
tunerstudioとは
TunerStudio(チューナースタジオ)は、世界中のDIYチューナーやエンジニアに愛用されている、自作フルコン・オープンソースECUセッティング用の業界標準ソフトウェアです。
EFI Analytics社が開発しており、Windows、Mac、Linuxで動作します。主に「Megasquirt」「Speeduino」「rusEFI」などのECUとPCを接続し、エンジン制御のすべてを視覚的に調整するために使われます。
主要な4つの機能
-
リアルタイム・ダッシュボード表示
エンジンの状態をPC画面上でリアルタイムに監視できます。
回転数(RPM)、吸気圧(MAP)、水温、空燃比(A/F)などをメーターやグラフで表示します。
画面のデザイン(ゲージの配置や種類)は、スマホのアプリのように自由にカスタマイズ可能です。 -
3D/2D 燃料・点火マップの編集
エンジンのセッティングの核となる「マップ」を直感的に書き換えることができます。
燃料マップ(VEテーブル)や点火時期マップ(Ignition Advance)を、縦軸(負荷・吸気圧)、横軸(回転数)の3Dグラフィックで表示します。
キーボードの矢印キーなどで、エンジンをかけたままリアルタイムに数値を増減させ、瞬時にECUへ反映(書き込み)できます。 -
自動セッティング機能(TuneAnalyze Live! / オートチューン)
有料版(TunerStudio MS Ultra/Registered)に搭載されている、最も強力な機能です。
ワイドバンドO2センサーを車両に取り付けて実走すると、ソフトが現在の空燃比を監視します。
自分が設定した「目標空燃比(ターゲットAFR)」と実際の数値のズレをソフトが自動計算し、走行しながらリアルタイムに燃料マップを自動補正・最適化してくれます。これにより、個人でも短時間で安全なベースマップを作成できます。 -
データロギング(走行データの記録)
走行中のすべてのセンサーデータを1秒間に数十回〜数百回という超高速で記録(ログ採取)できます。
記録したデータは、姉妹ソフトの「MegaLogViewer」を使ってグラフ化し、「なぜあの回転数でノッキングが出たのか」「加速ポンプの燃料は足りているか」などを後から精密に分析できます。
写真
1000rpm-5000rpmをsinで動きます。
準備するもの
shrike-lite
手順
tunerstudioを起動して、新規プロジェクトで、下記iniファイルを読み込みます。
サンプルコードをshrike-liteに書き込みます。
写真の画面が表示されれば、成功です。
iniファイル
[TunerStudio]
queryCommand = "F"
signature = "MShift v0.01"
[Constants]
endianness = little
nPages = 1
pageSize = 12
pageReadCommand = "C"
[OutputChannels]
ochGetCommand = "O"
ochBlockSize = 7
rpm = scalar, U32, 0, "RPM", 1.00000, 0.00000, 0.00, 3000.0
[TableEditor]
[FrontPage]
gauge1 = tachometer
gauge2 = tachometer
gauge3 = tachometer
gauge4 = tachometer
gauge5 = tachometer
gauge6 = tachometer
[GaugeConfigurations]
tachometer = rpm, "Engine Speed", "RPM", 0, 8000, 200, 500, 6000, 6000, 0, 0
[Menu]
サンプルコード
import time
import sys
import math
import struct
def get_simulated_rpm():
t = time.ticks_ms()
rpm = 3000 + int(math.sin(t * 0.63) * 2000)
return max(0, rpm)
signature = 'MShift v0.01'
while True:
input_one = sys.stdin.read(1)
if input_one == 'F':
print(signature, end='')
if input_one == 'C':
print(signature, end='')
if input_one == 'O':
current_rpm = get_simulated_rpm()
data_block = struct.pack('<I', current_rpm)
sys.stdout.buffer.write(data_block)
以上。


