質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

5回答

1271閲覧

計測制御プログラムの覚え方を教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/06/28 09:48

編集2021/06/28 23:43

初歩的な質問ですみませんが、計測制御プログラムの覚え方を教えてください

ここで計測制御というはRATOC製のGP-IBケーブルを利用して計測器、電源器をプログラムで操作することです。

すでに動いているシステムはあるのですが、新しくリニューアルをしようとしています。

そのシステムではRATOC製のGP-IB用のdllがあって、計測開始した時に、スレッドを生成して、スレッド内で計測を制御しているようです。

そもそもなぜ計測制御でスレッドを利用しているかも理解できていなく、

普段はWeb系の業務システムをやっているので、制御系の知識が乏しく、

どなたかアドバイスをお願いします。

(追記)
・制御系のプログラムを動かすためにはそのドライバメーカーのマニュアルにAPIやサンプルコードが載っている場合があるのでそれを確認する。
・制御系はマルチスレッドのプログラムが使われることが多いかもしれない。

マルチスレッドについて調べてみました。

並列処理と並行処理(マルチスレッド) … 現在動いている計測アプリではマルチスレッドが使われていた
同期と非同期 … Webの業務系アプリでは非同期を使っている
非同期な並行処理 ~ そんなものがあるのかどうかよくわかっていない。
(Webアプリでももしかしたらマルチスレッドを使う場合があるかもしれない)

疑問点として
・並行処理と非同期の使い分けをどうするのか。
・CPU主体とI/O主体という考え方をどうするべきか。

もしわかるかたいらっしゃいましたらアドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/06/28 10:01

> 覚え方 …って何?
退会済みユーザー

退会済みユーザー

2021/06/28 10:46

たとえばamazonの本とか、webサイトでもいいですが、曖昧なことですみません。
退会済みユーザー

退会済みユーザー

2021/06/30 02:04

既に回答はいくつかついているようですが、この質問は何をもってクローズするつもりなのでしょう?
guest

回答5

0

そもそもなぜ計測制御でスレッドを利用しているかも理解できていなく

通信処理がもたついたりした場合に反応なくなったら嫌じゃん? とかそういう話では.

投稿2021/06/28 09:59

fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/28 10:35

コメントありがとうございます。 たしかに、現在1回5秒ぐらいで10測定20データを取得してるので、その関係でスレッドを利用しているかもしれません。 制御部はメーカーマニュアルで、その動作はマルチスレッドでプログラムを組めるようにすることかもしれません。
fana

2021/06/29 02:35

例えば 「機器からデータを受信するよ.受信データがなかなか来ない場合には100秒は頑張って待ってみるけど,それでもデータが来ない場合はエラーということにするよ」 みたいな関数があった場合, この関数を呼ぶと処理が返ってくるのに最大100秒かかる(この関数を呼んだスレッドは100秒間うんともすんとも言わなくなる可能性がある)わけで. そういう処理をシングルスレッドでやりたいか?っていう話. (しばらく止まろうがどうということはない という話であれば,別にマルチスレッドでやる必要はない)
退会済みユーザー

退会済みユーザー

2021/06/29 03:25

なるほど、マルチスレッドでエラー対策をしている場合と、並列に処理する場合と2パターンあるかもれないです。 何秒か待ってみるけど100秒待ったらエラーということにするのは、わかりやすかったです
guest

0

ベストアンサー

まずはそのRATOC製のGP-IBケーブルの取説/マニュアルを読みましょう。
そしてその内容を理解することです
これができて、やっとスタートラインに立つことができます

投稿2021/06/28 09:53

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/28 09:57 編集

コメントありがとうございます。 明日マニュアルを読んでみようと思います。 もしわかれば教えて頂きたいのですが、計測などの制御系でケーブルで通信するのにスレッドで処理することが必須なのでしょうか?
y_waiwai

2021/06/28 09:58

必須ではないです。 それが必要だから、そうしている、ということだと。
退会済みユーザー

退会済みユーザー

2021/06/28 10:37

処理をまたずに複数回通信してるので、その関係でスレッド利用かもしれません。メーカーマニュアルで制御部を確認するのと、スレッドのプログラムを組めるように覚えようと思います。
guest

0

