PCとPLC間での通信を専用プロトコルモードで設定しています。
環境
PLC:FX3U-80M
OS:Windows7-32bit
言語:VB.NET
通信規格:RS232C
シーケンサのビットデバイスに書き込むプログラムを作成したのですが
FormのButton3を押すと以下のエラーメッセージが出て、解決方法がわかりません。
動作
Button1でCOMポートを開きます
Button2でCOMポートを閉じます
Button3でテキストボックスのON,OFF状態を書き込みます
テキストボックスはダブルクリックでON,OFFを切り換えます
"エラー内容"
インデックスおよび長さは文字列内の場所を参照しなければなりません。 パラメータ名 length
"SerialPortクラス設定内容"
オブジェクト名:SerialPort1
PortName:COM9
BaudRateプロパティ:9600
DataBitsプロパティ:8
Parityプロパティ:Even
StopBitsプロパティ:One
RtsEnableプロパティ:True
DtrEnableプロパティ:True
VB.NET
1Public Class Form1 2 Dim ENQ As String = Convert.ToChar(&H5) 3 Dim ACK As String = Convert.ToChar(&H6) 4 Dim NAK As String = Convert.ToChar(&H15) 5 Dim tb As String = "Textbox" 6 7 Dim myctls As New ArrayList 8 Dim otb As TextBox 9 10 Private Sub tbdClick(ByVal sender As Object, ByVal e As System.EventArgs) 11 12 If sender.Text = "OFF" Then 13 sender.Text = "ON" 14 sender.BackColor = Color.Red 15 ElseIf sender.Text = "ON" Then 16 sender.Text = "OFF" 17 sender.BackColor = Color.Black 18 End If 19 End Sub 20 21 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 22 Dim i As Integer 23 24 For i = 1 To 2 25 AddHandler Me.Controls(tb & i).DoubleClick, AddressOf tbdClick 26 myctls.Add(Me.Controls(tb & i)) 27 myctls.Item(i - 1).Text = "OFF" 28 myctls.Item(i - 1).BackColor = Color.Black 29 myctls.Item(i - 1).ForeColor = Color.White 30 Next 31 32 Button1.Enabled = True 33 Button2.Enabled = False 34 Button3.Enabled = False 35 End Sub 36 37 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 38 SerialPort1.Open() 39 40 Button1.Enabled = False 41 Button2.Enabled = True 42 Button3.Enabled = True 43 End Sub 44 45 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 46 SerialPort1.Close() 47 Button1.Enabled = True 48 Button2.Enabled = False 49 Button3.Enabled = False 50 End Sub 51 52 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 53 Dim j As Integer = 0 54 Dim sdata As String 55 Dim rdata As String 56 Dim ERCD As String 57 Dim bitdata As String = "" 58 Try 59 For Each Me.otb In myctls 60 If myctls.Item(j).Text = "OFF" Then 61 bitdata = bitdata & "0" 62 ElseIf myctls.Item(j).Text = "ON" Then 63 bitdata = bitdata & "1" 64 End If 65 j += 1 66 Next 67 sdata = ENQ & "00FFBW0" & "Y0020" & "02" & bitdata 68 SerialPort1.Write(sdata) 69 Threading.Thread.Sleep(1000) 70 rdata = SerialPort1.ReadExisting 71 Select Case rdata.Substring(0, 1) 72 Case NAK 73 ERCD = rdata.Substring(5, 2) 74 MessageBox.Show("エラー:" & ERCD) 75 Case ACK 76 MessageBox.Show("正常に受信されました。") 77 Case Else 78 MessageBox.Show("予期せぬ事態が発生しました。") 79 End Select 80 Catch ex As Exception 81 MessageBox.Show(ex.Message) 82 End Try 83 End Sub 84End Class 85
回答1件
あなたの回答
tips
プレビュー