C#(13)-CAN通信(PCAN-BASIC API)

今回は、CAN通信を行えるアプリケーションを作成しようと思います。CANは、Controller Area Networkの略称で、ISOにて国際的に標準化されたシリアル通信プロトコルです。1986年ドイツの伝送メーカBOSCH社で自動車向けの通信プロトコルとしてCANを開発しました。今日では、CANの高い性能と信頼性が認められ、用途は多方面にわたっています。

CAN通信を行うために使用するハードウェアは、Peak System社製のPCAN-USBを使用しようと思います。Peak System社より、「PCAN-View」というアプリケーションも提供されているので、PCAN-USBと組み合わせて使用することで、CAN通信を行うこともできます。PCAN-Viewは下記サイトよりダウンロードできます。

https://www.peak-system.com/PCAN-USB.199.0.html?&L=1

下記は、実際にCAN通信を行っているようすです。

PCAN-ViewでもCAN通信はできますが、今回は、C#を使用して、アプリケーションを作成したいと思います。開発環境は、Visual Studioになります。

C#言語(12)-Windows10にMicrosoft .NET Framework 3.5をインストール

C#というより、今回は、Microsoft .NET Framework 3.5についてです。以前もWindows10にMicrosoft .NET Framework 3.5をインストールしようとしましたが、インストールできないという現象が発生しました。インターネットの情報などを参考に何とかその時はインストールできました。PCを変更したことにより、今回またMicrosoft .NET Framework 3.5が必要となったため、インストールを試みることにしました。

今回、Microchip製のCAN BUS Analyzerを実行しようとしたところ、Microsoft .NET Framework 3.5をインストールするように促されたため、インストールを開始しましたが、インストールに失敗しました。下記のような画面が表示されます。

エラーコードをキーにしてインターネット上で調べると、グループポリシーを変更して、再度試すような記事が多く出ていたので試してみました。早速グループポリシーの編集を行います。[ローカル コンピューター ポリシー]→[コンピューターの構成]→[管理用テンプレート]→[システム]の中の「オプション コンポーネントのインストールおよびコンポーネントの修復のための設定を変更する」を開きます。

「有効」にチェックを入れて、「Windows Server Update Service(WSUS)の代わりに、WIndows Update から修復コンテンツとオプションの機能を直接ダウンロードする」にもチェックを入れます。チェックを入れたらOKボタンを押して適用します。

C#言語(11)-OANDA APIを使ってドル円チャート作成

前回、OANDA APIをC#からWebリクエストして、ドル円の価格情報をタスクトレイのアイコン上に表示するアプリケーションを作成しました。内容は下記のリンクより参照できます。

C#言語(10)-OANDA APIを使ってドル円情報取得

ドル円の価格情報が取得できると、チャートも見てみたいなと思ってきます。今回は前回の作成したドル円の価格情報を取得する機能にチャートを表示する機能を追加したいと思います。

チャートの作成は、下記リンクのページで一度作成してみました。この時は、フォームの編集画面で、チャートの設定を概ね行いましたが、チャートの設定はコードで記載していきます

C#言語(9)-グラフの表示

機能としては、「ContextMenuStrip」に「元のサイズ」、「最小化」を追加します。「元のサイズ」を選択すると、5分足のチャートを10本を画面の右下の端に表示します。「最小化」を選択すると、5分足のチャートを10本を非表示します。

それでは、アプリケーションを作成していきます。以前、作成したドル円の価格情報を表示するアプリケーションを開きます。

2020年6月17日 | カテゴリー : C# | タグ : , , | 投稿者 : prog

C#言語(10)-OANDA APIを使ってドル円情報取得

OANDA APIのWebリクエストをPythonを使用して行いました。この時は、ドル円情報、ドル円オーダーの情報を取得しました。下記のリンク先で内容を公開しています。。

Python(9)-OANDA APIをWebリクエスト

今回は、C#でOANDA APIを使ってWebリクエストをしてみたいと思います。Pythonはとても使いやすくて便利ですが、Windowsと連携させるのは、やはりC#(Microsoft)のほうが使いやすいです。なぜWindwosと連携させたいかというと、企業のPCはWindowsを使っているところが多いと思います。就業中に堂々とドル円の価格を検索するのも難しいですが、ちょっと気になるときにちょこっとの操作でドル円の価格を確認したい方もいるかもしれません。ということで、ちょこっとの操作でドル円を確認できるアプリケーションを作ってみたいと思いました。

今回、作成するアプリケーションは下記のようなタスクトレイ常駐機能です。

2020年6月10日 | カテゴリー : C# | タグ : , , | 投稿者 : prog

C#言語(9)-グラフの表示

今回は、C#言語でグラフの表示をする機能を構築したいと思います。グラフの種類は散布図にしようと思います。それでは、構築していきたいと思います。まずは、新規プロジェクトを作成します。作成方法は下記のサイトを参考になると思います。

C#言語(1)-アプリケーションを作成してみる

次に、Chartをダイアログに配置します。ツールボックスの[データ]→[Chart]を選択してダイアログに配置します。

現在はグラフの種類が棒グラフになっているので、散布図に変更します。グラフのプロパティより[Series]を選択して、参照ボタンを押します。

Series コレクション エディタが表示されます。Chart Typeが「Column」に設定されているので、「Point」に変更します。変更したら、「OK」ボタンを押します。([データ]→[Name]に記載されているSeriesのNameは後ほど使用するので、覚えておいてください。)