マニュアルを見てサンプルがあればそれを試すのが早道と思います。
(サンプルではスレッド処理ではないかもしれません。)
スレッドでの処理は、他の方も書いてますが別スレッドでやらないと画面の操作ができなくなったりするのでその回避のためだったり
定周期(例えば0.1秒に1回)でデータ取得を行うときに精度を保ちたい場合などですね。

投稿2021/06/29 13:45

KIYOSHI

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/30 12:45 編集

コメントありがとうございます。サンプルプログラムをためすことと、スレッドでの処理をトライしてみたいと思います。 計測器制御は難しいですね
KIYOSHI

2021/06/30 14:07

計測制御 ライブラリー・DLLが用意されていたりするのでそのやり方が特有だったりしますけど、そんなに難しくないですよ。 スレッド無い状態でアプリ作成し動かしてみて、画面の操作などに支障があると思えばスレッド処理を行う。でいいと思います。
退会済みユーザー

退会済みユーザー

2021/07/08 01:48

コメントありがとうございます。 慣れてしまえば簡単なのかもしれませんが、初見は難しいなって思いました。 サンプルプログラムも間違いが多いし(見ているものは古いバージョンの.NET用なのかもしれないです。) まずはスレッド無い状態でアプリを作成してみたいと思います。
dodox86

2021/07/08 02:04

@質問者さん 計測器やその他、外部機器の発売元が提供するライブラリは使い方に癖があるように見えるものが多いですが、本質では多くの部分で共通です。シリアル通信を例にとって、ご自身でそれ用のライブラリやAPIを実際に作り、提供する側、提供されて使う側の視点それぞれで考えると見えてくると思います。大きく見るとWebでのAPIも同じです。
退会済みユーザー

退会済みユーザー

2021/07/09 06:42 編集

なるほど、シリアル通信をやったことがないので、本質を分かっていないと難しいですね。 シリアル通信を理解したり、プログラムするのにどうやって覚えたらよいか参考書等は探してはいるのですが見つけれていません。 大きくみるとWebのAPIと同じような考え方ですか。 Webの方は経験はしているので優しくは感じます。
guest

0

スレッドは必要だから使うのであって、別に使わなくて済むなら使わなくていいと思います。
状態取得するのに通信に時間が掛かったり、時々エラー吐いたりするハードなんてのもゴロゴロあるので、そういったもの相手ならその都度取りに行くのもしんどいので、別スレッドに裏でいい状態の時を取得・保持して貰った方が楽じゃないですか?
現実に置き換えるなら、自分で荷物取りに行くか、他の仕事してる間に業者に持ってきて貰うかって話です。

投稿2021/06/29 00:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/29 03:21

なるべくスレッドを使わないようにして、必要な時のみにしたほうがいいかもしれないですね エラー時に止めないようにするため、スレッドをつかっていたり、並列で処理して効率よくする場合との2パターンで考えておいたほうがよいでしょうか
退会済みユーザー

退会済みユーザー

2021/06/29 03:24

あとはアクセスタイミングの管理が必要なケースとかもあるかも。 何にしても、仕様次第になるので必要に応じて使うだけです。
退会済みユーザー

退会済みユーザー

2021/06/29 03:28

アクセスタイミングもあるんですね、元のソースの動きもみて、アクセスタイミングについても注意してみようと思います。
guest

0

別に「覚える」ものじゃないですが。

Webではなくてローカルで実行するアプリケーションでは(制御に限らず)よくあることですが、
例えば制御のために長時間かかりっきりになるタスクがあったとして、その実行中はUIが一切効かなくなる、なんてのは不都合なので、UIとそれ以外のお仕事を別スレッドにするのは普通に行われることでしょう。

(マルチスレッドのプログラミングの解説ってそういうところから入るのが普通じゃないかなぁ?)

投稿2021/06/28 11:44

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/28 23:36 編集

コメントありがとうございます。 なるほど。私も調べてみたところ、制御系はマルチスレッドのプログラムが使われることが多いというのを見ました。 並列処理と並行処理(マルチスレッド) … 現在動いている計測アプリではマルチスレッドが使われていた 同期と非同期 … Webの業務系アプリでは非同期を使っている 非同期な並行処理 ~ そんなものがあるのかどうかよくわかっていない。(Webアプリでももしかしたらマルチスレッドを使う場合があるかもしれない) 並列処理と非同期の使い分けとか、 またそれらにはCPU主体とI/O主体という考えもあるみたいで、調べてはいますが、理解が難しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問