ÓÃVB±àдmodbusÔ´´úÂëµÄ¹ý³Ì ÏÂÔØ±¾ÎÄ

ÓÃ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