• ベストアンサー

データ送信

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

noname#187796
noname#187796

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

  • ベストアンサー
回答No.1

WindowsAPIのSetCommTimeoutsを使って、シリアル通信のタイムアウトを設定する必要があります。 http://msdn.microsoft.com/ja-jp/library/cc429719.aspx 簡単にはかけないので、詳しくはWEBで検索してください。

noname#187796
質問者

補足

ありがとうございます。 今回の通信デバイスがいないケース、デフォルトのタイムアウト値は何秒でしょうか? MSCommプロパティなどで、簡単に設定する方法はございますか?

関連するQ&A

  • MSCommのデータ送信

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

  • ステップの強制実行

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

  • メール送信について

    BASPを使用しないコーディングを行いたく、下記サンプルのとおり記述すると送信はうまく行えました。 そこで、追加機能としてSMTPサーバーのタイムアウトの設定を行いたいですが、方法はないでしょうか? ちなみに、BASPのServerプロパティでは、ポート番号と通信タイムアウト値(秒単位)が指定可能なようです。 よろしくお願いします。 Dim from As String = "from@microsoft.com" Dim mailto As String = "to@microsoft.com" Dim subject As String = "UtilMailMessage001" Dim body As String = "<html><body>UtilMailMessage001 - success</body></html>" SmtpMail.SmtpServer = "MyMailServer" SmtpMail.Send(from, mailto, subject, body)

  • ADOによるCSVファイルからのデータ取得

    EXCELVBAを用いて、ADODB.CONNECTIONによりデータを取得しようと思い、ネットで調べた プログラムを使ってみたのですが、途中のレコードまでしか取得できませんでした。 ちなみに、データを取得しようと思っているもとのCSVファイルのサイズは10GB超、レコード数は 800万行程度あります。 これが、数十MB程度のファイルだと問題なかったのですが、レコード数などに制限はあるのでしょうか。 ご教示いただけますと幸いです。 用いたマクロの構文は以下のとおりです。 Dim con As New ADODB.Connection Dim connectionString As String Dim csvFilePath As String Dim rs As ADODB.Recordset Dim colNo As Long Dim fileNumber As Long Dim Buffer As String 'CSVファイルが置かれているフォルダ csvFilePath = E:\ connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & csvFilePath & ";" _ & "Extended Properties=""Text;HDR=NO;FMT=Delimited""" 'コネクションオープン con.Open connectionString 'ここでSQL文によりレコードを取得します。 Set rs = con.Execute("SELECT COUNT(*) FROM XXX.CSV") fileNumber = FreeFile Open OutputFolder & Application.PathSeparator & OutputFile For Output As #fileNumber Buffer = "" ’ヘッダーの出力 For colNo = 0 To rs.Fields.Count - 1 If Buffer <> "" Then Buffer = Buffer & "," End If Buffer = Buffer & rs.Fields(colNo).Name Next Print #fileNumber, Buffer ’データの出力 Do While rs.EOF = False Buffer = "" For colNo = 0 To rs.Fields.Count - 1 If Buffer <> "" Then Buffer = Buffer & "," End If Buffer = Buffer & rs.Fields(colNo).Value Next Print #fileNumber, Buffer '次のレコード rs.MoveNext Loop Close #fileNumber 'クローズ con.Close Set rs = Nothing Set con = Nothing End Sub

  • 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; 必要なファイル、設定

    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

  • メールの送信について

    ASPを使ってwebアプリ見たいなのを作ろうとしています。 データの登録時に予め登録されてているユーザに登録された旨を伝える メールを送信したいです。 いろいろ試した結果、直でbsap21を呼び出すのではなく、bsmtp.dllを 呼び出して送信するほうが動きがいい(というか、basp21のほうはSMTPサーバに接続しない)ので、その方向で行きたいのですが。。。 見つけたコードが以下です。 ------------------------------------------------------------ Private Declare Function SendMail Lib "bsmtp"_ (strServer As String, strTo As String, strFrom As String, _ strSubject As String, strBody As String, strFile As String) As String Public Function SendViaBASP() As String Dim strMailServer As String: strMailServer = "***.***" Dim strFrom As String: strFrom = "hoge@hoge.com" Dim strTo As String: strTo = "hoge@hoge.com" Dim strBcc As String: strBcc = "" Dim strToBcc As String: strToBcc = "" Dim fHTML As Boolean: fHTML = False Dim strSubject As String Dim strBody As String Dim strAttachments As String: strAttachments = "" Dim strRet As String strSubject = "BASP21" strBody = "このメールは、BASP21経由で送信しました." If Len(strTo) Then strToBcc = strTo Else strToBcc = strBcc End If If fHTML Then strToBcc = ">Content-Type: text/html; charset=iso-2022-jp" _ & vbTab & strToBcc End If strRet = SendMail(strMailServer, _ strToBcc, strFrom, strSubject, strBody, _ strAttachments) SendViaBASP = strRet End Function --------------------------------------------------------------- で、これをACCESSのモジュールに登録し、実行したところ問題なく 動くのですが、これをASPに組み込む方法がわかりません。 ACCESSはデータの登録先ではありますが、常に起動しているわけでは ないので、おそらくモジュールとした場合、動かないですよね? ASPから上記のコードを動かすには、どうしたらいいでしょうか。 普通にASPの中(<%~%>)に入れると「ステートメントの末尾が不正」 とのメッセージがでてしまいます。 どうかよろしくお願いします。

  • シリアル通信(送信について)

    現在VB6.0を使用してシリアル通信(RS232C)をMSCOMMを使用して行いたいのですが、受信は出来たのですが、送信がうまくいかない状態です。 MSComm.Output = 送信文字列 & vbCr とすると結果の値を受信できる予定なのですがエラーですという値が返ってきます。 同じ操作をTera Term等で行うと結果が正しく返ってきます。 何故そうなるのかわからない状態で困っております。 何かアドバイス頂けないでしょうか。

  • Accessから複数アドレスにメール送信

    かなり初歩的な質問なのかもしれませんが、どうしても進まないのでどなたかご教授お願い致します。 access2003からBasp21を使用してメール送信フォームを作ってます。複数アドレスに一括で送れるように、宛名フォームから氏名を選択(例として3件)すると、メール送信フォームの「bcc」ボックスに、 "bcc" & vbTab & "abc@xx.com" & vbTab & "def@xx.jp" & vbTab & "ghi@xx.com" と入るようにし、送信ボタンクリックで下記のようなコードを書いてます。 Dim bobj As Object Dim svname As String Dim ID As String Dim Mailto As String Dim MailFrom As String Dim subj As String Dim Body As String Dim pass As String Dim msg As Variant '送信チェック用 'SMTPサーバ名:ポート番号:タイムアウト秒 svname = Me.[smtpサーバー] & ":" & Me.[ポート番号] & ":" & Me.[タイムアウト秒] 'ログインID ID = Me.[ログインID] 'パスワード pass = Me.[パスワード] 'オブジェクトを作成 Set bobj = CreateObject("basp21") '宛先 Mailto = Me.[bcc] '送信者 MailFrom = Me.[送信者] & "<" & ID & ">" & vbTab & ID & ":" & pass '件名 subj = Me.[件名]   '本文 Body = Me.[テキスト169] 'メッセージの送信 msg = bobj.SendMail(svname, Mailto, MailFrom, subj, Body) ' 送信チェック If msg <> "" Then MsgBox "送信できませんでした。" & vbCrLf & msg, vbOKOnly + vbCritical, "エラー" Else MsgBox "送信しました", vbOKOnly + vbInformation, "完了" End If これを実行すると、 「送信できませんでした。 555 5.5.4 Unsupported option: & to "bcc" & vbTab & "abc@xx.com" & vb」 というようなメッセージが出て送信できません。 Mailto = Me.[bcc] の所を、 Mailto ="bcc" & vbTab & "abc@xx.com" & vbTab & "def@xx.jp" & vbTab & "fhi@xx.com" にすれば送信できるのですが、送信先は毎回変わるので Me.[bbc] にアドレスを代入して送信できるようにするにはどうすればいいのでしょうか?

  • MSCommのCommEventプロパティ

    質問させてください。 ↓コードで、通信エラーのイベントを取得したいのですが、COMポートは正常に機能しているのですが、comEvReceiveに正しい値(0)が 入らずにデータ受信ができません。 対策を教えていただけませんか? Dim Buffer As String Do '5桁受信するまで待機 DoEvents Loop Until MSComm1.InBufferCount >= 5 MSComm1.RThreshold = 1 Select Case MSComm1.CommEvent '通信ポートのチェック Case comEvReceive 'OK Buffer$ = MSComm1.Input Case Else 'NG ・ ・ End Select

専門家に質問してみよう