FC2ブログ
*admin*entry*file*plugin| 文字サイズ  

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



新しい環境で使用するソフトを自作しようといきがって、
カタカタプログラムをコーディングしてましたが、なんか順調。
シリアル通信をさせるのが主な目的でインターフェイスは
RS232Cです。こんなレガシーデバイス今どきあれなのですが、
如何せんこれしか通信手段がない物がありまして。

ずばりNC機とかとのやりとりをさせるわけで、今現在でも
一応は通信手段を確立できてます。が、複数のソフトを
介してやっと成り立っている状態なので非常に不便。
まとめて処理できる物があればいいなぁと思ってもそんな
都合のいい物は当然ない。じゃぁ作ろうというお話でした。

ちょっと困るのはUSBからの変換ができないということ。
いや、できないというかたぶんまともに通信が確立できない。
この2つはどうも互換性に問題があるらしく動く保証がない。
かと言ってRS232Cのボード乗せるわけにもいかず、結論として
LANからの変換で対応させることにしました。
これは試したことがないのであれですが、今のところ正常に
動作しているような気分。お願いだから問題は起きないで。

LANを使うもう一つの理由は配線ですね。RS232Cの場合たしか
延ばせる距離が30mぐらいしかなかったはず。
使用するケーブル長さはこれより長くなりそうなので途中まで
LANを這わせようというお話になったわけです。

ちょっと詰まることはあっても大した問題でないことが
ほとんどで、いまのところ致命的な問題は発生していません。

どうしようか悩みそうなところ

・複数フォームの値のやり取り
・ポートの開き方及びデータ送受信
・目的のコードに変換

とりあえずデータの受け渡しから
①Form1.hの頭でForm2.hをインクルード

#pragma once

#include "Form2.h"//Form2


②Form2.hでイベントを定義

private:
///
/// 必要なデザイナ変数です。
///

System::ComponentModel::Container ^components;
public:
System::Void Form2_Load(System::Object^ sender, System::EventArgs^ e);//このへんに書く


③Form2.cppでゴニョゴニョ

#include "StdAfx.h"
#include "Form1.h"
#include "Form2.h" //cppに両方インクルード

using namespace test;

HANDLE hCom;

String^ Setting(){//ポートの有無検索。とりあえずCOM5まで
int i;
String ^ CountCom = "";

array^ addCOMData = {
"COM1","COM2","COM3","COM4","COM5"
};

for (i = 0 ; i < addCOMData->Length ; i++){
hCom = CreateFile(
addCOMData[i],
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);

if ( hCom != INVALID_HANDLE_VALUE ) {
CountCom += "1";
CloseHandle( hCom );
}
else {
CountCom += "0";
}

}
return CountCom;
}

System::Void SerialConfig::SerialConfig_Load(System::Object^ sender, System::EventArgs^ e) {
//なんか書く
}


まず最初に考えるのはForm1とForm2の値の引き渡しです。
Form1からForm2を開き、Form2の値をFoem1に引き渡すことが
必要になります。つまり相互に受け渡ししなくてはなりません。

Form1からForm2を開く場合「Form1.h」に「#include "Form2.h"」で
ヘッダーを読み込み次いでインスタンスを生成して呼び出します。
これを「Form2.h」でも同じことをしたいわけです。
一般的にForm2に「#include "Form1.h"」としそうになりますが、
互いが互いを参照しあっって無限回廊に彷徨い込みます。
当然コンパイルは通らない。

そこでForm2はヘッダーではなくcppにその記述を持っていきます。
それが上記のソース

Form1とForm2両方のヘッダーを読み込みゴニョゴニョしてます。
「Form2.h」で一度定義しておいて同じものを「Form2.cpp」にも
書きます、このcppで処理させればおk。
Form1への受け渡しはポインタを使ってますが説明は割愛。
これでこの問題は解決。


続いてポートの処理について
ポートを開くには「CreateFile」をつかっています。
おそらくこれが一般的な方法なのかな?詳しくは知らないけど。


