2台のPCを使用しバイナリファイルをRS232Cを使用し1台目のPCは送信専用、2台目のPCは受信専用で、送信側のPCから出したデータを受信側PCでデータの内容を判断し集計するプログラムを作ろうとしています。

送信側のPCでは、"AAB9AAC2AACC01D8AAE2・・・”といった内容のバイナリファイルの内容を1バイトずつ読み込み、それをMsCommを用いてバイナリモードで送信させて、EOFになるまで永遠とそれを繰り返します。

問題は受信側で、たとえば上記のデータの中の"AAB9"ならばカウントを1つ上げる、"AACC01D8"ならばカウントを1つ下げ、それを表示するといったような処理をリアルタイムで行いたいのですが、どうしてもデータの取りこぼしが発生します。

また、データの意味合いとしては、必ず"AA"という1バイトのデータから始まり、それに1バイトから5バイトまでのデータが可変長で付いてきて次の"AA"までが1つの意味となります。

通信パラメータは9600、8ビット、ストップビット1、パリティなしで、その他の制御線は一切使用しないという条件です(要するにRxD、GND線のみの最低限の条件)

受信側のバッファは1024バイトで、MSComm1.RThreshold = 1でOnCommを発生させています。また、送信側のファイルの大きさは1kバイトほどです

正直なところ、このようなことが可能なのかどうかもわからない状況なのですが、現状ではデータを数バイト取りこぼしているだけのようなのでできないことはないのではないか?と考えています。

どなたか、参考文献、ホームページ、プログラム、考え方等を何でもかまいませんん!ぜひ、ご教授願います!!また、現在はVBにて開発中ですが、最悪、言語は問いません。よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

たしか.1秒に1回100msほど.タイマー関連の処理に取られて.結構速度を落とさないと.取りこぼしが発生するようです。



私の関係した対応では.
バッファを巨大にする
転送速度を4800に落とす
受信ソフトの実行速度をあげるため.受信中は他の仕事をさせない
の3店でした。
    • good
    • 1
この回答へのお礼

お礼が遅れて申し訳ございませんでした。
ここ2,3日たてこんでたもので・・・

具体的な数値を頂き、非常に参考になります。

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

お礼日時:2001/12/21 22:21

過去質問を検索して下さい。

キーワードは「MSComm」で十分でしょう。
参考までに該当しそうな過去質問を参考URLにつけておきます。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=135370
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

教えていただいたホームページを拝見させていただきました。
早速ポーリングによる方法を試してみます。

お礼日時:2001/12/18 14:53

バイナリデータの送受信ですと、Xon/Xoffを使ったフロー制御ができないので、基本的にハードウェアハンドシェークをするしかありませんが、制御線が結線されていないので、これもだめ。

ということなら、データ受信中には何の制御もしてはだめで、受信に専念してバッファに貯める。貯めたあとで、処理をおこなうしかないと思います。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

素人考えで非常に申し訳ないのですが、

>データ受信中には何の制御もしてはだめで、受信に専念してバッファに貯める。>貯めたあとで、処理をおこなうしかないと・・・

と、ありますが、たとえばハイパーターミナル等は、どのようにしているのでしょうか?
当然、ハイパーターミナルでは複雑な処理等は行っていないとは思うのですが、現状では、単に受けたデータを表示させるだけでも、データが落ちてしまっています。サンプルソースや、ホームページ等あれば、お教えください。

お礼日時:2001/12/18 12:55

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFOREX.COM JAPANでpip the pipをIBとして、キ

FOREX.COM JAPANでpip the pipをIBとして、キャッシュバックサービスを受けることはできるのでしょうか?
pip the pipのリンクから、FOREX.COMへアクセスし、日本語を選ぶと、日本のFOREX.COMのサイトになっています。このまま開設するとFOREX.COM JAPANの口座になるのですが、キャッシュバックを受けるためには、FOREX.COM UKの口座を英語で開設しないといけないのでしょうか?
どなたかご存知であればよろしくお願いいたします。

Aベストアンサー

FOREX.com JAPANに直接質問しました。
FOREX.com JAPANでは不可の様です。
よって、UKかUSでの開設が条件となる様です。

