Bonjour,

Je viens faire appel aux lumières des développeurs qui seraient intéressés par le problème que je me pose.

Je vais tenter de faire court afin d'aller directement au coeur du sujet.

Je suis actuellement en stage dans le domaine des automates programmables jusque la il n'y a pas de problème me diriez-vous ?

Le développement sur les automates ne présentent pas de réel problème mais c'est plutôt lorsqu'il s'agit de devoir faire communiquer mon automate avec un PC superviseur

Pour cela nous utilisons le protocole SNMP, je souhaite réaliser un programme qui réalisera des TRAP sur mon automate afin de faire remonter l'état des différentes variables d'entrée-sorties lorsqu'une d'entre elles est modifié (en gros il s'agit d'interruption).

Jusqu'à maintenant (avec un collègue informaticien), nous avons réalisé les fonction WALK, GET et SET et cela fonctionne plutôt bien pour le moment.

Maintenant je dois me débrouiller pour le TRAP car mon collègue est un peu occupé et je souhaite aussi réaliser cette fonction moi-même.

Le soucis est que j'ai très peu de connaissance dans ce domaine mais c'est surtout en programmation que le soucis est majeur, on va dire que je suis loin d'être le plus grand développeur de tout les temps

Je souhaiterais savoir comment réaliser une fonction TRAP en plus de mes fonctions précédentes ?

J'avais eu l'idée de réaliser un GET dont je rafraichirais la fenêtre régulièrement afin d'observer les changements de valeurs des variables mais ce n'est pas vraiment ce que je souhaite, je souhaite que ce soit l'automate qui m'informe via SNMP du changement de valeur et non le superviseur en faisant des requêtes intempestives.

Voici mon code pour réaliser les fonctions WALK, GET et SET.
Ah oui, c'est programmé en C# avec le logiciel Visual Studio.
Bien sûr, je développe sous Windws Xp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
using System;
using System.Collections;
using SNMPDll;


