tangfeng
學(xué)海無涯
級別: 探索解密
![]() |
'在窗體的Load事件中加入下列代碼對串口進(jìn)行初始化: Private Sub Form_Load() MSComm1.CommPort = 1 ' 設(shè)置通信端口號為COM1 MSComm1.InputMode = 1 ' 接收二進(jìn)制型數(shù)據(jù) MSComm1.RThreshold = 1 ' 設(shè)置并返回要接收的字符數(shù) MSComm1.SThreshold = 1 ' 設(shè)置并返回發(fā)送緩沖區(qū)中允許的最小字符數(shù) MSComm1.Settings = "9600,E,7,1" ' 設(shè)置串口1通信參數(shù) MSComm1.PortOpen = True ' 打開通信端口1 Timer1.Enabled = False End Sub '向PLC發(fā)送指令:02 30 31 30 30 30 32 30 03 35 36,功能是從D0開始讀取32個(gè)字節(jié)數(shù)據(jù) Private Sub Cmdsend_Click() MSComm1.Output = Chr(&H2) & Chr(&H30) & Chr(&H31) & Chr(&H30) & Chr(&H30) & Chr(&H30) & Chr(&H32) & Chr(&H30) & Chr(&H3) & Chr(&H35) & Chr(&H38) Timer1.Enabled = True End Sub '獲得各輸入端口狀態(tài) Private Sub Timer1_Timer() Dim Inbyte() As Byte Dim buffer As String ReDim Inbyte(100) Inbyte = MSComm1.Input '返回的數(shù)據(jù)串 For i = LBound(Inbyte) To UBound(Inbyte) buffer = buffer + Hex(Inbyte(i)) + Chr(32) Next i 'Text1.Text = buffer '顯示返回的數(shù)據(jù)串,需自己添加TextBox If Hex(Inbyte(2)) = "31" Then '31表示觸點(diǎn)閉合 Shape1(0).FillColor = QBColor(12) Else '30表示觸點(diǎn)斷開 Shape1(0).FillColor = QBColor(10) End If If Hex(Inbyte(6)) = "31" Then Shape1(1).FillColor = QBColor(12) Else Shape1(1).FillColor = QBColor(10) End If If Hex(Inbyte(10)) = "31" Then Shape1(2).FillColor = QBColor(12) Else Shape1(2).FillColor = QBColor(10) End If If Hex(Inbyte(14)) = "31" Then Shape1(3).FillColor = QBColor(12) Else Shape1(3).FillColor = QBColor(10) End If If Hex(Inbyte(18)) = "31" Then Shape1(4).FillColor = QBColor(12) Else Shape1(4).FillColor = QBColor(10) End If If Hex(Inbyte(22)) = "31" Then Shape1(5).FillColor = QBColor(12) Else Shape1(5).FillColor = QBColor(10) End If If Hex(Inbyte(26)) = "31" Then Shape1(6).FillColor = QBColor(12) Else Shape1(6).FillColor = QBColor(10) End If If Hex(Inbyte(30)) = "31" Then Shape1(7).FillColor = QBColor(12) Else Shape1(7).FillColor = QBColor(10) End If If Hex(Inbyte(34)) = "31" Then Shape1(8).FillColor = QBColor(12) Else Shape1(8).FillColor = QBColor(10) End If If Hex(Inbyte(38)) = "31" Then Shape1(9).FillColor = QBColor(12) Else Shape1(9).FillColor = QBColor(10) End If If Hex(Inbyte(42)) = "31" Then Shape1(10).FillColor = QBColor(12) Else Shape1(10).FillColor = QBColor(10) End If If Hex(Inbyte(46)) = "31" Then Shape1(11).FillColor = QBColor(12) Else Shape1(11).FillColor = QBColor(10) End If If Hex(Inbyte(50)) = "31" Then Shape1(12).FillColor = QBColor(12) Else Shape1(12).FillColor = QBColor(10) End If If Hex(Inbyte(54)) = "31" Then Shape1(13).FillColor = QBColor(12) Else Shape1(13).FillColor = QBColor(10) End If If Hex(Inbyte(58)) = "31" Then Shape1(14).FillColor = QBColor(12) Else Shape1(14).FillColor = QBColor(10) End If If Hex(Inbyte(62)) = "31" Then Shape1(15).FillColor = QBColor(12) Else Shape1(15).FillColor = QBColor(10) End If Timer1.Enabled = False End Sub '當(dāng)退出程序時(shí),關(guān)閉串行口 Private Sub Cmdquit_Click() MSComm1.PortOpen = False '關(guān)閉串口 Unload Me End Sub // 讀不到PLC 輸入點(diǎn),下標(biāo)越界,望高手指點(diǎn)修改 |
---|---|
|
yhtxiao
級別: 探索解密
![]() |
反饋數(shù)據(jù)是8位數(shù)據(jù) 用串口監(jiān)測軟件看一下數(shù)據(jù)結(jié)構(gòu)應(yīng)該很好理解 |
---|---|
|
不小心遇見你
自動項(xiàng)目、PLC、視覺、通訊等工控軟件開發(fā)QQ3515716
級別: 工控俠客
![]() ![]() |
不要這樣寫程序 給你推薦個(gè)官方使用的控件即可 使用方便 MX Component |
|
---|---|---|
|