下記が、FOREX.com JAPANの回答です。

お問合わせの件に関し、確認させて頂いた所、FOREX.comの海外拠点での口座開設となります。弊社FOREX.com Japanは米国ゲインキャピタル社傘下の日本法人として運営しており、海外拠点との間で、現在サービス内容が異なるため、お客様ご自身より直接お問合せをしていただく形になります。尚、海外のFOREX.comで口座開設をされる場合には、口座情報等を共有していない為、弊社のサービスはご利用いただくことができませんのでご了承くださいますようお願い致します。

QMscomm を使用してバイナリでデータを受信したい

Mscommを使用して、垂れ流しデーターをバイナリで受信(受信データ長さは変化する)するとき、このデーターをどうやって、配列に格納していけば良いのでしょうか?

(垂れ流しデータ ⇒ < STX >nnn-nnn・・・・< ETX >< CHK >)

また、配列に格納したデーターを文字に置き換えるにはどうすれば良いでしょうか?

まず考え方として以下の流れでよいでしょうか?

バイナリデータをバリアント型の変数に入れる。(受信する)
     ↓
このデータを1バイトごとにバイト型変数の配列に入れていく。
     ↓
格納した配列の中の制御文字を取り除く。( ST、EX )
     ↓
配列に入っているデータを文字に変換する。
     ↓
変換した文字をつなぐ。

受信するデーターが制御文字を含んでいる為、テキストで受信するとおかしな動作をすることがあるので(150バイト程度のデーターを、バッファから変数に移すときに、0.5~2.5秒もかかってしまうし、文字化けも時々起こす。)バイナリで受信してその後文字に変換したいのですが・・・。

宜しくお願い致します。

Mscommを使用して、垂れ流しデーターをバイナリで受信(受信データ長さは変化する)するとき、このデーターをどうやって、配列に格納していけば良いのでしょうか?

(垂れ流しデータ ⇒ < STX >nnn-nnn・・・・< ETX >< CHK >)

また、配列に格納したデーターを文字に置き換えるにはどうすれば良いでしょうか?

まず考え方として以下の流れでよいでしょうか?

バイナリデータをバリアント型の変数に入れる。(受信する)
     ↓
このデータを1バイトごとにバイト型変数の配列に入れていく。
   ...続きを読む

Aベストアンサー

(記憶が薄いので、正確ではありません。)

Dim bytAry() as byte
として、それに直接受信してあげると必要な領域を勝手にVB側で用意してくれると思いました。

それを
Dim strWork as String
(1)strWork = strConv(bytAry,vbUnicode)
(2)strWork = strConv(bytAry,vbFormUnicode)
どっちかで変換だったと思うけど、それでバイナリデータを文字列化します。

そのあと
VB6ならReplace関数で制御文字だけを置き換えて使用すると便利かも?

最初に述べたように、かなり記憶があいまいです。環境がないので性格には答えられません。m(__)m

Q[金融用語]"Forex derivative trade"の訳語について

"Forex derivative trade" "Forex derivative loss" "Forex derivative contract" などの訳語がわかりません。
derivativeに「金融派生商品」を充てそのまま訳すと「外国為替金融派生商品取引」ですが、これで意味が通じるのでしょうか?
ご存知の方、よろしくお願いいたします。

Aベストアンサー

聞き手の人が derivativeが指している派生商品が、何から何が派生したのかがわかっていれば、その訳で通じます。
わかっていない人は、日本語で考えるので間違ってつたわる可能性があります。

金融派生商品とは、なにか元(原資産といいます)になるものがあり、そこから派生した、もしくは金融工学で派生させた、金融商品です。

たとえば、

原資産 : 派生商品
現物株式 : 株式オプション(日本はない)、→さらに派生したワラント
日経平均株価指数: 日経225先物、日経225オプション
商品市場取引: 商品先物、→さらに派生した商品オプション

のようなものです。

Forex は、日本ではFXと訳されていますが、為替取引です。

Forex derivative trade
為替取引から派生した金融商品のトレードです。
たとえば、為替オプション(これも日本にはない)、一般の為替取引を直物為替としてそれに対する先物為替、それら2つを組み合わせたスワップ取引など。

Forex derivative loss
はそれら派生商品のトレードによるロス。