namespace TestSNMPDll
{
	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	class Class1
	{
		
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{

			//LOAD all the MIB found into the directory c:\windows\System32\****************
			Mib myMib = new Mib();

			//Console.WriteLine("**************Loading MIB's files**************");
			//myMib.loadDirectoryMib(Environment.GetFolderPath(Environment.SpecialFolder.System));
			//****************************************************************************


			//**************DISPLAY THE loading MIB************************
			//myMib.walk(@"D:\E2210_V1.5_Release0621.mib");
			//*************************************************************


			//*************INIT SNMP AGENT*********************
			//SNMPAgent myAgent = new SNMPAgent("192.168.127.254","public","public");
			 //if you do that please active the snmp capabilities into your compture : "Add/remove windows component" - "Management and monitoring tools"

			//************INIT SNMP OBJECT*********************
			//	SNMPObject myRequest = new SNMPObject("1.3.6.1.2.1.1.5.0",myMib);
			//	Console.WriteLine();
			//	Console.WriteLine("***************Make the request***************");
			//	Console.WriteLine("I am looking for the value : " + myRequest.getFullName());
			//	Console.WriteLine("My value is : " + myRequest.getSimpleValue(myAgent));
			//	Console.WriteLine("The type of my value is : " + myRequest.getType());
			//	Console.WriteLine("The description of my value is : " + myRequest.getDescription());

			//**********SOME OTHER TEST**********************
		   testWalk("192.168.127.254","1.3.6.1.4.1.8691.10.2210.10.1.1");
			
			//testMultiGet2("192.168.127.254");

			testSet("192.168.127.254");


			Console.WriteLine("\nTerminé !!");
			Console.ReadLine();
		}

		static private void testMultiGet2(string AddrIP)
		{
			Console.WriteLine("test multi get");
			Console.WriteLine("--------------");

			//Add many request you want
			SNMPObject[] s = new SNMPObject[20];
			

			for(int ii=0;ii<20;ii++)
			{
				int j = ii+1;
				s[ii] = new SNMPObject("1.3.6.1.4.1.8691.10.2210.10."+j+".1.4");
			}
	


			SNMPAgent a = new SNMPAgent(AddrIP,"public","private");
			Hashtable ht = a.getValues(s);
			int i = 1;
			while (true)
			{
				if (!ht.Contains(i)) break;
				//Console.WriteLine("oid : " + s[i-1].getOID());

				
				if(i<=12){Console.WriteLine("DI " + (int)(i-1)+" value : " + (string)((Hashtable)ht[i])["value"]);}
				else{Console.WriteLine("DO " + (int)(i-13)+" value : " + (string)((Hashtable)ht[i])["value"]);}
				
				//Console.Write("value : " + (string)((Hashtable)ht[i])["value"]);
				//Console.WriteLine("type : " + (string)((Hashtable)ht[i])["type"]);
				//Console.WriteLine("\n");
				i++;
			}

			Console.WriteLine("");
			
		}
		static private void testMultiGet(string AddrIP)
		{
			Console.WriteLine("test multi get");
			Console.WriteLine("--------------");

			//Add many request you want
			SNMPObject[] s = new SNMPObject[2];
			s[0] = new SNMPObject("1.3.6.1.2.1.1.5.0");
			s[1] = new SNMPObject("1.3.6.1.2.1.2.2.1.16.1");
			


			SNMPAgent a = new SNMPAgent(AddrIP,"public","public");
			Hashtable ht = a.getValues(s);
			int i = 1;
			while (true)
			{
				if (!ht.Contains(i)) break;
				Console.WriteLine("oid : " + s[i-1].getOID());
				Console.WriteLine("value : " + (string)((Hashtable)ht[i])["value"]);
				Console.WriteLine("type : " + (string)((Hashtable)ht[i])["type"]);
				Console.WriteLine("\n");
				i++;
			}

			Console.WriteLine("");
			
		}

		static private void testWalk(string AddrIP, string item_str)
		{
						
			

			Console.WriteLine("test walk");
			Console.WriteLine("---------");

			SNMPObject s = new SNMPObject(item_str);
		//	SNMPObject s = new SNMPObject("1.3.6.1.2.1.2.2.1");
			SNMPAgent a= new SNMPAgent(AddrIP,"public","public");
			
			a.walk(s);
			Console.WriteLine("");
		}

		static private void testSet(string AddrIP)
		{
			string item_str = "1.3.6.1.4.1.8691.10.2210.10.1.1.5.0";

			//This procedure will cause a error on your computer, because you cannot change the name of your computer by an SNMP request
			//But of course this will work on a CISCO switch for example
		
			SNMPAgent myAgent = new SNMPAgent(AddrIP,"public","public");
			Console.WriteLine("test Set");
			Console.WriteLine("--------\n");

			Console.WriteLine("Read the value before the modification");
			//SNMPObject s = new SNMPObject("1.3.6.1.2.1.1.5.0");
			
			SNMPObject s = new SNMPObject(item_str);
			

			Hashtable ht = s.getValue(myAgent);

			Console.WriteLine("oid : " + s.getOID());
			Console.WriteLine("value : " + (string)ht["value"]);
			Console.WriteLine("type : " + (string)ht["type"]);
			Console.WriteLine("");

			Console.WriteLine("Set the value");

			//s = new SNMPObject("1.3.6.1.2.1.1.5.0");

			s = new SNMPObject(item_str);
			//myAgent.setValue(s,SNMPDll.SNMPOIDType.OctetString,1);
			myAgent.setValue(s,SNMPDll.SNMPOIDType.Int,150);
			

			Console.WriteLine("");

			Console.WriteLine("Read the value after the modification");

			//s = new SNMPObject("1.3.6.1.2.1.1.5.0");

			s = new SNMPObject(item_str);
			ht = s.getValue(myAgent);

			Console.WriteLine("oid : " + s.getOID());
			Console.WriteLine("value : " + (string)ht["value"]);
			Console.WriteLine("type : " + (string)ht["type"]);
			




		}
	}
}

Merci pour vos réponses



EDIT : Depuis que j'ai posté j'ai un peu avancé sur le SNMP et le C# mais je suis toujours bloqué sur la manière dont je dois programmer afin d'utiliser le TRAP. Si vous avez des solutions à me proposer ou même des sites à me suggérer sachant que j'ai pas mal cherché sans franc succès .

Merci