NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

Excelシートを用いて時間に対応した温度制御を行いたい

解決済み
解決策を見る

温度をインターフェースを用いて取得し、ペルチェ素子の温度をPIDにより制御することが出来ました。

 

次のステップとして、

 

・Excelのスプレッドシートを用いて時間と時間に対応した温度を読み込む

・読み込んだ時間内に対応した温度にする

 

ことが目標です。

 

具体的なイメージとして図を添付します。

 

名称未設定 1.jpg

温度ではなく、時間に対した制御量(電圧やモーターの回転数)などでも構いません。

①スプレッドシートを読み込む。

②セルごとの時間と制御量(その時間に対する目標値)をプログラムに流し、制御。

③次のセルを読む。

 

イメージはできているのですが、当方初心者のためプログラムが浮かばず行き詰まっており質問させていただきました。

 

宜しくお願いします。

0 件の賞賛
メッセージ1/8
9,795件の閲覧回数

KSSiS3939 さん、こんにちは。

 

イメージ図をもとに話をしますね。

時刻=0分(30℃)と、時刻=60分(38℃)の間を、どのようなカーブでつなぐか?

ということを指定されたほうが良いのでは?と思いました。

 

具体的には、

・0分~59分の間は、ずっと30℃で、59分~60分の間に30℃から38℃へあげるような制御なのか?

・0分~60分の間を直線的に温度上昇させる制御なのか?

・0分~60分のあと、120分、180分のポイントまで滑らかなカーブを描くような制御なのか?

がわからないので、ちょっと答えにくい気がいたします。

 

イメージ図だけから判断するなら、全体として滑らかなカーブを描けばいいのかな?と感じますので、

1.スプレッドシート全体を読み出す。

2.温度カーブが滑らかになるよう、スプライン補間などを使って、1分毎の目標値を計算する。

3.1分毎に目標値になるよう、PID制御する(1分程度でセトリングするようなパラメータで)。

といった流れでしょうか。

 

スプレッドシートからの読み出しについては、「CSV読み出し」などのキーワードを使えば

別スレッド・ヘルプ・ネット情報などで見つけられるように思います。

ご期待の答えになりますでしょうか?  以上です。

メッセージ2/8
9,753件の閲覧回数

KSSiS3939 さん、こんにちは。

 

PID部分は別として、CSV読み出しからの流れは、添付図のような感じではないかと思います。

 

ご参考になれば幸いです。 以上です。

メッセージ3/8
9,750件の閲覧回数

S.A.M.さん、はじめまして。

 

自分の質問文がわかりにくい中、返信いただき本当に有難うございます。

 

自分のしたいこととは、S.A.M.が書き出していただいた中の

 

・0分~60分のあと、120分、180分のポイントまで滑らかなカーブを描くような制御

 

であり、

 

スプレッドシートの

1.スプレッドシート全体を読み出す。

2.温度カーブが滑らかになるよう、スプライン補間などを使って、1分毎の目標値を計算する。

3.1分毎に目標値になるよう、PID制御する(1分程度でセトリングするようなパラメータで)。

 

2と3の部分をもう詳しく教えていただけると嬉しいです。

(スプライン補完、時間で目標値になるようなプログラム)

 

図で流れはつかめました!

 

添付していただきありがとうございます。

 

よろしくお願いいたします。。。

0 件の賞賛
メッセージ4/8
9,737件の閲覧回数
解決策
トピック作成者KSSiS3939が受理

KSSiS3939 さん、こんにちは。

 

まず、スプライン補間はどこにあるか?です。

 関数パレット > 数学 > 補間と補外 > スプライン補間1D

 

スプライン補間、そのものについての説明は書ききれないので、ネットでググって頂くこととして、

難しいことは抜きに、サンプルプログラムが利用できます。

 メニュー > ヘルプ > サンプルを検索

   検索 > キーワードを入力 > スプライン ・・・とタイプして検索すると、

サンプルが6個見つかるので、1D補間というのを選んでください。

このサンプルを実行し、グラフを見ていただければ、ご希望のものに近い結果と思います。

グラフの青点がデータ、赤線が補間済みのデータです。データ値は「データ」タブを選べば表示されます。

関数からは多項式が出るようなので、例えば、1分間隔の横軸(x)を与えればよいと思います。

 

次に、時間で目標値にの件。

手っ取り早いのは、1分毎に制御の目標値を与えるループを作ります。

 ・Whileループなどを作成 (ループ右下の赤い点に、終了ボタンなどをつなぐのをお忘れなく)

 ・シーケンスストラクチャを作成

 ・シーケンス1:目標値設定 (csvファイルから目標値を読み出す手順です)

  シーケンス2:PID実行

  シーケンス3:タイマーで1分待つ (関数パレット>タイミング>日付・時間を秒で取得などを利用)

といった流れの繰り返しです。

PIDのループ定数次第で、あまりに早く収束するようであれば、ガクガクとしたカーブになってしまいますし、

ダンピングさせすぎて収束しきれない場合には、目標値にセトリングしません。

そこは制御工学の設計そのものなので、LabVIEWのプログラミング云々じゃないと思いますから、

適宜調整されるということで。

 

以上、文章だけですが、うまく伝わるでしょうか?

メッセージ5/8
9,733件の閲覧回数

ありがとうございます!

 

ていねいな、説明わかりやすく、早速試してみたいと思います。

 

LavVIEW初心者を脱するべく勉強に励んでいきたいです。

 

ありがとうございました!

0 件の賞賛
メッセージ6/8
9,723件の閲覧回数

度々申し訳ありません。

 

スプライン補間についてのご質問です。

 

スプライン補間のサンプル確認いたしました。自分のイメージ通りの内容でした。

 

色々いじってみたのですが、スプライン補間のViのXi入力。1分間隔の横軸(x)の入力方法がわかりませんでした。。。

 

・0-60分で37-39℃とした時、Xiに入力する数値(?)はどのようになりますでしょうか。

 

よろしくお願いいたします。

 

0 件の賞賛
メッセージ7/8
9,669件の閲覧回数

KSSiS3939 さん、こんにちは。

 

別スレが立ったようなので、そちらへサンプルを置きました。

 「スプライン補間について。(スプラインインターポラントの使い方)

 

以上です。

メッセージ8/8
9,454件の閲覧回数