Forex derivative contract
ですが、原資産のうち現物(株式とか、商品取引の商品(大豆とか原油)とか、為替を実際に取引して手元にその資産を手に入れた場合)は実体があります。
これら現物は実体があるため、数える単位があります。
たとえば株は○株とか、原油はバレル、為替は貨幣(円とか)など。

しかし金融派生商品は、金融工学で理論上派生させた取引であるため、実体がなく呼び方に悩むところです。単位も、実際に倉庫に商品や現物が入るわけではないため、膨大な数量が取引されるため、現実的ではない単位がついたりします。
しかしどの金融派生商品も、取引という行為と、売り買いしたお互いの約束事(取引内容)が存在するという意味では、どの派生商品にも存在します。これらをコントラクト(契約)と呼んでいます。
ですので、金融派生商品の取引のことをコントラクトと読んだり、実際売買した取引内容や取引が成立したこと、または取引単位のことをコントラクトと呼んだりもします。これは文脈により、訳が変わりますが、指しているのは取引・決められた単位での取引、取引内容のことです。

日本では、これを売買契約書という実体があるよう見た「枚」という訳があてられています。
たとえば、原油先物の取引が成立したとき「先物買い10枚建て(原油先物の買いポジション10単位が成立)」といいます。

残念ながら日本では一般の人がやるFXでは、為替の先物も先渡取引も、オプションも、どれもほとんどトレードできません(私がもっているFXのシステムはヨーロッパ製なのでできますが、これはごく一部でしょう)

聞き手の人が derivativeが指している派生商品が、何から何が派生したのかがわかっていれば、その訳で通じます。
わかっていない人は、日本語で考えるので間違ってつたわる可能性があります。

金融派生商品とは、なにか元(原資産といいます)になるものがあり、そこから派生した、もしくは金融工学で派生させた、金融商品です。

たとえば、

原資産 : 派生商品
現物株式 : 株式オプション(日本はない)、→さらに派生したワラント
日経平均株価指数: 日経225先物、日経225オプション
商品市...続きを読む

QMSCommを用いたRS-232-Cデータ転送

Visual Basic ver.6を用いてRS-232-Cデータ転送のプログラムを書いています。
転送には,MSComm controlを用いています。
コンピューター側から命令コードを測定器側に送信すると(例えば,MSComm1.OutPut = "F,3,300," & Chr(13)のように),測定器側からは次のようなテキストデータの転送が指定された回数だけ起こります:

@C/R
数値データC/R
数値データC/R
・・・・
・・・・
(指定回数繰り返す)

そこで,質問ですが,このデータをMSComm1.Inputを介してきちんと取得する方法をお教えください。私がよく理解できいない部分は,「どのような形でbufferにデータが落ちているのか?」という部分と「繰り返し処理をどう記述するのか?」という部分です。多分後者は配列型変数を用いて「指定回数」だけ繰り返すことになると思いますが・・・・。
なお,データ転送の制御フォーマットはデータのみの転送で,STXもETXも使用していません。

Aベストアンサー

こんばんは。

これで、試してみてください。
'<<送信側>>
Private Sub Command1_Click()
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.Output = Text1.Text + Chr(13)
MSComm1.PortOpen = False
End Sub

'<<受信側>>
'起動時にポートを開いておきます。
'Timer1を貼り付けてIntervalを100程度に。
Private Sub Timer1_Timer()
Dim strBuf As String
strBuf = MSComm1.Input
If Len(strBuf) <> 0 Then
List1.AddItem strBuf
End If
End Sub

もし、受信データ長が同じ長さなら、OnCommイベントで
データ取得した方がいいのですが・・・

Qこの文脈のbinaryの意味は?

品質関係の文書化についての中で、
Ensure standard work is documented, binary, visual, and being followed.

となっていますが、binaryだけがどういう意味で使われているか
わかりません。

よろしくお願いします。

Aベストアンサー

