1+ # -------------------------------------------------------------------------
2+ # Copyright (c) PTC Inc. and/or all its affiliates. All rights reserved.
3+ # See License.txt in the project root for
4+ # license information.
5+ # --------------------------------------------------------------------------
6+
7+ # GE EGD Exchanges Example - Example on how to manage exchanges, ranges within
8+ # an exchange and name resolution components for the GE Ethernet Global Data
9+ # driver through the Kepware Configuration API
10+
11+
12+ from kepconfig import connection , error
13+ from kepconfig .connectivity import channel , device , tag , egd
14+ import json
15+ import time
16+
17+ # Channel and Device name to be used
18+ ch_name = 'EGD'
19+ dev_name = 'Device1'
20+
21+ egd_device = {
22+ "common.ALLTYPES_NAME" : ch_name ,
23+ "servermain.MULTIPLE_TYPES_DEVICE_DRIVER" : "GE Ethernet Global Data" ,
24+ "devices" : [{
25+ "common.ALLTYPES_NAME" : dev_name ,
26+ "servermain.MULTIPLE_TYPES_DEVICE_DRIVER" : "GE Ethernet Global Data"
27+ }]
28+ }
29+
30+ def HTTPErrorHandler (err ):
31+ # Generic Handler for exception errors
32+ if err .__class__ is error .KepHTTPError :
33+ print (err .code )
34+ print (err .msg )
35+ print (err .url )
36+ print (err .hdrs )
37+ print (err .payload )
38+ elif err .__class__ is error .KepURLError :
39+ print (err .url )
40+ print (err .reason )
41+ else :
42+ print ('Different Exception Received: {}' .format (err ))
43+
44+
45+ # This creates a server reference that is used to target all modifications of
46+ # the Kepware configuration
47+ server = connection .server (host = '127.0.0.1' , port = 57412 , user = 'Administrator' , pw = '' )
48+
49+ # Add a EGD Channel and Device
50+ try :
51+ print ("{} - {}" .format ("Adding EGD Channel and Device:" , channel .add_channel (server ,egd_device )))
52+ except Exception as err :
53+ HTTPErrorHandler (err )
54+
55+ #####################################################################
56+ # Examples of managing Exchanges and Ranges in the Exchanges
57+ #####################################################################
58+
59+
60+ # Adding Exchanges to the device - Multiple exchanges can be added by creating a list of exchanges
61+ consumer_exchange = {
62+ "common.ALLTYPES_NAME" : "0" ,
63+ "common.ALLTYPES_DESCRIPTION" : "" ,
64+ "ge_ethernet_global_data.CONSUMER_EXCHANGE_ID" : 0 ,
65+ "ge_ethernet_global_data.CONSUMER_EXCHANGE_NUMBER" : 1 ,
66+ "ge_ethernet_global_data.CONSUMER_EXCHANGE_PRODUCER_ID" : "192.168.1.130" ,
67+ "ge_ethernet_global_data.CONSUMER_EXCHANGE_GROUP_ID" : 1 ,
68+ "ge_ethernet_global_data.CONSUMER_EXCHANGE_CONSUMED_PERIOD_MS" : 1000 ,
69+ "ge_ethernet_global_data.CONSUMER_EXCHANGE_UPDATE_TIMEOUT_MS" : 10000
70+ }
71+
72+ try :
73+ print ("{} - {}" .format ("Adding Consumer Exchange:" , egd .exchange .add_exchange (server , ch_name + '.' + dev_name , egd .CONSUMER_EXCHANGE , consumer_exchange )))
74+ except Exception as err :
75+ HTTPErrorHandler (err )
76+
77+ producer_exchange = {
78+ "common.ALLTYPES_NAME" : "0" ,
79+ "common.ALLTYPES_DESCRIPTION" : "" ,
80+ "ge_ethernet_global_data.PRODUCER_EXCHANGE_ID" : 0 ,
81+ "ge_ethernet_global_data.PRODUCER_EXCHANGE_NUMBER" : 0 ,
82+ "ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_TYPE" : 1 ,
83+ 'ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_GROUP_ID' :0 ,
84+ "ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_IP" : "10.10.10.10" ,
85+ 'ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_NAME' : '' ,
86+ "ge_ethernet_global_data.PRODUCER_EXCHANGE_PRODUCER_INTERVAL_MS" : 10
87+ }
88+
89+ try :
90+ print ("{} - {}" .format ("Adding Producer Exchange:" , egd .exchange .add_exchange (server , ch_name + '.' + dev_name , egd .PRODUCER_EXCHANGE , producer_exchange )))
91+ except Exception as err :
92+ HTTPErrorHandler (err )
93+
94+ # Modify an Exchange
95+ try :
96+ print ("{} - {}" .format ("Modify Consumer Exchange:" , egd .exchange .modify_exchange (server , ch_name + '.' + dev_name , egd .CONSUMER_EXCHANGE ,
97+ {"ge_ethernet_global_data.CONSUMER_EXCHANGE_NUMBER" : 2 }, consumer_exchange ['common.ALLTYPES_NAME' ])))
98+ except Exception as err :
99+ HTTPErrorHandler (err )
100+
101+ # Get Exchange Properties
102+ try :
103+ print ("{} - {}" .format ("Read Consumer Exchange {}:" .format (consumer_exchange ['common.ALLTYPES_NAME' ]),
104+ egd .exchange .get_exchange (server , ch_name + '.' + dev_name , egd .CONSUMER_EXCHANGE , consumer_exchange ['common.ALLTYPES_NAME' ])))
105+ except Exception as err :
106+ HTTPErrorHandler (err )
107+
108+ # Get all Consumer/Producer Exchanges
109+ try :
110+ print ("{} - {}" .format ("Read all Consumer Exchanges:" ,
111+ egd .exchange .get_exchange (server , ch_name + '.' + dev_name , egd .CONSUMER_EXCHANGE )))
112+ except Exception as err :
113+ HTTPErrorHandler (err )
114+
115+ # Get all Exchanges
116+ try :
117+ print ("{} - {}" .format ("Read all Exchanges:" ,
118+ egd .exchange .get_all_exchanges (server , ch_name + '.' + dev_name )))
119+ except Exception as err :
120+ HTTPErrorHandler (err )
121+
122+ # Delete Exchange
123+ try :
124+ print ("{} - {}" .format ("Deleting Producer Exchange {}:" .format (producer_exchange ['common.ALLTYPES_NAME' ]),
125+ egd .exchange .del_exchange (server , ch_name + '.' + dev_name , egd .PRODUCER_EXCHANGE , producer_exchange ['common.ALLTYPES_NAME' ])))
126+ except Exception as err :
127+ HTTPErrorHandler (err )
128+
129+ # Adding a Range - Multiple ranges can be added by creating a list of ranges
130+ range = {
131+ "common.ALLTYPES_NAME" : "Range_0" ,
132+ "common.ALLTYPES_DESCRIPTION" : "" ,
133+ "ge_ethernet_global_data.RANGE_INDEX" : 1 ,
134+ "ge_ethernet_global_data.RANGE_OFFSET" : 0 ,
135+ "ge_ethernet_global_data.RANGE_REFERENCE" : 0 ,
136+ "ge_ethernet_global_data.RANGE_LOW_POINT" : 0 ,
137+ "ge_ethernet_global_data.RANGE_HIGH_POINT" : 8
138+ }
139+
140+ try :
141+ print ("{} - {}" .format ("Adding a Range to a Consumer Exchange:" , egd .range .add_range (server , ch_name + '.' + dev_name ,
142+ egd .CONSUMER_EXCHANGE , consumer_exchange ['common.ALLTYPES_NAME' ], range )))
143+ except Exception as err :
144+ HTTPErrorHandler (err )
145+
146+ # Modify a Range
147+ try :
148+ print ("{} - {}" .format ("Modify a Range to a Consumer Exchange:" , egd .range .modify_range (server , ch_name + '.' + dev_name , egd .CONSUMER_EXCHANGE , consumer_exchange ['common.ALLTYPES_NAME' ],
149+ {"ge_ethernet_global_data.CONSUMER_EXCHANGE_NUMBER" : 2 }, range ['common.ALLTYPES_NAME' ])))
150+ except Exception as err :
151+ HTTPErrorHandler (err )
152+
153+ # Get a Range for an Exchange
154+ try :
155+ print ("{} - {}" .format ("Read a Range from a Consumer Exchange - {}:" .format (range ['common.ALLTYPES_NAME' ]), egd .range .get_range (server , ch_name + '.' + dev_name ,
156+ egd .CONSUMER_EXCHANGE , consumer_exchange ['common.ALLTYPES_NAME' ], range ['common.ALLTYPES_NAME' ])))
157+ except Exception as err :
158+ HTTPErrorHandler (err )
159+
160+ # Get all Ranges for an Exchange
161+ try :
162+ print ("{} - {}" .format ("Read all Ranges from a Consumer Exchange:" , egd .range .get_range (server , ch_name + '.' + dev_name ,
163+ egd .CONSUMER_EXCHANGE , consumer_exchange ['common.ALLTYPES_NAME' ])))
164+ except Exception as err :
165+ HTTPErrorHandler (err )
166+
167+ # Delete a Range for an Exchange
168+ try :
169+ print ("{} - {}" .format ("Delete a Range from a Consumer Exchange:" , egd .range .del_range (server , ch_name + '.' + dev_name ,
170+ egd .CONSUMER_EXCHANGE , consumer_exchange ['common.ALLTYPES_NAME' ], range ['common.ALLTYPES_NAME' ])))
171+ except Exception as err :
172+ HTTPErrorHandler (err )
173+
174+ #####################################################################
175+ # Examples of managing Name Resolutions
176+ #####################################################################
177+
178+ # Add a Name Resolution - Multiple name resolutions can be added by creating a list of them
179+ name = {
180+ "common.ALLTYPES_NAME" : "PLC1" ,
181+ "common.ALLTYPES_DESCRIPTION" : "" ,
182+ "ge_ethernet_global_data.NAME_RESOLUTION_ALIAS" : "PLC1" ,
183+ "ge_ethernet_global_data.NAME_RESOLUTION_IP_ADDRESS" : "192.168.1.200"
184+ }
185+
186+ try :
187+ print ("{} - {}" .format ("Adding Name Resolution:" , egd .name .add_name_resolution (server , ch_name + '.' + dev_name , name )))
188+ except Exception as err :
189+ HTTPErrorHandler (err )
190+
191+ # Modify a Name Resolution
192+ try :
193+ print ("{} - {}" .format ("Modify Name Resolution {}:" .format (name ['common.ALLTYPES_NAME' ]), egd .name .modify_name_resolution (server , ch_name + '.' + dev_name ,
194+ {"ge_ethernet_global_data.NAME_RESOLUTION_IP_ADDRESS" : '192.168.1.50' }, name ['common.ALLTYPES_NAME' ])))
195+ except Exception as err :
196+ HTTPErrorHandler (err )
197+
198+ # Get Name Resolution Properties
199+ try :
200+ print ("{} - {}" .format ("Read Name Resolution {}:" .format (name ['common.ALLTYPES_NAME' ]),
201+ egd .name .get_name_resolution (server , ch_name + '.' + dev_name , name ['common.ALLTYPES_NAME' ])))
202+ except Exception as err :
203+ HTTPErrorHandler (err )
204+
205+ # Get all Name Resolutions
206+ try :
207+ print ("{} - {}" .format ("Read All Name Resolutions:" .format (name ['common.ALLTYPES_NAME' ]),
208+ egd .name .get_name_resolution (server , ch_name + '.' + dev_name , name ['common.ALLTYPES_NAME' ])))
209+ except Exception as err :
210+ HTTPErrorHandler (err )
211+
212+ # Delete a Name Resolution
213+ try :
214+ print ("{} - {}" .format ("Delete Name Resolution {}:" .format (name ['common.ALLTYPES_NAME' ]),
215+ egd .name .del_name_resolution (server , ch_name + '.' + dev_name , name ['common.ALLTYPES_NAME' ])))
216+ except Exception as err :
217+ HTTPErrorHandler (err )
0 commit comments