--- a/plugins/canfestival/config_utils.py Wed Sep 12 17:16:27 2007 +0200
+++ b/plugins/canfestival/config_utils.py Thu Sep 13 09:01:57 2007 +0200
@@ -321,6 +321,10 @@
@param sync_TPDOs: indicate if TPDO must be synchronous
+ #------------------------------------------------------------------------------- + # Verify that locations correspond to real slave variables + #------------------------------------------------------------------------------- # Get list of locations check if exists and mappables -> put them in IECLocations
for location in locations:
COlocationtype = IECToCOType[location["IEC_TYPE"]]
@@ -353,7 +357,7 @@
if not node.IsEntry(index, subindex):
raise ValueError, "No such index/subindex (%x,%x) in ID : %d (variable %s)" % (index,subindex,nodeid,name)
subentry_infos = node.GetSubentryInfos(index, subindex)
@@ -571,20 +575,59 @@
return dcfgenerator.GetMasterNode()
if __name__ == "__main__":
+Usage of config_utils.py test : + Displays help informations for config_utils + Reset the reference result of config_utils test. + Use with caution. Be sure that config_utils + is currently working properly. + # Boolean that indicate if reference result must be redefined + # Extract command options + opts, args = getopt.getopt(sys.argv[1:], "hr", ["help","reset"]) + except getopt.GetoptError: + # print help information and exit: + if o in ("-h", "--help"): + elif o in ("-r", "--reset"): + # Extract workspace base folder base_folder = sys.path[0]
base_folder = os.path.split(base_folder)[0]
+ # Add CanFestival folder to search pathes sys.path.append(os.path.join(base_folder, "CanFestival-3", "objdictgen"))
from nodemanager import *
+ # Open the test nodelist contained into test_config folder nodelist = NodeList(manager)
result = nodelist.LoadProject("test_config")
+ # List of locations, we try to map for test locations = [{"IEC_TYPE":"BYTE","NAME":"__IB0_1_64_24576_1","DIR":"I","SIZE":"B","LOC":(0,1,64,24576,1)},
{"IEC_TYPE":"INT","NAME":"__IW0_1_64_25601_2","DIR":"I","SIZE":"W","LOC":(0,1,64,25601,2)},
{"IEC_TYPE":"INT","NAME":"__IW0_1_64_25601_3","DIR":"I","SIZE":"W","LOC":(0,1,64,25601,3)},
@@ -595,31 +638,45 @@
{"IEC_TYPE":"UDINT","NAME":"__ID0_1_64_25638_3","DIR":"I","SIZE":"D","LOC":(0,1,64,25638,3)},
{"IEC_TYPE":"UDINT","NAME":"__ID0_1_64_25638_4","DIR":"I","SIZE":"D","LOC":(0,1,64,25638,4)}]
- masternode = GenerateConciseDCF(locations, (0, 1), nodelist, True)
- result = [line.rstrip() for line in masternode.PrintString().splitlines()]
+ # Generate MasterNode configuration + masternode = GenerateConciseDCF(locations, (0, 1), nodelist, True) + except ValueError, message: + print "%s\nTest Failed!"%message + # Get Text corresponding to MasterNode + result = masternode.PrintString() - file = open("test_config/result.txt", "r")
- model = [line.rstrip() for line in file.readlines()]
- for i, line in enumerate(model):
+ # If reset has been choosen + # Write Text into reference result file + file = open("test_config/result.txt", "w") + print "Reset Successful!" + # Test each line of the result with the reference result + test = [line.rstrip() for line in result.splitlines()] + file = open("test_config/result.txt", "r") + model = [line.rstrip() for line in file.readlines() if line.rstrip()] + for i, line in enumerate(model): + print "Line %d disappear :\n%s\n"%(i + 1, line) + print "Error on line %d :\n%s\nInstead of :\n%s\n"%(i + 1, test[i], line) + for i in xrange(len(model), len(test)): - print "Line %d disappear :"%(i + 1)
- elif line != result[i]:
- print "Error on line %d :"%(i + 1)
- print "Instead of :\n\t%s"%line
- for i in xrange(len(model), len(result)):
- print "Line %d appear :"%(i + 1)
- print "Test Successful!"
\ No newline at end of file
+ print "Line %d appear :\n%s\n"%(i + 1, test[i]) + print "%d errors found.\nTest Failed!"%errors + print "Test Successful!" --- a/plugins/canfestival/test_config/result.txt Wed Sep 12 17:16:27 2007 +0200
+++ b/plugins/canfestival/test_config/result.txt Thu Sep 13 09:01:57 2007 +0200
@@ -1,253 +1,253 @@
-1005 (SYNC COB ID): 1073741952
-1006 (Communication / Cycle Period): 50000
+1005 (SYNC COB ID): 40000080 +1006 (Communication / Cycle Period): C350 1016 (Consumer Heartbeat Time):
- 001 (Consumer Heartbeat Time): 4005DC
+1016 01 (Consumer Heartbeat Time): 4005DC
- 003 (Revision Number): 0
+1018 02 (Product Code): 0 +1018 03 (Revision Number): 0 +1018 04 (Serial Number): 0 1280 (Client SDO 1 Parameter):
- 001 (COB ID Client to Server (Transmit SDO)): 640
- 002 (COB ID Server to Client (Receive SDO)): 5C0
- 003 (Node ID of the SDO Server): 40
+1280 01 (COB ID Client to Server (Transmit SDO)): 640 +1280 02 (COB ID Server to Client (Receive SDO)): 5C0 +1280 03 (Node ID of the SDO Server): 40 1400 (Receive PDO 1 Parameter):
- 001 (COB ID used by PDO): 1C0
- 002 (Transmission Type): 1
- 004 (Compatibility Entry): 0
+1400 01 (COB ID used by PDO): 1C0 +1400 02 (Transmission Type): 1 +1400 03 (Inhibit Time): 0 +1400 04 (Compatibility Entry): 0 +1400 05 (Event Timer): 0 1401 (Receive PDO 2 Parameter):
- 001 (COB ID used by PDO): 2C0
- 002 (Transmission Type): 1
- 004 (Compatibility Entry): 0
+1401 01 (COB ID used by PDO): 2C0 +1401 02 (Transmission Type): 1 +1401 03 (Inhibit Time): 0 +1401 04 (Compatibility Entry): 0 +1401 05 (Event Timer): 0 1402 (Receive PDO 3 Parameter):
- 001 (COB ID used by PDO): 182
- 002 (Transmission Type): 1
- 004 (Compatibility Entry): 0
+1402 01 (COB ID used by PDO): 182 +1402 02 (Transmission Type): 1 +1402 03 (Inhibit Time): 0 +1402 04 (Compatibility Entry): 0 +1402 05 (Event Timer): 0 1403 (Receive PDO 4 Parameter):
- 001 (COB ID used by PDO): 183
- 002 (Transmission Type): 1
- 004 (Compatibility Entry): 0
+1403 01 (COB ID used by PDO): 183 +1403 02 (Transmission Type): 1 +1403 03 (Inhibit Time): 0 +1403 04 (Compatibility Entry): 0 +1403 05 (Event Timer): 0 1404 (Receive PDO 5 Parameter):
- 001 (COB ID used by PDO): 180
- 002 (Transmission Type): 1
- 004 (Compatibility Entry): 0
+1404 01 (COB ID used by PDO): 180 +1404 02 (Transmission Type): 1 +1404 03 (Inhibit Time): 0 +1404 04 (Compatibility Entry): 0 +1404 05 (Event Timer): 0 1600 (Receive PDO 1 Mapping):
- 001 (PDO 1 Mapping for an application object 1): 22400108
+1600 01 (PDO 1 Mapping for an application object 1): 22400108 1601 (Receive PDO 2 Mapping):
- 001 (PDO 2 Mapping for an application object 1): 20010310
- 002 (PDO 2 Mapping for an application object 2): 23400110
- 003 (PDO 2 Mapping for an application object 3): 23400210
- 004 (PDO 2 Mapping for an application object 4): 20010310
+1601 01 (PDO 2 Mapping for an application object 1): 20010310 +1601 02 (PDO 2 Mapping for an application object 2): 23400110 +1601 03 (PDO 2 Mapping for an application object 3): 23400210 +1601 04 (PDO 2 Mapping for an application object 4): 20010310 1602 (Receive PDO 3 Mapping):
- 001 (PDO 3 Mapping for an application object 1): 24400120
- 002 (PDO 3 Mapping for an application object 2): 24400220
+1602 01 (PDO 3 Mapping for an application object 1): 24400120 +1602 02 (PDO 3 Mapping for an application object 2): 24400220 1603 (Receive PDO 4 Mapping):
- 001 (PDO 4 Mapping for an application object 1): 24400320
+1603 01 (PDO 4 Mapping for an application object 1): 24400320 1604 (Receive PDO 5 Mapping):
- 001 (PDO 5 Mapping for an application object 1): 22400208
- 002 (PDO 5 Mapping for an application object 2): 24400420
+1604 01 (PDO 5 Mapping for an application object 1): 22400208 +1604 02 (PDO 5 Mapping for an application object 2): 24400420 1800 (Transmit PDO 1 Parameter):
- 001 (COB ID used by PDO): {True:self.ID+(base+1)*0x100+0x80,False:0}[base<4]
- 002 (Transmission Type): 0
- 004 (Compatibility Entry): 0
+1800 01 (COB ID used by PDO): {True:self.ID+(base+1)*0x100+0x80,False:0}[base<4] +1800 02 (Transmission Type): 0 +1800 03 (Inhibit Time): 0 +1800 04 (Compatibility Entry): 0 +1800 05 (Event Timer): 0 1801 (Transmit PDO 2 Parameter):
- 001 (COB ID used by PDO): 340
- 002 (Transmission Type): 1
- 004 (Compatibility Entry): 0
+1801 01 (COB ID used by PDO): 340 +1801 02 (Transmission Type): 1 +1801 03 (Inhibit Time): 0 +1801 04 (Compatibility Entry): 0 +1801 05 (Event Timer): 0 1A00 (Transmit PDO 1 Mapping):
- 001 (PDO 1 Mapping for a process data variable 1): 10010008
+1A00 01 (PDO 1 Mapping for a process data variable 1): 10010008 1A01 (Transmit PDO 2 Mapping):
- 001 (PDO 2 Mapping for a process data variable 1): 43400110
- 002 (PDO 2 Mapping for a process data variable 2): 20010310
- 003 (PDO 2 Mapping for a process data variable 3): 20010310
- 004 (PDO 2 Mapping for a process data variable 4): 20010310
+1A01 01 (PDO 2 Mapping for a process data variable 1): 43400110 +1A01 02 (PDO 2 Mapping for a process data variable 2): 20010310 +1A01 03 (PDO 2 Mapping for a process data variable 3): 20010310 +1A01 04 (PDO 2 Mapping for a process data variable 4): 20010310 - 001 (Concise DCF for Node 1):
- 002 (Concise DCF for Node 2):
- 003 (Concise DCF for Node 3):
- 004 (Concise DCF for Node 4):
- 005 (Concise DCF for Node 5):
- 006 (Concise DCF for Node 6):
- 007 (Concise DCF for Node 7):
- 008 (Concise DCF for Node 8):
- 009 (Concise DCF for Node 9):
- 010 (Concise DCF for Node 10):
- 011 (Concise DCF for Node 11):
- 012 (Concise DCF for Node 12):
- 013 (Concise DCF for Node 13):
- 014 (Concise DCF for Node 14):
- 015 (Concise DCF for Node 15):
- 016 (Concise DCF for Node 16):
- 017 (Concise DCF for Node 17):
- 018 (Concise DCF for Node 18):
- 019 (Concise DCF for Node 19):
- 020 (Concise DCF for Node 20):
- 021 (Concise DCF for Node 21):
- 022 (Concise DCF for Node 22):
- 023 (Concise DCF for Node 23):
- 024 (Concise DCF for Node 24):
- 025 (Concise DCF for Node 25):
- 026 (Concise DCF for Node 26):
- 027 (Concise DCF for Node 27):
- 028 (Concise DCF for Node 28):
- 029 (Concise DCF for Node 29):
- 030 (Concise DCF for Node 30):
- 031 (Concise DCF for Node 31):
- 032 (Concise DCF for Node 32):
- 033 (Concise DCF for Node 33):
- 034 (Concise DCF for Node 34):
- 035 (Concise DCF for Node 35):
- 036 (Concise DCF for Node 36):
- 037 (Concise DCF for Node 37):
- 038 (Concise DCF for Node 38):
- 039 (Concise DCF for Node 39):
- 040 (Concise DCF for Node 40):
- 041 (Concise DCF for Node 41):
- 042 (Concise DCF for Node 42):
- 043 (Concise DCF for Node 43):
- 044 (Concise DCF for Node 44):
- 045 (Concise DCF for Node 45):
- 046 (Concise DCF for Node 46):
- 047 (Concise DCF for Node 47):
- 048 (Concise DCF for Node 48):
- 049 (Concise DCF for Node 49):
- 050 (Concise DCF for Node 50):
- 051 (Concise DCF for Node 51):
- 052 (Concise DCF for Node 52):
- 053 (Concise DCF for Node 53):
- 054 (Concise DCF for Node 54):
- 055 (Concise DCF for Node 55):
- 056 (Concise DCF for Node 56):
- 057 (Concise DCF for Node 57):
- 058 (Concise DCF for Node 58):
- 059 (Concise DCF for Node 59):
- 060 (Concise DCF for Node 60):
- 061 (Concise DCF for Node 61):
- 062 (Concise DCF for Node 62):
- 063 (Concise DCF for Node 63):
- 064 (Concise DCF for Node 64): 26
- 1800 01 00000004 800001C0
- 1800 01 00000004 000001C0
- 1801 01 00000004 800002C0
- 1801 01 00000004 000002C0
- 1801 01 00000004 800002C0
- 1801 01 00000004 000002C0
- 1401 01 00000004 80000340
- 1401 01 00000004 00000340
- 1804 01 00000004 80000180
- 1804 01 00000004 00000180
- 1A04 01 00000004 60020108
- 1A04 02 00000004 64260120
- 1805 01 00000004 80000182
- 1805 01 00000004 00000182
- 1A05 01 00000004 64260220
- 1A05 02 00000004 64260320
- 1806 01 00000004 80000183
- 1806 01 00000004 00000183
- 1A06 01 00000004 64260420
- 065 (Concise DCF for Node 65):
- 066 (Concise DCF for Node 66):
- 067 (Concise DCF for Node 67):
- 068 (Concise DCF for Node 68):
- 069 (Concise DCF for Node 69):
- 070 (Concise DCF for Node 70):
- 071 (Concise DCF for Node 71):
- 072 (Concise DCF for Node 72):
- 073 (Concise DCF for Node 73):
- 074 (Concise DCF for Node 74):
- 075 (Concise DCF for Node 75):
- 076 (Concise DCF for Node 76):
- 077 (Concise DCF for Node 77):
- 078 (Concise DCF for Node 78):
- 079 (Concise DCF for Node 79):
- 080 (Concise DCF for Node 80):
- 081 (Concise DCF for Node 81):
- 082 (Concise DCF for Node 82):
- 083 (Concise DCF for Node 83):
- 084 (Concise DCF for Node 84):
- 085 (Concise DCF for Node 85):
- 086 (Concise DCF for Node 86):
- 087 (Concise DCF for Node 87):
- 088 (Concise DCF for Node 88):
- 089 (Concise DCF for Node 89):
- 090 (Concise DCF for Node 90):
- 091 (Concise DCF for Node 91):
- 092 (Concise DCF for Node 92):
- 093 (Concise DCF for Node 93):
- 094 (Concise DCF for Node 94):
- 095 (Concise DCF for Node 95):
- 096 (Concise DCF for Node 96):
- 097 (Concise DCF for Node 97):
- 098 (Concise DCF for Node 98):
- 099 (Concise DCF for Node 99):
- 100 (Concise DCF for Node 100):
- 101 (Concise DCF for Node 101):
- 102 (Concise DCF for Node 102):
- 103 (Concise DCF for Node 103):
- 104 (Concise DCF for Node 104):
- 105 (Concise DCF for Node 105):
- 106 (Concise DCF for Node 106):
- 107 (Concise DCF for Node 107):
- 108 (Concise DCF for Node 108):
- 109 (Concise DCF for Node 109):
- 110 (Concise DCF for Node 110):
- 111 (Concise DCF for Node 111):
- 112 (Concise DCF for Node 112):
- 113 (Concise DCF for Node 113):
- 114 (Concise DCF for Node 114):
- 115 (Concise DCF for Node 115):
- 116 (Concise DCF for Node 116):
- 117 (Concise DCF for Node 117):
- 118 (Concise DCF for Node 118):
- 119 (Concise DCF for Node 119):
- 120 (Concise DCF for Node 120):
- 121 (Concise DCF for Node 121):
- 122 (Concise DCF for Node 122):
- 123 (Concise DCF for Node 123):
- 124 (Concise DCF for Node 124):
- 125 (Concise DCF for Node 125):
- 126 (Concise DCF for Node 126):
- 127 (Concise DCF for Node 127):
+1F22 01 (Concise DCF for Node 1): +1F22 02 (Concise DCF for Node 2): +1F22 03 (Concise DCF for Node 3): +1F22 04 (Concise DCF for Node 4): +1F22 05 (Concise DCF for Node 5): +1F22 06 (Concise DCF for Node 6): +1F22 07 (Concise DCF for Node 7): +1F22 08 (Concise DCF for Node 8): +1F22 09 (Concise DCF for Node 9): +1F22 0A (Concise DCF for Node 10): +1F22 0B (Concise DCF for Node 11): +1F22 0C (Concise DCF for Node 12): +1F22 0D (Concise DCF for Node 13): +1F22 0E (Concise DCF for Node 14): +1F22 0F (Concise DCF for Node 15): +1F22 10 (Concise DCF for Node 16): +1F22 11 (Concise DCF for Node 17): +1F22 12 (Concise DCF for Node 18): +1F22 13 (Concise DCF for Node 19): +1F22 14 (Concise DCF for Node 20): +1F22 15 (Concise DCF for Node 21): +1F22 16 (Concise DCF for Node 22): +1F22 17 (Concise DCF for Node 23): +1F22 18 (Concise DCF for Node 24): +1F22 19 (Concise DCF for Node 25): +1F22 1A (Concise DCF for Node 26): +1F22 1B (Concise DCF for Node 27): +1F22 1C (Concise DCF for Node 28): +1F22 1D (Concise DCF for Node 29): +1F22 1E (Concise DCF for Node 30): +1F22 1F (Concise DCF for Node 31): +1F22 20 (Concise DCF for Node 32): +1F22 21 (Concise DCF for Node 33): +1F22 22 (Concise DCF for Node 34): +1F22 23 (Concise DCF for Node 35): +1F22 24 (Concise DCF for Node 36): +1F22 25 (Concise DCF for Node 37): +1F22 26 (Concise DCF for Node 38): +1F22 27 (Concise DCF for Node 39): +1F22 28 (Concise DCF for Node 40): +1F22 29 (Concise DCF for Node 41): +1F22 2A (Concise DCF for Node 42): +1F22 2B (Concise DCF for Node 43): +1F22 2C (Concise DCF for Node 44): +1F22 2D (Concise DCF for Node 45): +1F22 2E (Concise DCF for Node 46): +1F22 2F (Concise DCF for Node 47): +1F22 30 (Concise DCF for Node 48): +1F22 31 (Concise DCF for Node 49): +1F22 32 (Concise DCF for Node 50): +1F22 33 (Concise DCF for Node 51): +1F22 34 (Concise DCF for Node 52): +1F22 35 (Concise DCF for Node 53): +1F22 36 (Concise DCF for Node 54): +1F22 37 (Concise DCF for Node 55): +1F22 38 (Concise DCF for Node 56): +1F22 39 (Concise DCF for Node 57): +1F22 3A (Concise DCF for Node 58): +1F22 3B (Concise DCF for Node 59): +1F22 3C (Concise DCF for Node 60): +1F22 3D (Concise DCF for Node 61): +1F22 3E (Concise DCF for Node 62): +1F22 3F (Concise DCF for Node 63): +1F22 40 (Concise DCF for Node 64): 26 arg defined +1F22 40, arg 1: 1800 01 00000004 800001C0 +1F22 40, arg 2: 1800 02 00000001 01 +1F22 40, arg 3: 1800 01 00000004 000001C0 +1F22 40, arg 4: 1801 01 00000004 800002C0 +1F22 40, arg 5: 1801 02 00000001 01 +1F22 40, arg 6: 1801 01 00000004 000002C0 +1F22 40, arg 7: 1801 01 00000004 800002C0 +1F22 40, arg 8: 1801 02 00000001 01 +1F22 40, arg 9: 1801 01 00000004 000002C0 +1F22 40, arg 10: 1401 01 00000004 80000340 +1F22 40, arg 11: 1401 02 00000001 01 +1F22 40, arg 12: 1401 01 00000004 00000340 +1F22 40, arg 13: 1804 01 00000004 80000180 +1F22 40, arg 14: 1804 02 00000001 01 +1F22 40, arg 15: 1804 01 00000004 00000180 +1F22 40, arg 16: 1A04 01 00000004 60020108 +1F22 40, arg 17: 1A04 02 00000004 64260120 +1F22 40, arg 18: 1805 01 00000004 80000182 +1F22 40, arg 19: 1805 02 00000001 01 +1F22 40, arg 20: 1805 01 00000004 00000182 +1F22 40, arg 21: 1A05 01 00000004 64260220 +1F22 40, arg 22: 1A05 02 00000004 64260320 +1F22 40, arg 23: 1806 01 00000004 80000183 +1F22 40, arg 24: 1806 02 00000001 01 +1F22 40, arg 25: 1806 01 00000004 00000183 +1F22 40, arg 26: 1A06 01 00000004 64260420 +1F22 41 (Concise DCF for Node 65): +1F22 42 (Concise DCF for Node 66): +1F22 43 (Concise DCF for Node 67): +1F22 44 (Concise DCF for Node 68): +1F22 45 (Concise DCF for Node 69): +1F22 46 (Concise DCF for Node 70): +1F22 47 (Concise DCF for Node 71): +1F22 48 (Concise DCF for Node 72): +1F22 49 (Concise DCF for Node 73): +1F22 4A (Concise DCF for Node 74): +1F22 4B (Concise DCF for Node 75): +1F22 4C (Concise DCF for Node 76): +1F22 4D (Concise DCF for Node 77): +1F22 4E (Concise DCF for Node 78): +1F22 4F (Concise DCF for Node 79): +1F22 50 (Concise DCF for Node 80): +1F22 51 (Concise DCF for Node 81): +1F22 52 (Concise DCF for Node 82): +1F22 53 (Concise DCF for Node 83): +1F22 54 (Concise DCF for Node 84): +1F22 55 (Concise DCF for Node 85): +1F22 56 (Concise DCF for Node 86): +1F22 57 (Concise DCF for Node 87): +1F22 58 (Concise DCF for Node 88): +1F22 59 (Concise DCF for Node 89): +1F22 5A (Concise DCF for Node 90): +1F22 5B (Concise DCF for Node 91): +1F22 5C (Concise DCF for Node 92): +1F22 5D (Concise DCF for Node 93): +1F22 5E (Concise DCF for Node 94): +1F22 5F (Concise DCF for Node 95): +1F22 60 (Concise DCF for Node 96): +1F22 61 (Concise DCF for Node 97): +1F22 62 (Concise DCF for Node 98): +1F22 63 (Concise DCF for Node 99): +1F22 64 (Concise DCF for Node 100): +1F22 65 (Concise DCF for Node 101): +1F22 66 (Concise DCF for Node 102): +1F22 67 (Concise DCF for Node 103): +1F22 68 (Concise DCF for Node 104): +1F22 69 (Concise DCF for Node 105): +1F22 6A (Concise DCF for Node 106): +1F22 6B (Concise DCF for Node 107): +1F22 6C (Concise DCF for Node 108): +1F22 6D (Concise DCF for Node 109): +1F22 6E (Concise DCF for Node 110): +1F22 6F (Concise DCF for Node 111): +1F22 70 (Concise DCF for Node 112): +1F22 71 (Concise DCF for Node 113): +1F22 72 (Concise DCF for Node 114): +1F22 73 (Concise DCF for Node 115): +1F22 74 (Concise DCF for Node 116): +1F22 75 (Concise DCF for Node 117): +1F22 76 (Concise DCF for Node 118): +1F22 77 (Concise DCF for Node 119): +1F22 78 (Concise DCF for Node 120): +1F22 79 (Concise DCF for Node 121): +1F22 7A (Concise DCF for Node 122): +1F22 7B (Concise DCF for Node 123): +1F22 7C (Concise DCF for Node 124): +1F22 7D (Concise DCF for Node 125): +1F22 7E (Concise DCF for Node 126): +1F22 7F (Concise DCF for Node 127):