PICNICのVB制御プログラムのコンパイルエラーと疑問点

このQ&Aのポイント
  • VBでPICNICボード(トライステート社製http://www.tristate.ne.jp/)の制御ソフトを作っているが、コンパイルエラーが発生しプログラムを実行できない。
  • 接点入力、アナログデータの取り込みやパラレルポートのピン方向制御はできるが、接点出力制御や液晶制御、RS232送信制御ができない。
  • 質問内容は、(1) 接点出力制御のコンパイルエラーの原因および基本的な文法ミスについて、(2) retvalue = PICOCX1.Outp(PortB, ...)についての型指定の有無に関する疑問。
回答を見る
  • ベストアンサー

PICNICのVB制御プログラム

お世話になります。 VBでPICNICボード(トライステート社製http://www.tristate.ne.jp/)の制御ソフトを作っているのですがコンパイルエラーがでて、プログラムの実行ができません。(VB初心者です) (1)接点入力、アナログデータは取り込みできます。 (2)パラレルポートのピン方向制御はできます。 (3)パラレルポートのピン方向状態は読み込みできます。 (4)接点出力(I/O pinのLow,High)制御、液晶制御、RS232送信制御ができません。 問題ありソース Dim retvalue As Variant Dim n, m As Integer Dim nameb As String Dim rez As Integer Dim status(0 To 3) As Boolean Dim current As Integer Dim data(100000) As Integer Dim datab(100000) As Boolean Private Sub Command1_Click() data(current) = PICOCX1.ADinp(PortA, 4) Label1.Caption = "温度:" & Format(data(current) / 10.23 * 5, "#0.0℃") retvalue = PICOCX1.Dirp(PortB, 4, pinOutput) End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Timer1_Timer() Call check End Sub Private Sub check() n = 0 m = 0 nameb = "tanaka" data(current) = PICOCX1.ADinp(PortA, 0) Label2.Caption = "温度:" & Format(data(current) / 102.3 * 5, "#0.0℃") data(current) = PICOCX1.ADinp(PortA, 1) Label3.Caption = "湿度1:" & Format(data(current) / 10.23 * 5, "#0.0%") data(current) = PICOCX1.ADinp(PortA, 2) Label4.Caption = "湿度2:" & Format(data(current) / 10.23 * 5, "#0.0%") data(current) = PICOCX1.ADinp(PortA, 3) Label5.Caption = "空き:" & Format(data(current) / 10.23 * 5, "#0.0") data(current) = PICOCX1.ADinp(PortA, 5) Label6.Caption = "温度:" & Format(data(current) / 10.23 * 5, "#0.0℃") 'ポートRA5の値 基板側のミス? data(current) = PICOCX1.ADinp(PortA, 4) Label1.Caption = "温度:" & Format(data(current) / 10.23 * 5, "#0.0℃") ' 文法テスト datab(10000) = PICOCX1.ADinp(PortA, 4) '接点入力状態 status(0) = PICOCX1.Inp(PortB, 0) If status(0) = True Then Label7(0).Caption = "扉閉状態" Else Label7(0).Caption = "扉開状態" End If status(1) = PICOCX1.Inp(PortB, 1) If status(1) = True Then Label7(1).Caption = "扉施錠状態" Else Label7(1).Caption = "扉解除状態" End If status(2) = PICOCX1.Inp(PortB, 2) If status(2) = True Then Label7(2).Caption = "  " Else Label7(2).Caption = "人検知" End If status(3) = PICOCX1.Inp(PortB, 3) If status(3) = True Then Label7(3).Caption = "High" Else Label7(3).Caption = "Low" End If 'パラレルポート入出力状態 retvalue = PICOCX1.GetDirp(PortB, 4) 'パラレルポート入出力方向制御 'retvalue = PICOCX1.Dirp(PortB, 4, pinInput) ' retvalue = PICOCX1.Dirp(PortB, 4, pinOutput) '接点出力制御 'data(current) = PICOCX1.Outp(PortB, 4, High) 'void = PICOCX1.Outp(PortB, 4, High) 'retvalue = PICOCX1.Outp(PortB, 4, 0) retvalue = PICOCX1.Outp(PortB, 4, High) '液晶の制御 ' retvalue = PICOCX1.LcdClear これはサポートされていなとのメッセージ 'retvalue = PICOCX1.ClearLcd '型の不一致エラー ' retvalue = PICOCX1.PutLcd(n, m, nameb) 'retvalue = PICOCX1.SetPos(n, m) 'retvalue = PICOCX1.PutLcd(n, m, nameb) 'シリアルI/F制御 'retvalue = PICOCX1.Transmit(nameb) retvalue = PICOCX1.Receive '文法エラーでなく誰かがすでに使用しているとのメッセージ End Sub エラー内容及び疑問 (1) 接点出力制御 retvalue = PICOCX1.Outp(PortB, 4, High)   コンパイルエラー 型が一致しません。 とのエラーがでます。基本的文法ミスですか? retvalue を全種10種に型に変更しても変わりません。 (2) retvalue = PICOCX1.Outp(PortB, ・・とエディターで入力時、ADinp命令入力時みたいに入力支援メニュで型宣言がありません。型指定不要ですか? 以上 初歩的質問ですが、悩んでおります。 お忙しいところ申し訳ありませんが誰か教えてください。

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

  • ベストアンサー
  • techa
  • ベストアンサー率60% (41/68)
回答No.1

PICNIC、わたしももっていますが、もうながいこと使っていませんでした。 本題ですが、Outpは単に出力するだけのものでしょうから、 戻り値がない=Sub指定なのではないでしょうか。 したがって Call PicOcx1.Outp( PortB, 1, High ) のようにすればよいようにおもいます。 ただ、未確認ですので、ちがっていたらごめんなさいね

chibi_boke
質問者

お礼

techa 様 お忙しいところ、ご回答いただきありがとうございます。 あれから必死に探したら、このカテゴリーでPICNICではヒットせずoutpでヒットしたソースを見たら、Outpが使用されており、それで解決しました。例 PICOCX1.Outp PortB, 7, High しかし、techaさん回答例でもいいみたいです。(エラーなし) また、ひとつ勉強になりました。 でも、今度はノートPC(Win98)が故障したみたいで、コンパイル、実行させるとPCが固まってしまい結果は確認できていません。

関連するQ&A

  • エラー処理について

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 38 Then PICOCX1.Outp PortB, 7, High PICOCX1.Outp PortB, 4, High End If If KeyCode = 40 Then PICOCX1.Outp PortB, 6, High PICOCX1.Outp PortB, 5, High End If If KeyCode = 37 Then PICOCX1.Outp PortB, 7, High PICOCX1.Outp PortB, 5, High End If If KeyCode = 39 Then PICOCX1.Outp PortB, 6, High PICOCX1.Outp PortB, 4, High End If End Sub Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 38 Then PICOCX1.Outp PortB, 7, Low PICOCX1.Outp PortB, 4, Low End If If KeyCode = 40 Then PICOCX1.Outp PortB, 6, Low PICOCX1.Outp PortB, 5, Low End If If KeyCode = 37 Then PICOCX1.Outp PortB, 7, Low PICOCX1.Outp PortB, 5, Low End If If KeyCode = 39 Then PICOCX1.Outp PortB, 6, Low PICOCX1.Outp PortB, 4, Low End If End Sub というプログラムですがこれがもしPICOCX1.Outp PortB, 4, Lowなどが実行できないとエラーとして返ってきてしまいます。このときエラー箇所をもう一度実行する方法はあるのでしょうか? お願いします。こちらの環境はVB6.0です。

  • vb6.0のプログラム

    今こんなプログラムを作っているのですがなぜか、足りない部分があると言われて困っております。 できれば教えてください。 図 ーーーーーーーーーーーーーーーー from ーーーーーーーーーーーーーーーー 残り30秒[ーーーーラベルーーーー] 000+000=000←(3つともlabel) □-------------------□←HScrollbar max100 min0 [コマンドボタン] [タイマー]←非表示 ーーーーーーーーーーーーーーーー コード Private intCount As Integer Private intSecond As Integer Private Sub cmdStart_Click() Dim intNum1 As Integer Dim intNum2 As Integer If cmdStart.Caption = "Start" Then intCount = 0 intSecond = 30 lblResult.Caption = "" cmdStart.Caption = "OK" tmrSecond.Enabled = True ElseIf cmdStart.Caption = "OK" Then If CInt(lblAnswer.Caption) = CInt(lblNum1.Caption) + CInt(lblNum2.Caption) Then lblResult.Caption = lblResult.Caption & "○" intCount = intCount + 1 Else lblResult.Caption = lblResult.Caption & "×" End If intNum1 = Rnd() * 50 intNum2 = Rnd() * 50 lblNum1.Caption = intNum1 lblNum2.Caption = intNum2 End If End Sub Private Sub hsbAnswer_Change() lblAnswer.Caption = hsbAnswer.Value End Sub Private Sub tmrSecond_Timer() intSecond = intSecond - 1 lblTime.Caption = "残り" & intSecond & "秒" If intSecond = 0 Then tmrSecond.Enabled = False MsgBox (intCount & "問正解") cmdStart.Caption = "Start" Else End If End Sub どうぞよろしくお願いします。

  • プロパティの値が不正ですってでます!

    下記プログラムがあります。 Private Sub Timer1_Timer() data(current) = PICOCX1.ADinp(PortA, 4) Label4.Caption = Date & "," & Time ondo = "現在の温度:" & Format(data(current) / 10.23 * 5, "#0.0℃") kiroku = Date & "," & Time & "," & Format(data(current) / 10.23 * 5, "#0.0") Label1.Caption = ondo Dim MyFil As String Dim intFileNo As Integer MyFil = Text3.Text intFileNo = FreeFile If Dir$(MyFil) = "" Then Open MyFil For Output As #intFileNo Print #intFileNo, kiroku Close #intFileNo Else Open MyFil For Append As #intFileNo Print #intFileNo, kiroku Close #intFileNo End If End Sub このプログラムを1時間に一回実行したいのですがインターバルを3600000にするとプロパティの値が不正ですとでてしまい実行することができません。 どうやったらちゃんと動くようになりますか??お願いします。

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • VB6.0からVB2008移植時のStringの使用方法

    初歩的な質問だと思うのですが色々調べてもわからなかったのでご教授願います。 VB6.0からVB2008にプログラムを移植しているのですが以下の部分の修正方法がわかりません。 元(VB6.0)のソース Dim strStart, strEnd As String strStart = Format( data.Start(0), "0.0" ) strEnd = Format( data.End(0), "0.0" ) Label.Caption = strStart & "-" & strEnd 'data.Start/data.EndはSingleの配列 VB2008のソース Dim strStart As String Dim strEnd As String strStart = VB6.Format( data.Start(0), "0.0" ) strEnd = VB6.Format( data.End(0), "0.0" ) Label.Caption = strStart & "-" & strEnd 'VB6.Format~はソースをUpGradeしたときに自動で変換されました VB2008のstrStartに設定する時点でエラー('System.NullReferenceException' の初回例外が DataRcvSample.exe で発生しました。)となりstrStartがNothingなのがいけないところまではわかったのですが、Newを使ってどのように設定すればいいのかがわかりません。 VB自体まだ2週間位しか触っていない初心者なのですが、急ぎの仕事で勉強する時間がなく、どうすればいいのか困っています。 修正方法をご教授願います。

  • 途中でエラーが出てしまい手が止まってしまいました(T_T)

    Visual Basicについてなんですが、いいですか? http://azsx00.tripod.co.jp/D001.jpg 初心者じみた質問ですみません。 上記の画像ののようなプログラムが途中までで引っかかってしまって先に進めません。 どなたかご指導下さい。 一応自分で考えた結果です。どこが悪いとか何が分かってないとかいろいろアドバイスもあればお願いします。まだ習い始めたばかりです。 Dim Number As Integer Dim Score As Integer Dim MessageText As String Private Sub Command1_Click() If Number > 7 Then Score = Score + 1 MessageText "あたり" End If If Number < 7 Then Score = Score - 1 MessageText "外れ" End If If Number = 7 Then Score = Score + 0 MessageText "引き分け" End If End Sub Private Sub Command2_Click() If Number > 7 Then Score = Score + 1 MessageText "あたり" End If If Number < 7 Then Score = Score - 1 MessageText "外れ" End If If Number = 7 Then Score = Score + 0 MessageText "引き分け" End If End Sub Private Sub Form_Load() Number = Rnd() * 13 + 1 Score = 0 Label1.Caption = "?" Text1.Text = "Score:" & Score End Sub Private Sub Label1_Click() If Number > 7 Then Label1.Caption = "Score" End If If Number < 7 Then Label1.Caption = "Score" End If End Sub

  • VB、教えてください。

    VB、教えてください。 5つのラベルが縦に並んでいます。 label0 label1 label2 label3 label4 あらかじめ、 Dim m as integer=0 を宣言し、 どうにかして "label"という文字列とmという数字をくっつけ、 label0 label1… という風にできないでしょうか。 そして label"m".text=10*m というような表示を作りたいのですが。 下記のようなイメージです。分かりにくかったらごめんなさい。 Public Class Form1 Dim m As Integer = 0 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click lblmessage(+("m").Text = 10*m m = m + 1 End Sub End Class

  • VBでラベルの大きさと文字数によってフォントサイズが変化するプログラムについて

    VBで、「ラベル」っての、ありますよね。そこに入力された文字数とラベルの大きさによって、フォントサイズを変化させるプログラムを書いたのですが、うまくいきません。何が間違っているのでしょうか? Private Sub name_text_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles name_text.KeyUp Dim nam As Byte nam = Len(name_text.Text) Dim FSize As Short If nam = 2 Then FSize = 36 FSize = Label.Font.Size ElseIf nam = 3 Then FSize = 25 FSize = Label.Font.Size End If Label.Text = TextBox.Text End Sub 何が間違ってますでしょうか?お願いします。

  • VBでの質問です

    VBでの質問です 5分を計るタイマーを作っていて5分たつと止まるプログラムを作っていて、コンマ以下のケタが長くて、しかも止まらない( Label1.Text = n5.Subtract(Now).ToStringをLabel1.Text = n5.Subtract(Now).TotalMinutesにしてIf Label1.Text = "00:00:00" ThenをIf Label1.Text = "0" Thenにした時は止まりました)ので止まるようにするにはどこを変えればいいですか? 教えてください 以下コードです Public Class Form1 Dim n5 As DatePrivate Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load n5 = Now.AddMinutes(5) Timer1.Interval = 1000 Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = n5.Subtract(Now).ToString If Label1.Text = "00:00:00" Then MsgBox("時間になりました。") Timer1.Stop() End If End Sub 長文ですいません

  • Mid関数(2)

    VB6.0でタイピングソフトを作成しています。KeyPressの入力判定で、入力された文字とLabel1に表示されている文字が一緒なら、その文字を消すという処理なんですが、 Private Sub Form_KeyPress(KeyAscii As Integer) Label1.Caption = "taipingu" If Mid(Label1.Caption, z, 1) = Chr(KeyAscii) Then Dim ss As String ss = Label1.Caption Mid(ss, z, 1) = " " Label1.Caption = ss z = z + 1 End if というやり方を教えていただいてやってみたのですが、 「If Mid(Label1.Caption, z, 1) = Chr(KeyAscii) Then」の部分で 「プロシージャの呼び出し、または引数が不正です」 というエラーが出てしまいます。しかも、このエラーが出ずに実行がうまくいくときもあります。 何故このエラーが出るのか、分かる方お願いします。

専門家に質問してみよう