• ベストアンサー

ステップの強制実行

↓の例ですが、データを送信したとき、送信先デバイスがそのまま制御を保持してしまい、 送信元で何も制御できないときに、無視して次行を実行するVB6の関数,方法はございますか? コメントアウトでは意味がございません。 Dim Data() As String Data(1) = "123" MSComm1.Output = Data '←ここでの処理を無視して、次行を実行をしたい。 Data(2) = MSComm1.Input ・ ・

noname#187796
noname#187796

質問者が選んだベストアンサー

  • ベストアンサー
  • t-aka
  • ベストアンサー率36% (114/314)
回答No.1

通信相手の状態を取得する必要があります。 制御元ですべて管理できているならば別ですが・・・ 送信する前(Outputのまえ)でIf文にて「制御状態が、~の状態ならば」 といった旨の構文を追加してください。 ご使用中の機器が不明のため、これ以上の回答は難しいかと。

その他の回答 (1)

回答No.2

MSCommのハンドシェークを無しにすれば、相手がデータを受け取らなくてもどんどんデータを送信するようになります。 接続ケーブルも制御線なしで作れば、より確実です。

関連するQ&A

  • データ送信

    MSCommのOutPutプロパティを使用して送信します。 Dim Buffer As String  Buffer = "Dummy" MSComm1.Output = Buffer RS-232C接続をしたデバイスにデータを送信します。 このとき、受信するデバイスがいないとMSComm1.Outputステートメントの処理に約4-5秒かかります。 これは仕様ですか? MSComm1.Iutputプロパティを含めて、タイムアウトに関して参考になるドキュメントやサイトがございましたら教えていただけませんか?

  • QRコードの処理

    2000桁の情報からなるバーコードをMSCommで読み込みたいのですが、すべてのデータを読めません。 対応策はございますか? Dim Record As String MSComm1.InBufferCount = 0 Do DoEvents Loop Until MSComm1.InBufferCount >= 2000 Record = MSComm1.Input '←ここで、Record変数にすべてのデータを読めません

  • VB6でのPL/SQLの実行について

    現在VB6(SP6)でORACLEのデータベースに接続後、プロシージャを実行してOUTのパラメータを取得したいと思ってプログラムを作っております。 ORACLEへの接続はいろいろ調べてできたのですが、プロシージャの実行(呼び出し)のしかたがわからず困っております。 PL/SQL(プロシージャ名"TEST_DATA") out1 = TEST(OUTパラメータ1) out2 = これはテストです。(OUTパラメータ2) VB6(SP6) Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset Dim P1 AS String Dim P2AS String '接続処理 Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TEST", "TEST/TEST DB_DEFAULT) OraSession.BeginTrans 'ここでPL/SQLを実行して、パラーメタを取得したいです。 '取得したパラメータをセット P1 = パラメータ1(TEST) P2 = パラメータ1(これはテストです。) OraSession.CommitTrans '結果表示 Call MsgBox(P1 & "結果" & P2) ご教授のほどをお願いいたします。

  • VB.Netでのシリアル通信についての質問

    VB6.0でバイト型変換を行ってからバッファに送信する プログラムを使用しているのですが、これを.Netにて 同様に行う記述方法が分りません。お分かりになる方 よろしくお願い致します。抜粋しておりますのでヘンテコ なソースかとは思いますがよろしくお願い致します。主にChrBが使用出来なくなった事が困っております。 (VB6.0と同様にAxMSCommを使用しております。) Private Sub Rs232c_Com() Dim bytOutByte() As Byte Dim strCmdData as String   strCmdData="83" 'コマンド送信 bytOutByte() = ChrB(Val("&h" & strCmdData)) MSComm1.Output = bytOutByte() End Sub

  • MSCommのデータ送信

    申し訳ございません。 質問させていただいていた内容が解りにくいので再度、質問させてください。 接続しているデバイスがいないときのデータ送信の処理時間について質問がございます。 Dim Data$  Data$ = "Sample" MSComm1.Output = Data$ 'このステートメントを抜けるのに約10秒かかる。 RS-232C接続をしたデバイスにデータを送信します。 このとき、受信するデバイスが接続されいないときのデータ送信に時間が取られています。 通信デバイスのタイムアウトを設定するSetCommTimeouts関数は使用していません。 MSComm1.Outputのタイムアウトはどこで設定されていますか? 設定されているタイムアウト値を確認する方法はございますか?

  • MSCommについて

    ↓例の桁数、データブロックが不定で連続して受信されます。 最後の1桁は(ETX)です。 (STX)XXXXXX...(ETX)(STX)XXXXX...(FS)XXXXX...(ETX)(STX)XXXXX.......(FS)XXXX...............(ETX) すべての桁数、データブロックが対象なので一度に受信します。 1. 質問はInputプロパティで1桁ずつデータをREC変数に読み込んで、ある条件で、Loop分を抜けたいのですが、 VB6の定義方法がわかりません。 1-1.最後の(ETX)の読み込み 1-2.先頭30桁  MSComm1.InBufferCount = 0 MSComm1.InputLen = 1 Dim REC As String Do DoEvents If MSComm1.InBufferCount Then REC = REC & MSComm1.Input If ..... '最後の(ETX)の読み込み '先頭30桁 Exit Do End If   End If Loop 2. スピート重視で処理するために、InBufferCountに値があったら、すべての受信データをRECにいれたいのですが 取得できていません。 アドバイスはございますか? MSComm1.InBufferSize = 2048 MSComm1.InBufferCount = 0 MSComm1.InputLen = 0 Dim REC As String Do DoEvents If MSComm1.InBufferCount >= 1 Then Exit Do End If Loop REC = MSComm1.Input

  • MSComm; 必要なファイル、設定

    VB6で、ActiveXファイルを作成しています。 デバッカーでは、問題なく動作します。 CABファイルを作成して、ファイルをダウンロードさせて動作させると データ送信は、できるのですが受信データが取得できません。 Do - Loop処理を繰り返しているようです。 必要なファイル、プロパティ設定などございますか? ご意見をお願いします。 CABの中身; TEST.OCX ASYCFILT.DLL COMCAT.DLL MSMASK32.OCX MSMSKjp.DLL MSPRPJP.DLL msstdfmt.dll MSSTKPRP.DLL MSVBVM60.DLL OLEAUT32.DLL OLEPRO32.DLL VB6JP.DLL MSComm1.CommPort = 1 MSComm1.Settings = "9600,N,8,1" MSComm1.PortOpen = True MSComm1.InBufferCount = 0 MSComm1.InputLen = 1 '-----Outputプロパティによるデータ受信 MSComm1.Output = (STX) & "CMD" & (CR) '-----Inputプロパティによるデータ受信 Dim Buffer$ Do DoEvents If MSComm1.InBufferCount Then Buffer$ = Buffer$ & MSComm1.Input Select Case Buffer$ Case Chr(13) Exit Do Case Else End Select End If Loop

  • シリアル通信:オフライン時にうまく終了してくれません

    シリアルプリンタの制御をVB6で行っております。 以下のようなコードですが、うまく終了してくれません。 'グローバル 'プリンタの状態 Dim BUF as String '起動時 Private Sub Form_Load() MSComm1.PortOpen = True Text1.Text = "" Timer1.Enabled = True End Sub '終了 Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False MSComm1.PortOpen = False End Sub 'タイマー Private Sub Timer1_Timer() Timer1.Enabled = False Call CheckPrint Timer1.Enabled = True End Sub Private Sub MSComm1_OnComm() Dim TimeOut As Long Dim sTime As Long Dim eTime As Long Select Case MSComm1.CommEvent '受信 Case comEvReceive TimeOut = 100 sTime = timeGetTime Do If (TimeOut - eTime) < 0 Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until MSComm1.InBufferCount >= 82 BUF = MSComm1.Input End Select End Sub プリンタの状態チェック Private Sub CheckPrint() Dim sTime As Long Dim eTime As Long Dim TimeOut As Long Dim i As Integer Dim n As Integer BUF = "" 'プリンタの情報取得コマンド MSComm1.Output = "~HS" 'タイマ開始 TimeOut = 400 sTime = timeGetTime eTime = 0 Do DoEvents If BUF <> "" Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until TimeOut - eTime < 0 If BUF <> "" Then ... .. 宜しくお願いします。

  • VBからストアドプロシジャを実行

    VBからストアドプロシジャを実行すると、下記のエラーが発生します。 型 'System.InvalidOperationException' の初回例外が Oracle.DataAccess.dll で発生しました オブジェクトの現在の状態に問題があるため、操作は有効ではありません。 テーブルとプロシジャはシステムユーザの管理下にあり、一般ユーザで接続しています。直接SQLを実行すると正しく動作しています。以下にコードを示しますが、どこに問題があるのでしょうか。システムユーザの管理下にある事より直接SQLを実行した時と同じ様に「system.xxx」としても結果は変わりませんでした。あと、一般ユーザにはconnectとselectの権限のみ与えています。 ■VB側のコード 'オブジェクト Dim oraCmd As New OracleCommand 'PL/SQLパラメタ Dim oraPrm1 As OracleParameter Dim oraPrm2 As OracleParameter ' 実行タイプ(PL/SQLとして実行) oraCmd.CommandType = CommandType.StoredProcedure ' プロシージャ名 oraCmd.CommandText = "GETNAME" ' パラメータクリア oraCmd.Parameters.Clear() ' 1つ目のパラメータ( IN なのでデータセット ) oraPrm1 = oraCmd.Parameters.Add("PM_STRING", OracleDbType.Varchar2) oraPrm1.Value = "2001" oraPrm1.Direction = ParameterDirection.Input ' 2つ目のパラメータ( OUT なので、Direction プロパティにセット ) oraPrm2 = oraCmd.Parameters.Add("PM_NUMBER", OracleDbType.Int16) oraPrm2.Direction = ParameterDirection.Output Try ' 結果を受け取り、後で処理する oraCmd.ExecuteNonQuery() Catch ex As Exception conn.Close() Console.WriteLine(ex.Message) Return End Try Console.WriteLine(oraPrm2.Value.GetType()) ■ストアドプロシジャ CREATE OR REPLACE PROCEDURE GETNAME (IN1 IN NUMBER, OUT1 OUT VARCHAR2) AS BEGIN select NAME INTO OUT1 from TEST where CODE = IN1; END GETNAME;

  • VB5でCSVデータをAccess97のDBへセット

    普段はVB.NETの開発をすこししているのですが VB5のプログラムの修正の依頼が来て困っています。 CSVのデータをVB5でAccess97のDBへデータセットしたいのですが VB.Netでは同様のプログラムを作成した事があるのですが VB5は全然仕様が違うので困っています。 VB5でCSVを読み込んで配列にセットするにはどのように したらいいのでしょか?CSVを行で読み込むところは なんとか調べてわかりましたが、VB5ではSplitや配列が使えそうに ないのでどのようにしたらいいのかわかりません。 よろしくお願いします。 現在のソース Dim strTextLine As String Dim strTxtDat As String intFileNo = FreeFile Open "c:\infile.csv" For Input As #intFileNo Do While Not EOF(intFileNo) Line Input #intFileNo, strTextLine Loop Close #intFileNo