そういった実務経験のない素人の解釈なので、間違っているかもしれませんが、binary はいわゆるデジタル・データのことだと取れば、「standard work は文書化されていなければならない。その形態はデジタル・データとして、視認可能な状態で、必要な時にそれを検索して必要な情報が得られるような状態にしておかなければならない」 といった意味のような気がしました。「視認可能な状態」 とは、たとえば暗号化されていて、すぐには文書として読み取ることが出来ない状態ではなくて、すぐにもモニターで見ることの出来る状態、という意味かもしれないと思いました。その文だけでは確かなことは言えませんが、そんな感じのように思いました。

QVisual Basic 2005か2008で、バイナリファイルのデータの読み方、書き換え方

下記動作をVisual Basic 2005か2008で実現したいのですが
どのようにしたらいいのか分からないので、
もしわかる人がおられましたらお教えください。
(できればソースを記述してほしいです)

【実現したい処理】
  アドレス0x00000から0x50000までのバイナリファイルがあるとします。
  そのバイナリのファイルを読み込んで、
  アドレス0x22222の値が0xFFなら
  アドレス0x22222の値を0x00に書き換え、ファイルを保存する
  という処理。

Aベストアンサー

FileStreamとBinaryReader,BinaryWriterを使います

' 入力用のストリームを準備
Dim fs as New FileStream( "ファイルパス", FileMode.Open )
Dim binRD as BinaryReader
Dim binWR as BinaryWriter
' 読み込み用の配列を準備
Dim arData() as Byte
' 大きさを決定
Redim arData( fs.Length - 1 )
binRD = new BinaryReader( fs )
' データの読込み
binRD.Read( arData, 0, arData.Length )
binRD.Close
fs.Close

' データの判定および更新
if arData( &H2222 ) = 255 then
  arData( &h2222 ) = 0
end if

' 書き込み用のストリームを準備
fs = new FileStream("ファイルパス", FileMode.Create )
binWR = new BinaryWriter( fs )
binWR.Write( arData, 0, arData.Length )
binWR.Close
fs.Close
といった具合でしょう

FileStreamとBinaryReader,BinaryWriterを使います

' 入力用のストリームを準備
Dim fs as New FileStream( "ファイルパス", FileMode.Open )
Dim binRD as BinaryReader
Dim binWR as BinaryWriter
' 読み込み用の配列を準備
Dim arData() as Byte
' 大きさを決定
Redim arData( fs.Length - 1 )
binRD = new BinaryReader( fs )
' データの読込み
binRD.Read( arData, 0, arData.Length )
binRD.Close
fs.Close