HANDLE hCom;

hCom = CreateFile(
"COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);


これでポート開放が可能なのですが、最初の"COM1"これがデフォルトの
設定だどエラーが出てコンパイルが通りません。
理由は文字コード?が問題らしくプロジェクトのプロパティの
文字セットで「マルチバイトを使用する」を選択しておきます。

プロパティ


これで無事コンパイルが通るようになりました。
ポートが問題なく開けたので早速送受信のテストをしてみました。
・・・・うむ、ちゃんと送信できてるみたい。
要の部分がほぼできちゃったのであとは適当にデータ変換して微調整。
変数の型が違うとか文句言われることもありますが、まぁ問題ないでしょ。

あ、でもひとつ気になったことがありました。シリアル通信で
制御コードも送りたいわけで、その時「0x11」とかをテキストボックス
にいれて送信します。その方法についてです。

これ普通に「text == "0x11"」とかいれてて上手く行かなかったんですよ。
同じ値のはずなのに何故かif分素通りしやがりまして。
なので、フォーマットを指定してif文に通しました。

一応テキストボックスには「\x11」と入れると制御コードが送れます。
とりあえず0x01~0x1Fまで送れるようにしてます。
普通に変数「i」を変換して代入させようとしたのですが、これもまた
思うとおりに代入されない(´・ω・`)。なので配列作ってその中身を
「i」で指定させることにしました。


array^ addbufData = {
"\x1","\x2","\x3","\x4","\x5","\x6","\x7","\x8","\x9","\xa","\xb","\xc","\xd","\xe","\xf","\x10"
,"\x11","\x12","\x13","\x14","\x15","\x16","\x17","\x18","\x19","\x1b","\x1c","\x1d","\x1e","\x1f"
};//addbufData [i]で制御コード指定



0x01と0x1を同一視させる必要もあるのですが、面倒なので今は放置。
今のままだとたぶん0x01みたいな0が付属しているのは認識しない、と思う。
実際のところ0x11(DC1)~0x14(DC4)の4つで十分だけどね、たぶん。
あと改行コードとかがありますが、ケースバイケースで。

これが必要な理由は頭とおしりにコード挟む必要があったりするから。
「今から送るよ」とか「送り終わったよ」っていう合図ね。
今扱ってるシリアル通信は基本垂れ流しだし\(^o^)/

それと受信に関してなのですがこれは多少厄介かもしれない。
受信自体は正常にできているようなのですが、どうも中身がおかしい。
これもしかして文字コードが特殊なんじゃね?って思って調べてみると
案の定なんか変なコードになってるし。えぇ・・・これ全部変換するの?
送信時は特に弄らなくても相手はちゃんと受信できてたんだけどなぁ。


あ、そういえば忘れていたことが。今実験しているのはNCとPCの中間に
いる機器でこれで記憶してNC機に更に出力させる形になってます。
こんなの

PC <--> 携帯記憶機器 <--> NC機

つまり・・・今処理している入出力信号が逆転してしまうわけですよ。
自作ソフトからの出力が実際の入力に、逆に入力は出力になるわけで。
小さい問題でも矢継ぎ早に出てこられると結構鬱陶しい。

プログラミングも久方ぶりだからこの程度で手をこまねいてるよ。
やってることはすんごい簡単なはずなんだけど・・・


超過密スケジュール

この先1ヶ月ほどの予定があり得ないことになってます、最近気づいた。
ここまで変なスケジュールになったの今までで初めてかもしれない。
あまりに多いからダブルブッキングさせちゃったよ、どうするよ。


この記事へコメントする















Mithril

Author:Mithril


趣味は主に雑学です。
どうでもいいこと書いてます。

Blenderやプログラムに
ついても書いたりするかも。
私のPC環境はこちら

メールはこちらから↓
mithrilp★yahoo.co.jp
(★を@に変えて下さい)

10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。