これで、ダイアログの作成は完了したので、画面を表示した時の処理をコーディングしていきます。画面をダイアログのフレームをダブルクリックして、MainForm_Load関数を作成します。作成できたら下記のようにコーディングします。

private void MainForm_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 100; i++)
    {
        chart1.Series["Series1"].Points.AddXY(i, i);
    }
}

それでは、ビルドしてデバッグ実行してみます。傾き1の比例グラフが書けました。今度は、時間てきな要素を追加していきます。先ほど、MainForm_Load関数追加したコードは削除しておきます。次にダイアログを下記のように変更します。

「実行」ボタンをダブルクリックして、button1_Click関数を作成します。下記のようにコーディングします。

C#言語(8)-XMODEMプロトコルによるデータ受信

前回は、XMODEMプロトコルを使用してデータを送信するアプリケーションを作成しました。今回は、XMODEMプロトコルを使用してデータを受信するアプリケーションを作成しようと思います。XMODEMプロトコルを使用してデータを送信するアプリケーションは下記のページを参照してください。

C#言語(7)-XMODEMプロトコルによる送信

XMODEMプロトコルに関しては、下記のページが参考になると思います。

https://ja.wikipedia.org/wiki/XMODEM

下記のようなダイアログを作成しました。

wincs_006.PNG

XMODEMプロトコルを使用してデータを送信するアプリケーションとほぼ見た目は変わりません。

ダイアログの作成方法は、下記のページを参照してください。

C#言語(1)-アプリケーションを作成してみる

シリアル通信に関しては、下記のページを参照してください。

C#言語(2)-RS232C通信(シリアル通信)

ファイルの参照方法に関しては、下記のページを参照してください。

C#言語(6)-CSVファイルの読み込みと書き込み

参照ボタンを押すと、受信したデータを書き込むファイルを選択するダイアログを表示、受信したデータを書き込むファイルを選択した後に、実行ボタンを押すとファイルの受信を開始します。

それでは、ソースコードを見ていきます。

C#言語(7)-XMODEMプロトコルによるデータ送信

今回は、XMODEMプロトコルを使用してデータを送信するアプリケーションを作成しようと思います。転送効率はあまりよくありません。そのため、データ容量の大きいものを送信することには不向きですが。マイコンのFWのようにそこまで大きくないデータ容量であれば、十分使えます。マイコンのFWを書き込む目的でXMODEMプロトコルを使ってみようと思いました。

XMODEMプロトコルに関しては、下記のページが参考になると思います。

https://ja.wikipedia.org/wiki/XMODEM

下記のようなダイアログを作成しました。

ダイアログの作成方法は、下記のページを参照してください。

C#言語(1)-アプリケーションを作成してみる

シリアル通信に関しては、下記のページを参照してください。

C#言語(2)-RS232C通信(シリアル通信)

ファイルの参照方法に関しては、下記のページを参照してください。

C#言語(6)-CSVファイルの読み込みと書き込み

参照ボタンを押すと、送信したいファイルを選択するダイアログを表示、送信したいファイルを選択した後に、実行ボタンを押すとファイルの送信を開始します。今回、受信側はTeraTermを使用しています。また別の機会に受信側のアプリケーションも作成しようと考えています。

それでは、ソースコードを見ていきます。

C#言語(6)-CSVファイルの読み込みと書き込み

今回は、アプリケーション上でCSVファイルを開き、変数にCSVファイルデータを保存した後、変数に保存してあるCSVファイルデータを書き込むアプリケーションを作成しようと思います。下記のようなダイアログを作成しました。

ダイアログの作成方法は、下記を参照してください。

C#言語(1)-アプリケーションを作成してみる

参照ボタンを押すと、読み込みたいファイルを選択する画面が表示されます。

実行ボタンを押すと、書き込み先ファイルを選択、または新規作成できる画面が表示されます。

書き込み先ファイルを選択すると読み込んだデータを書き込み先ファイルに保存します。

単純な機能ですが、よく使う機能だと思います。読み込むファイルにパラメータを設定しておき利用したり、読み込んだファイル加工して新規にファイルを作成したりといろいろと応用できます。

それでは、ソースコードを見ていきます。

C#言語(5)-Arduinoシリアル通信

下記のページで、RS232通信(シリアル通信)を紹介させて頂きました。

C#言語(2)-RS232C通信(シリアル通信)

その相手側となる装置をArduinoを使用して作成しようと思います。使用したArduinoArduino LEONARDOです。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Arduino Leonardo マイクロコントローラ (ヘッダ)
価格:3117円(税込、送料別) (2019/2/17時点)


PC側に文字を送信したい場合のコードは下記のようになります。

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  Serial.setTimeout(3000); 
}
// the loop routine runs over and over again forever:
void loop() {
  Serial.println("OK");  
}

PC側から文字を受信したい場合のコードは下記のようになります。

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  Serial.setTimeout(3000);
}
// the loop routine runs over and over again forever:
void loop() {
  String strRev = "";
  if(Serial.available() > 0){
    strRev = Serial.readStringUntil('¥r');
    if(strRev == "Send"){
      digitalWrite(13, HIGH);
    }
  }
}

C#言語(4)-TCP通信(リスナー編)

今回は、リスナー側のTCP通信アプリケーションの作成です。作成するダイアログは下記のようになります。あまり、クライアント側のTCP通信アプリケーションと違いはありませんね・・・。

ソースコードは以下の通りです。※クライアントからの接続待ち、接続、データの送受信の部分を抜粋です。

続きを読む