ÓÃVB±àдmodbusÔ´´úÂëµÄ¹ý³Ì
½ñÌìÊÇÖÜÁù£¬ÏÖÔÚ¸Õ´Óµ¥Î»×ÔÔ¸¼Ó°à»ØÀ´¡£ÎªÊ²Ã´×ÔÔ¸¼Ó°àÄØ£¿ÒòΪ×Ô¼ººÍÀϰå¿äϺ£¿Ú˵£ºÒ»¸öÀñ°Ý°ÑmodbusÉÏλ»ú³ÌÐòдºÃ£¨Ò²¾ÍÊÇÕâ¸öÀñ°ÝÀ£©¡£ÏÖÔÚÖÕÓÚ°ÑÕâ¸ö³ÌÐòдºÃÀ¡£
¸ÐÏëºÜ¶à°¡£¡¸ÃÈçºÎ˵ÆðÄØ£¿ÎÒÓïÎIJ»ºÃ£¬°Ñ×Ô¼ºÏë±í´ïµÄÒâ˼˵³öÀ´¾ÍÐÐÀ¡£
Ê×ÏÈ£º»¹ÊÇÄǾ仰£ºÒ»Çеÿ¿×Ô¼º£¡ÉÏÖÜһʱ£¬Àϰå˵ÈÃÎÒ×ö¸ömodbus½çÃæ£¬ÎÒÏ룺Õâ¸ö¼òµ¥°¡¡£²»¾ÍÊÇ´®¿ÚÊÕ·¢Ã´?ÓÚÊÇÎҼƻ®°²ÅÅÉÏдÁË1¸öÀñ°Ý¸ã¶¨¡£È»ºó¿ªÊ¼°²×°DELPHI£¨ÎÒÔÚµ¥Î»Ò»Ö±¸ãC±à³Ì£¬»ú×ÓûÓÐ×°ÕâЩ£©£¬Íêºó¾Í´ò¿ªÎÒÄÇÔø¾ÊìϤµÄ½çÃæ¡£¶÷£¿Ôõô¿´ËÆÊìϤµÄ½çÃæÔõôÕâôİÉúÄØ/ÓÚÊÇÉÏÍøÕÒ×ÊÁÏ¡£¡£¡£Õâ¸ö3ÌìµÄÆÚ¼äÎҸп®ºÃÉî°¡£ºÒòΪÎÒ´óËÄѧϰµÄDELPHI£¬ËùÒÔÎҸоõÕâ¸ö»¹ÊìϤµã£¬¿ÉÊǵ±Ê±×ö¿Î³ÌÉè¼ÆµÄʱºòҲûÓÐÓùý´®¿Ú£¬Õâ¸ö´®¿Ú±à³ÌÕ¦µÃºÍMCU´®¿Ú²»Ò»ÑùÄØ£¿Ëü¾ÍÊDz»Ò»Ñù£¡ÔÎÔΡ£ÉÏÍøÕÒSPCOMM¡£¡£¡££¬Ñ§Ï°ÁËÒ»ÌìÒ²²»»áÓá£ÓÚÊÇͽÀÍÁË3ÌìҲûÓÐЧ¹û¡£×ªÑ۾͵½ÁËÖÜËÄ£¬ÎÒÐÄÀïÄǸö¼±Ñ½¡£°¦£¡»¹ÊÇÈÌÍ´Åׯúdelphi°É£¡ÎªÊ²Ã´ÄØ£¿ËüûÓÐ×Ô´ø´®¿Ú¿Ø¼þ£¬ÏÂÔØ²¢°²×°ÁË»¹Êdzö´í°¡¡£
VBºÃÏóÊÇÎÒ´ó¶þѧµÄ£¬¾ßÌåʱ¼äÎÒÒ²ÍüÁË£¬·´Õý¾Í¼ÇµÃ×ö¿ÎÉèµÄʱºòÓÃËüÁ¬¸öACCESSʵÏÖÁ˲åÈëɾ³ý²éѯ¹¤×÷¡£ÒÔºóÖªµÀÕâ¸öÖÜËÄÎÒҲûÓÐÓùý£¬ÉõÖÁûÓмûµ½¹ýËüµÄ½çÃæ¡£ÎÒÑ¡ÔñËüÒ»¸öÒòΪÎÒÑ¡Ôñ£¬ÎÒϲ»¶¡£¸üÖØÒªµÄÊÇËü°²×°ÁË×Ô´ø´®¿Ú¿Ø¼þ£¬²»ÓÃÏÂÔØÊ²Ã´µÄÁË£¬ÓÃÆðÀ´Êµ´òʵµÄÐÄÀïÓеס£
´ó¼ÒÏÖÔÚÖªµÀÎҵĵ××ÓÁ˰ɣ¿ÖÜËÄÎҽ蹫˾ÀïµÄÒ»±¾VBÊé¿´ÁËÒ»ÌìµÄ´®¿Ú£¬È»ºóÐÄÀíÓе×ÁË£¬ÖÜÎ嶯ÊÖÒ»Ì죬ÊÕ»ñºÜ´ó£¬½ñÌìÔ糿8µãÆð´²£¬ÐÄÀí»¹×ÁÄ¥×ųÌÐòµÄÊÂÇ飬ÓÉÓÚ¼ÒÀïûÓÐʵÑéÒÇÆ÷£¬ÓÚÊÇ´òËãÈ¥¹«Ë¾£¬Ò»Ö±×öµ½ÏÖÔÚ£¬ÖÕÓڸ㶨À¡£Õâ¸öÀñ°ÝÉÏÍøÕÒÔ´´úÂëµÄʱºò¿´×źöàÏñÎÒÒ»ÑùÕÒÔ´ÂëµÄÈË·¢Ìû×ÓÒªÔ´³ÌÐò£¬µ«ÊÇ´ó¶àÖ»ÊÇÍøÒ³Ð´ÁËÒ»´ó¶Ñ´úÂ롣ûÓÐÓã¡ÎªÊ²Ã´ÄØ£¿ÄãÔõô֪µÀÈ˼ÒÓÃʲô¿Ø¼þ£¬Ê²Ã´¹¦ÄÜÄØ£¿»¹ÊÇÀÏÀÏʵʵµÄ×Ô¼ºÐ´°É¡£Ã»Ê²Ã´µÄ£¬ºÜ¼òµ¥µÄ°¡¡£ËµÊµ»°£¬Õâ¸ö³ÌÐòÖ»ÒªÄã°Ñ¸¡ÔêµÄÐÄ·ÅÏÂÀ´Ð´¾Í¿ÉÒÔÁË¡£ÎÒ×Ô´Ó±ÏҵһֱûÓÐ×ö¹ýWINDOWS±à³Ì£¬¶¼ÊÇÖ±½Ó¶Ôµ¥Æ¬»úµÄ£¬ÉÏѧÄÇ»áÒ²ÊÇÌìÌìÀÖºôºôµÄ£¬Ã»Ñ§µ½Ê²
ô¶«Î÷£¬¾ÍÕâÑùÎÒ»¹²»ÊǸ㶨ÁËÂ𣿣¨µ±È»Õâ¸ö½¨Á¢ÔÚ¿´ÍøÉÏÄǶÑÔ´³ÌÐòµÄ»ù´¡ÉÏ£©¡£
ÏÖÔÚÎҾͰÑÕâ¸ö³ÌÐò·¢ÔÚÍøÒ³ÉÏ£¬Õâ¸ö³ÌÐòÒѾµ÷ͨÁË£¬Ð´ÔÚÕâÀïµÄÄ¿µÄÊÇÈôó¼Ò×ö¸ö³ÌÐò²Î¿¼£¬ÄãÒ²²»ÖªµÀÎÒ½çÃæÉϵĿؼþ£¬ËùÒÔûÓбØÒª¸´ÖÆÕ³Ìù¡££¨²»ÊÇÎÒÐ¡Æø£¬ÊÇÒòΪÕâ¸ö¹¤³ÌÉæ¼°µ½¹«Ë¾»úÃÜ£¬Õâ¸ö²úÆ·»¹Ã»ÓÐËͼ죬ËùÒÔ²»¸ø¡£ ·¢²¼°¡£¬ÍûÁ½⣩»¶Ó´ó¼ÒºÍÎÒÌÖÂÛ£¬Ð»Ð»£¡ 'Global Data Definitions
Dim MyHandle As Long 'Handle to Connection
Dim MyStatus As Integer 'Status returned from mbMasterV7 Control Dim Slave As Integer 'Slave, Cmd, Address, & Length Dim Cmd As Integer Dim Address As Long Dim Length As Integer Dim LoopbackMsg(20) As Byte
Public Sub show_status(ErrCode As Integer) If (ErrCode = 0) Then
STATUS.Text = \Õý³£Í¨ÐÐing\ ElseIf (ErrCode < 255) Then
' STATUS.Text = \ STATUS.Text = \´ÓÉ豸ûÓÐÏìÓ¦\ ElseIf (ErrCode = 256) Then STATUS.Text = \ÎÞЧÁ¬½Ó\ ElseIf (ErrCode = 257) Then STATUS.Text = \ÏûÏ¢³¬Ê±\ ElseIf (ErrCode = 258) Then STATUS.Text = \ÎÞЧµØÖ·\ ElseIf (ErrCode = 259) Then STATUS.Text = \ÎÞЧ´ÓÉ豸µØÖ·\ ElseIf (ErrCode = 260) Then
STATUS.Text = \ÎÞЧÊý¾Ý³¤¶È\ ElseIf (ErrCode = 261) Then
STATUS.Text = \²»Ö§³ÖmodbusÃüÁî¸ñʽ\ ElseIf (ErrCode = 263) Then STATUS.Text = \´ÓÉ豸³¬Ê±\ ElseIf (ErrCode = 264) Then STATUS.Text = \ÎÞЧ´«Êäģʽ\ ElseIf (ErrCode = 265) Then STATUS.Text = \УÑé´íÎó\ ElseIf (ErrCode = 266) Then STATUS.Text = \ûÓн¨Á¢Á¬½Ó\ ElseIf (ErrCode = 267) Then STATUS.Text = \ÎÞЧ´ÓÉ豸ÏìÓ¦\ ElseIf (ErrCode = 271) Then STATUS.Text = \ÑÝʾʱ¼äµ½\ ElseIf (ErrCode = 272) Then
STATUS.Text = \ÎÞЧ modbus/TCP ÃüÁî\ End If End Sub
' Hide the contrtol when the form loads Private Sub Form_Activate() MbMasterV71.HideControl End Sub
' Handler for the CONNECT SERIAL Button Private Sub ConnectSerial_Click() ' Connect to COMM Port
MbMasterV71.BaudRate = 9600 '9600 Baud
MbMasterV71.Parity = 0 '0=NOPARITY, 1=ODDPARITY, 2=EVENPARITY,
3=MARKPARITY, 4=SPACEPARITY
MbMasterV71.DataBits = 8 '8 DataBits
MbMasterV71.StopBits = 0 '0=ONESTOPBIT, 1=ONE5STOPBITS, 2=TWOSTOPBITS
MbMasterV71.TimeOut = 2000 '2000 msec
MbMasterV71.TransmissionMode = 1 '0=ASCII, 1=RTU
MyHandle = MbMasterV71.ConnectSerial(1) ' Connect to COMM Port 1 If MyHandle > 0 Then
' Connection was successful
' (This example only allows a single connection) ' Disable All Connection Buttons
' Enable the Read, Write & Disconnect Buttons ConnectSerial.Enabled = False ConnectTAPI.Enabled = False ConnectTCP.Enabled = False Disconnect.Enabled = True ' LoopBackTst.Enabled = True STATUS.Text = \ÕýÔÚÁ¬½Óing\ READMODBUS.Enabled = True WRITEMODBUS.Enabled = True Else
'Connection Attempt Failed
'(Another application must have control of the COM Port) STATUS.Text = \´®¿Ú棬ÇëÉÔºò\ End If End Sub
' Handler for the CONNECT TAPI Button Private Sub ConnectTAPI_Click()
Dim nTAPIDevices As Long Dim TAPIDevice As String
'Go through the motions of getting the TAPI Device List nTAPIDevices = MbMasterV71.NumberOfTAPIDevices() TAPIDevice = MbMasterV71.GetTAPIDeviceName(0) 'Setup the phone number to dial MbMasterV71.PhoneNumber = \ 'Dial the call
MyHandle = MbMasterV71.DialTAPIDevice(0) If MyHandle > 0 Then
'Call should be in progress now 'Don't enable the Read & Write Buttons 'until we get the CallEstablished Event STATUS.Text = \ÕýÔÚÁ¬½Óing\ ConnectSerial.Enabled = False ConnectTAPI.Enabled = False ConnectTCP.Enabled = False Disconnect.Enabled = False 'LoopBackTst.Enabled = False READMODBUS.Enabled = False WRITEMODBUS.Enabled = False Else
STATUS.Text = \ûÓÐÁ¬½Ó\ End If End Sub
' Handler for the CONNECT TCP Button Private Sub ConnectTCP_Click() ' Select the Device to connec to
' In this case use the IP Loopback address to
' connect to the local machine MbMasterV71.TCPDevice = \
MyHandle = MbMasterV71.ConnectModbusTCP(502) If MyHandle > 0 Then
'Connection should be in progress now 'Don't enable the Read & Write Buttons 'until we get the CallEstablished Event STATUS.Text = \ÕýÔÚÁ¬½Óing\ ConnectSerial.Enabled = False ConnectTAPI.Enabled = False ConnectTCP.Enabled = False Disconnect.Enabled = False ' LoopBackTst.Enabled = False READMODBUS.Enabled = False WRITEMODBUS.Enabled = False Else
STATUS.Text = \ûÓÐÁ¬½Ó\ End If End Sub
' ConnectionEstablished Event Handler
' Initiated from either ConnectModbusTCP() or DialTAPIDevice() Private Sub MbMasterV71_ConnectionEstablished(ByVal hConnect As Long) 'Enable the Disconnect Button 'Enable Read & Write Buttons ConnectSerial.Enabled = False ConnectTAPI.Enabled = False ConnectTCP.Enabled = False
Disconnect.Enabled = True 'LoopBackTst.Enabled = True STATUS.Text = \Õý³£Í¨ÐÅing\ READMODBUS.Enabled = True WRITEMODBUS.Enabled = True End Sub
' ConnectionDropped Event Handler
Private Sub MbMasterV71_ConnectionDropped(ByVal hConnect As Long) 'Either the TCP or TAPI connection attempt failed
'or something has happened to abort the connection after it 'has been established for a while.
'In either case we're now disconnected so enable the 'buttons accordingly MyHandle = -1
ConnectSerial.Enabled = True ConnectTAPI.Enabled = True ConnectTCP.Enabled = True Disconnect.Enabled = False 'LoopBackTst.Enabled = False STATUS.Text = \ûÓÐÁ¬½Ó\ READMODBUS.Enabled = False WRITEMODBUS.Enabled = False End Sub
' Handler for the DISCONNECT Button Private Sub Disconnect_Click() 'Tell the control to Disconnect
MyStatus = MbMasterV71.Disconnect(MyHandle) MyHandle = -1
'ReEnable the Connect Buttons for new connection attempt ConnectSerial.Enabled = True ConnectTAPI.Enabled = True ConnectTCP.Enabled = True Disconnect.Enabled = False 'LoopBackTst.Enabled = False STATUS.Text = \ûÓÐÁ¬½Ó\ READMODBUS.Enabled = False WRITEMODBUS.Enabled = False End Sub
Private Sub Frame2_DragDrop(Source As Control, X As Single, Y As Single) End Sub
' Handler for the READ Button Private Sub READMODBUS_Click()
'Get the Slave Node Address, Modbus Command, Address & Length ' from the appropriate Edit controls Slave = NODEADDRESS.Text Cmd = POINTTYPE.Text Address = READADDRESS.Text Length = READLENGTH.Text
'We must remember these parameters so we can use 'them in the ReadResponse method to make sure we 'get what we ask for '
'Initiate the Read Request
MyStatus = MbMasterV71.PollModbus(MyHandle, Slave, Cmd, Address, Length)
'Check the status to make sure the request went out.
If MyStatus = 0 Then
STATUS.Text = \´®¿Úæ,ÇëÉÔºî\ Else
show_status (MyStatus) End If End Sub
'Process the Slave Read Response Message 'Modbus_Master SlaveReadResponse Event Handler
Private Sub MbMasterV71_SlaveReadResponse(ByVal hConnect As Long) Dim MyData As Long Dim i As Integer
' Read the data returned from the slave ' and update the text controls For i = 0 To Length - 1
MyStatus = MbMasterV71.ReadResults(hConnect, Slave, Cmd, Address + i, MyData)
show_status (MyStatus) If MyStatus = 0 Then 'Text1(i).Text = MyData
If i = 0 Or i = 8 Or i = 16 Then Text1(i).Text = MyData * ϵÊý End If
If i = 2 Or i = 10 Or i = 18 Then Text1(i).Text = MyData * ϵÊý End If
If i = 4 Or i = 12 Or i = 20 Or i = 6 Or i = 14 Or i = 22 Then Text1(i).Text = MyData * ϵÊý End If
If i = 28 Or i = 30 Then '3P,3Q
Text1(i).Text = MyData * ϵÊý End If
If i = 29 Then 'cosq
Text1(i).Text = MyData * ϵÊý End If
If i = 27 Then 'F
Text1(i).Text = MyData * ϵÊý End If
If i = 1 Or i = 5 Or i = 7 Or i = 9 Or i = 13 Or i = 15 Or i = 17 Or i = 21 Or i = 23 Or i = 25 Or i = 23 Or i = 26 Or i = 31 Then Text1(i).Text = 0 'ûÓвâÁ¿µÄÁ¿Ä¬ÈÏΪ0 End If ' Else
' Text1(i).Text = \ End If Next i End Sub
Private Sub WRITEMODBUS_Click() Dim IsRegister As Boolean Dim i As Integer Dim junk As Integer
Slave = NODEADDRESS.Text Address = WRITEADDRESS.Text
Length = WRITELENGTH.Text If Length > 200 Then Length = 200 End If
For i = 0 To Length - 1
junk = MbMasterV71.FillWriteBuffer(MyHandle, i, PATTERN.Text) Next i
If POINTTYPE.Text < 2 Then If Length = 1 Then
Cmd = 5 'write single coil Else
Cmd = 15 'write multiple coils End If Else
If Length = 1 Then
Cmd = 6 'write single register Else
Cmd = 16 'write multiple registers End If End If
MyStatus = MbMasterV71.WRITEMODBUS(MyHandle, Slave, Cmd, Address, Length)
' Make sure the write request was transmitted If MyStatus = 0 Then
STATUS.Text = \´®¿Úæ,ÇëÉÔºî\ Else
show_status (MyStatus) End If
End Sub
'Process the Slave Write Response Message 'Modbus_Master SlaveWriteResponse Event Handler
Private Sub MbMasterV71_SlaveWriteResponse(ByVal hConnect As Long) 'read the results of the write request
MyStatus = MbMasterV71.WriteResults(hConnect, Slave, Cmd, Address, Length)
' and update the status display show_status (MyStatus) End Sub
Private Sub LoopBackTst_Click() Slave = NODEADDRESS.Text Cmd = 8
MyStatus = MbMasterV71.FillUserMsgBuffer(MyHandle, 0, Slave) MyStatus = MbMasterV71.FillUserMsgBuffer(MyHandle, 1, Cmd) MyStatus = MbMasterV71.FillUserMsgBuffer(MyHandle, 2, 0) MyStatus = MbMasterV71.FillUserMsgBuffer(MyHandle, 3, 0) MyStatus = MbMasterV71.FillUserMsgBuffer(MyHandle, 4, 0) MyStatus = MbMasterV71.FillUserMsgBuffer(MyHandle, 5, 0)
MyStatus = MbMasterV71.SendUserMsg(MyHandle, 6) 'Check the status to make sure the request went out. If MyStatus = 0 Then
STATUS.Text = \´®¿Úæ,ÇëÉÔºî\ Else
show_status (MyStatus)
End If End Sub
Private Sub MbMasterV71_UserMsgResponse(ByVal hConnect As Long, ByVal NumberOfBytes As Long) Dim temp As Integer
If NumberOfBytes > 0 Then
For i = 0 To NumberOfBytes - 1
MyStatus = MbMasterV71.ReadUserMsgResponse(hConnect, i, temp)
LoopbackMsg(i) = temp Next i
STATUS.Text = LoopbackMsg End If End Sub