'Activity module ' Pour INTERFACE ETHERNET Multi IN OUT Sub Process_Globals 'These global variables will be declared once when the application starts. 'These variables can be accessed from all modules. Dim UDPSocket1 As UDPSocket Dim IP As String Dim PORT As Int Dim MDP As String Dim Timer1 As Timer ' Timer pour la lecture en boucle des données: In analog, In digit et température. End Sub Sub Globals 'These global variables will be redeclared each time the activity is created. 'These variables can only be accessed from this module. Dim scvMain As ScrollView Dim PanelNb As Int : PanelNb=4 Dim PanelHeight As Int : PanelHeight=45dip Dim Button1 As Button Dim Button2 As Button Dim Button3 As Button Dim Label2 As Label Dim Panel1 As Panel Dim Panel2 As Panel Dim Panel3 As Panel Dim Panel4 As Panel Dim Label6 As Label Dim Label7 As Label Dim Label8 As Label Dim Label9 As Label Dim Label10 As Label Dim Label11 As Label End Sub Sub Activity_Create(FirstTime As Boolean) Dim i As Int '* On définit les paramètres UDP * If FirstTime=True Then IP="192.168.0.9" ' On définit notre IP. PORT=5030 ' On définit le numéro de PORT MDP="ABCDEFGHIJKLMNOP" ' Mot de passe par defaut composé toujours de 16 caractères !!! UDPSocket1.Initialize("UDP",PORT,45) Timer1.Initialize("Timer1",1000) ' Time = 1 seconde Timer1.Enabled=True ' Active le Timer1. End If Activity.LoadLayout("Main") '* Création et affichage de la listView * scvMain.Initialize(500) Activity.AddView(scvMain, 0, 40%y, 100%x, 75%y) For i=0 To PanelNb-1 Dim pnltest As Panel Dim label_Gauche As Label Dim btnON As Button Dim btnOFF As Button Dim btnBistable As Button pnltest.Initialize("pnlTest") scvMain.Panel.AddView(pnltest,0,5dip+i*PanelHeight,100%x,PanelHeight) pnltest.Tag=i If (i Mod 2)=1 Then pnltest.Color=Colors.Magenta Else pnltest.Color=Colors.Blue End If '* Affiche le texte "Sorties n° X" à gauche.* label_Gauche.Initialize("lbl_Gauche") pnltest.AddView(label_Gauche,10dip, 5dip, 120dip, 40dip) label_Gauche.Tag=i label_Gauche.TextSize=20 label_Gauche.Text="Relais n° "&(i+1) '******************************************** '* Affiche les boutons ON * btnON.Initialize("btnON") pnltest.AddView(btnON,120dip, 5dip, 50dip, 40dip) btnON.Tag=i btnON.Text="ON" '************************* '* Affiche les boutons OFF * btnOFF.Initialize("btnOFF") pnltest.AddView(btnOFF,175dip, 5dip, 50dip, 40dip) btnOFF.Tag=i btnOFF.Text="OFF" '************************* '* Affiche les boutons Bistable * btnBistable.Initialize("btnBistable") pnltest.AddView(btnBistable,230dip, 5dip, 80dip, 40dip) btnBistable.Tag=i btnBistable.Text="Bistable" '************************* Next scvMain.Panel.Height=PanelNb*PanelHeight '************************************************ Activity.Title="Interface Ethernet Multi IN OUT" ' Titre de l'application ToastMessageShow("IP: " & IP & " et PORT: " & PORT, False) ' Affichage furtif de l'IP et du PORT. End Sub Sub Activity_Resume End Sub Sub Activity_Pause (UserClosed As Boolean) Timer1.Enabled=False ' Arrête le Timer1. UDPSocket1.Close ' Referme le Socket UDP. End Sub Sub UDP_PacketArrived (Packet As UDPPacket) ' Réception des paquets UDP Dim CARAC As String Dim CHAINE As String Dim IND0 As String Dim IND1 As String Dim IND2 As String Dim IND3 As String Dim INA0 As String Dim VINA0 As Double Dim INA1 As String Dim VINA1 As Double Dim INA2 As String Dim VINA2 As Double Dim INA3 As String Dim VINA3 As Double Dim INA4 As String Dim VINA4 As Double Dim INA5 As String Dim VINA5 As Double Dim MILLE As String Dim CENT As String Dim DIX As String Dim UNIT As String Dim TEMP As String Dim TEMPERATURE As Double Dim SIGNE As String CARAC = BytesToString(Packet.Data, Packet.Offset, Packet.Length, "UTF8") If CARAC<>" " Then ' Doit être différent de ESPACE pour le traitement des informations reçues. 'Label2.Text=CARAC ' Ne sert qu'au développement du programme pour afficher la chaine de caractères complete envoyée par le PIC. CHAINE = CARAC ' Transfert de la chaine dans une autre afin d'effectuer le traitement. '* Traitement : IND0 * IND0 = CHAINE.SubString2(0,1) ' Retourne le premier caractère de la chaine. If IND0="o" Then Panel1.Color=Colors.Green End If If IND0="f" Then Panel1.Color=Colors.Red End If '* Traitement : IND1 * IND1 = CHAINE.SubString2(1,2) ' Retourne le second caractère de la chaine. If IND1="o" Then Panel2.Color=Colors.Green End If If IND1="f" Then Panel2.Color=Colors.Red End If '* Traitement : IND2 * IND2 = CHAINE.SubString2(2,3) ' Retourne le troisième caractère de la chaine. If IND2="o" Then Panel3.Color=Colors.Green End If If IND2="f" Then Panel3.Color=Colors.Red End If '* Traitement : IND3 * IND3 = CHAINE.SubString2(3,4) ' Retourne le quatrième caractère de la chaine. If IND3="o" Then Panel4.Color=Colors.Green End If If IND3="f" Then Panel4.Color=Colors.Red End If '* Traitement : INA0 MILLE=CHAINE.SubString2(5,6) CENT=CHAINE.SubString2(6,7) DIX=CHAINE.SubString2(7,8) UNIT=CHAINE.SubString2(8,9) INA0=((1000*MILLE) + (100*CENT) + (10*DIX) + UNIT) VINA0=(5/1024) * INA0 VINA0=Round2(VINA0, 3) ' Arrondie le résultat à 3 chiffres après la virgule Label6.Text="INA0: "&INA0& " - Tension: "&VINA0& " Volts" '* Traitement : INA1 MILLE=CHAINE.SubString2(11,12) CENT=CHAINE.SubString2(12,13) DIX=CHAINE.SubString2(13,14) UNIT=CHAINE.SubString2(14,15) INA1=((1000*MILLE) + (100*CENT) + (10*DIX) + UNIT) VINA1=(5/1024) * INA1 VINA1=Round2(VINA1, 3) ' Arrondie le résultat à 3 chiffres après la virgule Label7.Text="INA1: "&INA1& " - Tension: "&VINA1& " Volts" '* Traitement : INA2 MILLE=CHAINE.SubString2(17,18) CENT=CHAINE.SubString2(18,19) DIX=CHAINE.SubString2(19,20) UNIT=CHAINE.SubString2(20,21) INA2=((1000*MILLE) + (100*CENT) + (10*DIX) + UNIT) VINA2=(5/1024) * INA2 VINA2=Round2(VINA2, 3) ' Arrondie le résultat à 3 chiffres après la virgule Label8.Text="INA2: "&INA2& " - Tension: "&VINA2& " Volts" '* Traitement : INA3 MILLE=CHAINE.SubString2(23,24) CENT=CHAINE.SubString2(24,25) DIX=CHAINE.SubString2(25,26) UNIT=CHAINE.SubString2(26,27) INA3=((1000*MILLE) + (100*CENT) + (10*DIX) + UNIT) VINA3=(5/1024) * INA3 VINA3=Round2(VINA3, 3) ' Arrondie le résultat à 3 chiffres après la virgule Label9.Text="INA3: "&INA3& " - Tension: "&VINA3& " Volts" '* Traitement : INA4 MILLE=CHAINE.SubString2(29,30) CENT=CHAINE.SubString2(30,31) DIX=CHAINE.SubString2(31,32) UNIT=CHAINE.SubString2(32,33) INA4=((1000*MILLE) + (100*CENT) + (10*DIX) + UNIT) VINA4=(5/1024) * INA4 VINA4=Round2(VINA4, 3) ' Arrondie le résultat à 3 chiffres après la virgule Label10.Text="INA4: "&INA4& " - Tension: "&VINA4& " Volts" '* Traitement de la température MILLE=CHAINE.SubString2(36,37) CENT=CHAINE.SubString2(37,38) DIX=CHAINE.SubString2(38,39) UNIT=CHAINE.SubString2(39,40) TEMP=((1000*MILLE) + (100*CENT) + (10*DIX) + UNIT) TEMPERATURE=TEMP / 10 TEMPERATURE=Round2(TEMPERATURE, 1) ' Arrondie le résultat à 1 chiffre après la virgule SIGNE=CHAINE.SubString2(33,34) If SIGNE="+" Then Label11.Text="+"&TEMPERATURE&"°C" End If If SIGNE="-" Then Label11.Text="-"&TEMPERATURE&"°C" End If End If End Sub Sub Timer1_Tick ' Récupération. Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"INPUT").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End Sub Sub btnON_Click ' Gestion des 16 Boutons ON Dim Send As Button Send=Sender If Send.Tag=0 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S01N").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=1 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S02N").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=2 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S03N").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=3 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S04N").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If End Sub Sub btnOFF_Click ' Gestion des 16 Boutons OFF Dim Send As Button Send=Sender If Send.Tag=0 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S01F").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=1 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S02F").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=2 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S03F").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=3 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S04F").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If End Sub Sub btnBistable_Click ' Gestion des 16 Boutons Bistable Dim Send As Button Send=Sender If Send.Tag=0 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S01T").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=1 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S02T").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=2 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S03T").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If If Send.Tag=3 Then Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"S04T").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End If End Sub Sub Button1_Click ' Bouton permettant de mettre toutes les Relais actifs Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"N$").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End Sub Sub Button2_Click ' Bouton permettant de mettre toutes les Relais inactifs Dim Packet As UDPPacket Dim DATA() As Byte DATA = (MDP&"F$").GetBytes("UTF8") Packet.Initialize(DATA, IP, PORT) UDPSocket1.Send(Packet) End Sub Sub Button3_Click ' Bouton Quitter l'application. Timer1.Enabled=False ' Arrête le Timer1. UDPSocket1.Close ' Referme le Socket UDP Activity.Finish ' Quitter l'application End Sub