1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
| Public Class frmConnexion
Private Sub frmConnexion_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Configuration de la page de Connexion
' Vérouillage des CheckBox
chbxOuverturePort.Enabled = False
chbxConnexionCarte.Enabled = False
chbxConnexionAutomate.Enabled = False
chbxLectureValeurs.Enabled = False
' Ajoute de valeurs dans la ComboBox
cmbxModeComm.Items.Add("Serie")
cmbxModeComm.Items.Add("Ethernet")
' Vérouillage de la ComboBox
cmbxModeComm.DropDownStyle = ComboBoxStyle.DropDownList
' On masque la Saisie d'IP au démarrage
lblAdresse.Visible = False
txtAdresse.Visible = False
End Sub
Private Sub cmbxModeComm_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbxModeComm.TextChanged
'Lorsqu'on choisie le PORT de communication
txtAdresse.Text = "192.168.1.5"
If cmbxModeComm.Text = "Ethernet" Then
'On affiche la saisie d'IP pour l'ethernet
lblAdresse.Visible = True
txtAdresse.Visible = True
Else
'Sinon on cahce la saisie d'IP et on initialise l'adresse
lblAdresse.Visible = False
txtAdresse.Visible = False
End If
End Sub
Private Sub CommunicationAutomate()
Dim localMPI As Integer = 0 'Configuration des adresses PPI / MPI du PC (normalement à 0)
Dim plcMPI As Integer = 2 ' Configuration des adresses PPI / MPI de l'automate (normalement à 2)
Dim IP_Adress As String = txtAdresse.Text ' Configuration de l'adresse IP
Dim fds As libnodave.daveOSserialType
Dim di As libnodave.daveInterface
Dim dc As libnodave.daveConnection
Dim res As Integer
Dim buf(1000) As Byte
Dim inputsRes As Integer
Dim InputBuffer(1000) As Byte ' Buffer pour lire / écrire des entrées
Dim Inputs(6 * 8) As Integer ' Entrées de l'automate -> 6 octets IB0 .. IB5
Dim outputsRes As Integer
Dim OutputBuffer(1000) As Byte ' Buffer pour lire / écrire les sorties
Dim Outputs(6 * 8) As Integer ' Sorties de l'automate -> 6 octets QB0 .. QB5
Dim memoryRes As Integer
Dim MemoryBuffer(1000) As Byte ' Buffer pour lire / écrire des mémoires M
Dim Memory(16 * 8) As Integer ' Memoire M de l'automate -> 15 octets MB0 .. MB14
Dim XMTBuffer(100) As Byte ' Buffer de données transmises à l'automate
If cmbxModeComm.Text = "Serie" Then
' Ouverture du port COM en mode lecture
fds.rfd = libnodave.setPort("com1", "19200", AscW("E")) ' Port=COM1, BaudRate=19200, Parité= Pair
ElseIf cmbxModeComm.Text = "Ethernet" Then
' Ouverture du Socket en mode lecture
fds.rfd = libnodave.openSocket(102, IP_Adress)
Else
' génération d'une erreur
fds.rfd = -10000
End If
' Ouverture de la communication en mode écriture
fds.wfd = fds.rfd
'S'il n'y a pas d'erreur sur l'ouverture du port de communication
If fds.rfd > 0 Then
chbxOuverturePort.Checked = True
' Création d'une nouvelle interface
If cmbxModeComm.Text = "Serie" Then
' daveProtoMPI3 ' MPI pour S7 300/400, Step 7 Version
' vitesse fixé au hasard
di = New libnodave.daveInterface(fds, "My Interface 1", localMPI, libnodave.daveProtoMPI3, libnodave.daveSpeed500k) ' Importante, caso não estejamos a usar PPI, devemos alterar o daveProtoPPI, e caso o baudrate seja diferente, também devemos alterar
ElseIf cmbxModeComm.Text = "Ethernet" Then
'
di = New libnodave.daveInterface(fds, "IF1", localMPI, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
End If
di.setTimeout(100) ' S'il y a trop d'erreur de reception augmentez la valeur
res = di.initAdapter ' Début de l'adaptation
If res = 0 Then
' Si l'adaptation c'est bien passé
chbxConnexionCarte.Checked = True
dc = New libnodave.daveConnection(di, plcMPI, 0, 3)
' créer une nouvelle connexion, Note: le support MPI et l'emplacement ne sont pas importants
res = dc.connectPLC ' On appel l'automate
If res = 0 Then
' Si l'appel c'est bien passé
chbxConnexionAutomate.Checked = True
inputsRes = dc.readBytes(libnodave.daveInputs, 0, 0, 6, InputBuffer) ' Lecture des entrées
outputsRes = dc.readBytes(libnodave.daveOutputs, 0, 0, 6, OutputBuffer) ' Lecture des sorties
memoryRes = dc.readBytes(libnodave.daveFlags, 0, 0, 16, MemoryBuffer) ' Lecture des mémoires
' A chaque lecture on prend du temps/performances
' Il est préférable de lire un grand nombre de données et de les utiliser quand on en a besoin
If inputsRes = 0 And outputsRes = 0 And memoryRes = 0 Then
' Si la lecture c'est bien passée
chbxLectureValeurs.Checked = True
' Pour le fun j'essaye d'afficher le memento Note:valeur qui change tout le temps
MsgBox("memento de cadence =" & MemoryBuffer(0))
Else
' Erreur de lecture des valeurs
MsgBox("Erreur de lecture des valeurs" & vbCrLf & "Error {0:d}={1:s} in readBytes.res = " & res & vbCrLf)
End If
dc.disconnectPLC() ' Déconnexion de l'automate
Else
' Erreur de connexion avec l'automate
MsgBox("Erreur de connexion avec l'automate" & vbCrLf & "Error {0:d}={1:s} in connectPLC.res = " & res & vbCrLf)
End If
di.disconnectAdapter() ' Deconnexion de la carte automate
Else
' Erreur dans la carte automte
MsgBox("Erreur de connexion avec la carte" & vbCrLf & "Error {0:d}={1:s} in initAdapter.res = " & res & vbCrLf)
End If
' Fermeture du PORT
libnodave.closePort(fds.rfd) ' Clean up
Else
' Erreur à l'ouverture du PORT
MsgBox("Erreur à l'ouverture du PORT" & vbCrLf)
End If
End Sub
Private Sub btConnexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btConnexion.Click
Dim InfoBulle As ToolTip
' Nouvelle Info Bulle
InfoBulle = New System.Windows.Forms.ToolTip
' avec un skin plus agréable
InfoBulle.IsBalloon = True
If cmbxModeComm.Text = Nothing Then
InfoBulle.Show("Saisir le Mode de communication", cmbxModeComm, 0, -40, 2000)
Else
CommunicationAutomate()
End If
End Sub
End Class |
Partager