' データの判定および更新
if arData( &H2222 ) = 255 then
  arData( &h222...続きを読む

QForex Tester 2のフリーインディケータ

先日Forex Tester 2を購入し、今設定を行っています。
Forex Tester 2にマルチタイム移動平均線を導入しようとしたところで苦戦しています。
MT4でいうところの、「23MTF_MovingAverageIGOR.mq4」と同じものを導入したいのです。
できれば無料のものがうれしいです。
検索しても全然ヒットしません。
どこかにありますでしょうか。どなたかご存知の方がいらっしゃったら何卒ご教示ください。
どうぞよろしくお願いいたします。

Aベストアンサー

トレーダーショップGにきくがよろし
(よそう:たぶん、ない)

Qファイル名の作成について 写真のように複写するマクロを作成しています。 その中で平成AA年度のAAに

ファイル名の作成について

写真のように複写するマクロを作成しています。
その中で平成AA年度のAAに数字を代入し毎年更新の時に1を足していくように考えています。
AAに代入する方法を教えてください。


平成29年度
平成30年度
平成31年度
になるようにです。

よろしくお願いします。

Aベストアンサー

こんなふうにしてみたらどうでしょうか。
冗長なところがあるかもしれません。

'//
Sub SavingFileName()
Dim mPath As String
Dim WSH As Object
Dim FileName As String
Dim FName As String
Dim BaseName As String
Dim nums As Variant

Set WSH = CreateObject("Wscript.Shell")
mPath = WSH.SpecialFolders("Desktop") & "\"
nums = "*"
BaseName = "平成" & nums & "年度.xlsm"

FName = Dir(mPath & BaseName)
 If FName <> "" Then
 nums = Mid(FName, InStr(1, FName, "平成") + 2, 2)
 Do
   nums = nums + 1
   FileName = Replace(BaseName, "*", CStr(nums))
 Loop Until Dir(mPath & FileName) = ""
 Else
  nums = Format$(Date, "EE")
  FileName = Replace(BaseName, "*", nums)  '前ファイルがない場合
 End If
 ActiveWorkbook.SaveAs mPath & FileName
End Sub

こんなふうにしてみたらどうでしょうか。
冗長なところがあるかもしれません。

'//
Sub SavingFileName()
Dim mPath As String
Dim WSH As Object
Dim FileName As String
Dim FName As String
Dim BaseName As String
Dim nums As Variant

Set WSH = CreateObject("Wscript.Shell")
mPath = WSH.SpecialFolders("Desktop") & "\"
nums = "*"
BaseName = "平成" & nums & "年度.xlsm"

FName = Dir(mPath & BaseName)
 If FName <> "" Then
 nums = Mid(FName, InStr(1, FName, "平成") + 2, 2)
 Do
   nu...続きを読む

Q法律英語:spread or binary bet

法律英語で「spread bet」「binary bet」というのがあるようです。確かに検索にはかかってくるのですが、意味がわかりません。文中では「, spread or binary bet, 」と挿入的に使われていました。
どのようなものか教えて頂けませんか?

Aベストアンサー

No.1です。
法曹ではありませんが、法律の仕事も金融の仕事も経験しました。
とはいえ、実務的な(文芸でない)翻訳に要する知識は幅広いので、経験分野の知識だけでは追いつきません。
結局はそのつど調査するしかないのが実情だと思います。

法律用語のリファレンスとしては Black の辞書と田中英夫先生の英米法辞典を手元においている人が多いようです。
米国の契約物を訳す際は「UCCコンメンタリーズ」が役に立つことがあります。
それ以外のものは、実際に使った感想として、あまり役に立たない気がします。
図書館で分厚い専門書や専門辞典をひっくり返して調査することがありますが、たいてい徒労に終わります。

正直なところ、最高に役立っているのは Google です。
特に、法律文書の背景となっている取引について知ろうとすると、紙の本や雑誌は情報が古かったり密度が薄かったり網羅的でなかったりしてあまり役に立ちません。
調べ方のコツですが、英語のフレーズを引用符 " " でくくって検索すると、欲しい情報がヒットすることが多いようです。
訳語は辞書に載っているが意味がわからないというときは、英文のサイトを含めて片っ端から読みあさります。
意味はわかるけど訳語がしっくりこないというときは、日本語サイトに限定して検索しています。
フレーズのまとまりを変えて検索するなど、かなり執念深くやっています。
これについては慣れとカンというしかありません。

ただ、法律文書を訳すには、法学の基本的な学習は必要だと思います。これはネットの情報では無理です。紙の本を読むのにそれなりの時間を割くことになるでしょう。法律自体の知識がないと、情報を検索するカンも働かないのではないでしょうか。

No.1です。
法曹ではありませんが、法律の仕事も金融の仕事も経験しました。
とはいえ、実務的な(文芸でない)翻訳に要する知識は幅広いので、経験分野の知識だけでは追いつきません。
結局はそのつど調査するしかないのが実情だと思います。

法律用語のリファレンスとしては Black の辞書と田中英夫先生の英米法辞典を手元においている人が多いようです。
米国の契約物を訳す際は「UCCコンメンタリーズ」が役に立つことがあります。
それ以外のものは、実際に使った感想として、あまり役に立たない気がします。...続きを読む

QMScommのOncommイベントが発生しない

ACCESSでMScommオブジェクトを使用し、ある機器からデータの読み取りを行いたいのですが、肝心のOncommイベントが発生いたしません。
なにか、ライブラリの参照設定が必要なのですか?
それとも、自分の設定間違い(不足)なのでしょうか?
前にVBでMScommを使用したことがありますが、なにも特別なことはしなかったような・・・(MSCOMM32.OCXを使用しています)
補足が必要であれば、追記いたします。

Aベストアンサー

ケーブル確認
>ある機器
は、特殊なケーブル接続では?
クロス/ストレートを間違ってないか?
使用しているケーブルが断線していないか?

>なにも特別なことはしなかったような
 プロパティは、あっていますか?

Accessだけで、NGとは考えにくいです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報