Skip to content

Commit ff382d7

Browse files
committed
Example for EGD
1 parent ddd2840 commit ff382d7

1 file changed

Lines changed: 217 additions & 0 deletions

File tree

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
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

Comments
 (0)