Technology
C系プログラミング言語(C/C++/C#/Visual C++)
(Cけいプログラミングげんご)
C言語
C系プログラミング言語とは、C言語を起点として発展した、またはC言語に近い記法を持つプログラミング言語や開発技術の総称です。
C、C++、C#、Visual C++は、同じ言語の新旧版ではありません。Cはマイコンや組込み機器などハードウェアに近い処理、C++は複雑なネイティブソフトウェア、C#は主に.NET上で動作するWindowsアプリケーションの開発に利用されます。Visual C++はプログラミング言語ではなく、Microsoftが提供するC/C++向けのコンパイラ、ライブラリ、デバッガなどを含む開発ツール群です。
C言語
C言語は、メモリ配置やビット単位の処理、周辺回路のレジスタ操作など、ハードウェアに近い制御を記述しやすいプログラミング言語です。処理時間やメモリ使用量を管理しやすいため、マイコン、計測器、通信機器などの組込みソフトウェアで広く利用されています。
ハカルプラスでは、組込み機器用ソフトウェアの開発言語として主にC言語を使用しています。センサやA/D変換器からの計測値取得、演算処理、接点・アナログ出力、通信制御、操作入力、表示更新、異常監視、データ保存などを実装します。
組込み開発では、単に処理結果が正しいだけでなく、決められた周期内に処理が完了すること、メモリ不足や異常値によって停止しないこと、電源断や通信異常から復帰できることが重要です。
C++
C++は、C言語との互換性を意識しながら、クラス、継承、テンプレートなどの機能を備えたプログラミング言語です。通信、画面、演算、機器制御などを機能単位に分け、共通処理を再利用しやすい構造を構築できます。
一方、機能を抽象化しすぎると、処理時間やメモリ使用量を把握しにくくなる場合があります。組込み用途では、動的メモリの使用、例外処理、ライブラリの規模、起動時間などを確認し、対象機器の性能やリアルタイム性に合わせて使用範囲を決めます。
ハカルプラスでは、組込み開発でC言語を使用するケースが多く、C++の採用は限定的ですが、対象機器、既存資産、使用するソフトウェア基盤などに応じて選定します。
C#
C#は、Microsoftが開発した.NET向けのプログラミング言語です。Windows上で動作する監視画面、設定ツール、実績管理、帳票出力、データベース連携、通信アプリケーションなどの開発に適しています。
画面部品、ファイル操作、データベース接続、ネットワーク通信などの機能を利用しやすく、FAパソコン上で動作する業務・設備支援ソフトウェアを比較的構造化して開発できます。
ハカルプラスでは、パソコンを使用した一部のソフトウェア開発でC#を採用しています。PLCや計量コントローラから取得した実績の保存、設定値の管理、帳票作成、上位システムとのデータ連携などに使用することがあります。
ただし、Windowsや.NETのバージョン、接続ドライバー、外部ライブラリなどに依存するため、FAパソコン更新時には互換性を確認する必要があります。
Visual C++
Visual C++は、Microsoftの統合開発環境であるVisual Studioに含まれる、C/C++向けの開発ツール群です。一般にMicrosoft Visual C++、またはMSVCと呼ばれるコンパイラや標準ライブラリ、デバッガなどを使用してWindows向けソフトウェアを開発します。
高速な演算処理、機器との通信、既存のC/C++ライブラリの利用、Windows APIを使用した処理などに適しています。古い設備システムでは、特定バージョンのVisual C++、MFC、ActiveX、専用通信ライブラリなどに依存している場合があります。
既設ソフトウェアを更新する際は、ソースコードだけでなく、コンパイラのバージョン、ビルド設定、32ビット・64ビット環境、ランタイム、外部ライブラリ、接続機器用ドライバーまで確認します。
計量・制御システムでの使い分け
一つの計量・制御システムでも、装置内のすべてを同じ言語で開発するとは限りません。例えば、組込み機器内部の周期処理をC言語、FAパソコン上の実績管理をC#、既存の通信・演算ソフトウェアをVisual C++、帳票や補助ツールをVisual Basic .NETで構築することがあります。
言語選定では、次の条件を整理します。
- マイコン、CPU、FAパソコンなどの実行環境
- 必要な応答速度と処理周期
- 使用できるメモリやストレージ容量
- PLC、計測器、センサなどとの通信方式
- 画面、帳票、データベースの有無
- 既存ソースコードやライブラリの活用可否
- 将来のOS・端末更新と保守体制
制御周期が短く、ハードウェアを直接扱う部分ではC言語などのネイティブコードが適し、画面やデータベース連携を中心とする部分ではC#などが適する場合があります。言語単体の優劣ではなく、システム内で担う役割によって使い分けます。
制御ソフトウェアで重視する設計
計量・制御システムでは、正常時の処理だけでなく、異常値、通信断、電源断、機器応答の遅延などを想定した設計が必要です。
例えば通信処理では、応答を無期限に待たずタイムアウトを設け、再送回数を超えた場合は異常として扱います。受信データについても、範囲、データ長、チェックコード、機器状態などを確認し、異常な値をそのまま制御へ使用しないようにします。
組込み機器では、一定周期で実行する処理、割込みで行う処理、通信やデータ保存など時間を要する処理を分け、制御周期を乱さない構成にします。パソコン用ソフトウェアでは、画面処理と通信・保存処理を分離し、通信待ちによって操作画面が停止しないように設計します。
既設ソフトウェアを更新する際の注意点
既設ソフトウェアを改修する場合、使用言語が分かるだけでは十分ではありません。同じCやC++でも、開発環境、コンパイラ、ライブラリ、OS、CPUによってビルド方法や動作が異なります。
更新前には、次の情報を確認します。
- ソースコードと実際に稼働しているプログラムの対応
- 開発環境、コンパイラ、ビルド条件
- 外部ライブラリとライセンス
- 通信仕様と接続機器
- 設定ファイル、データベース、帳票の形式
- 32ビット版・64ビット版の違い
- 異常時動作と復旧手順
ソースコードが残っていても、必要なライブラリや開発環境が失われていると、同じプログラムを再構築できない場合があります。そのため、実行ファイルだけでなく、ソースコード、設計資料、ビルド手順、使用部品のバージョンを一体で管理することが重要です。
ハカルプラスの対応範囲
ハカルプラスでは、要求仕様、使用機器、OS、制御対象、既設システムの構成に応じて、プログラミング言語や開発環境を選定します。
ソフトウェア単体ではなく、計測回路、組込み基板、制御盤、PLC、計量コントローラ、タッチパネル、FAパソコン、通信、データベースまで含め、機器間の役割分担や異常時動作を整理します。
既存ソフトウェアの改修では、ソースコード、開発環境、通信仕様、接続機器、データ形式などを調査し、現行環境を維持するか、新しい環境へ移行するかを検討します。
よくある質問
Q. ソースコードがあれば古いソフトウェアを再構築できますか?
A. ソースコードだけでは再構築できない場合があります。使用していたコンパイラ、外部ライブラリ、ビルド設定、機器用ドライバー、ライセンスなども必要です。
Q. 古いVisual C++のソフトウェアを新しいWindowsへ移行できますか?
A. 対象OS、コンパイラ、MFCや外部ライブラリ、32ビット・64ビット環境、接続機器のドライバーなどを確認して判断します。ソース修正やライブラリの置換が必要になる場合があります。
Q. C言語で開発された組込みソフトウェアをC#へ置き換えられますか?
A. 実行環境や役割が異なるため、単純な置き換えはできません。マイコン上の制御はC言語のまま残し、画面やデータ管理部分だけをC#で更新するなど、機能を分けて検討します。
Q. 制御ソフトウェアの応答が遅い場合、言語を変更すれば改善しますか?
A. 必ずしも言語だけが原因とは限りません。通信周期、データベース処理、画面更新、ログ保存、機器の応答時間、プログラム構造などを調査して原因を切り分けます。
Q. 異なる言語で開発された機器やソフトウェアを連携できますか?
A. 通信プロトコル、データ形式、タイミング、異常時処理が合っていれば連携できます。言語の違いよりも、機器間のインターフェース仕様を明確にすることが重要です。