5
5
6
6
7
7
class TestPDO (unittest .TestCase ):
8
-
9
- def test_bit_mapping (self ):
8
+ def setUp (self ):
10
9
node = canopen .Node (1 , SAMPLE_EDS )
11
- map = node .pdo .tx [1 ]
12
- map .add_variable ('INTEGER16 value' ) # 0x2001
13
- map .add_variable ('UNSIGNED8 value' , length = 4 ) # 0x2002
14
- map .add_variable ('INTEGER8 value' , length = 4 ) # 0x2003
15
- map .add_variable ('INTEGER32 value' ) # 0x2004
16
- map .add_variable ('BOOLEAN value' , length = 1 ) # 0x2005
17
- map .add_variable ('BOOLEAN value 2' , length = 1 ) # 0x2006
10
+ pdo = node .pdo .tx [1 ]
11
+ pdo .add_variable ('INTEGER16 value' ) # 0x2001
12
+ pdo .add_variable ('UNSIGNED8 value' , length = 4 ) # 0x2002
13
+ pdo .add_variable ('INTEGER8 value' , length = 4 ) # 0x2003
14
+ pdo .add_variable ('INTEGER32 value' ) # 0x2004
15
+ pdo .add_variable ('BOOLEAN value' , length = 1 ) # 0x2005
16
+ pdo .add_variable ('BOOLEAN value 2' , length = 1 ) # 0x2006
18
17
19
18
# Write some values
20
- map ['INTEGER16 value' ].raw = - 3
21
- map ['UNSIGNED8 value' ].raw = 0xf
22
- map ['INTEGER8 value' ].raw = - 2
23
- map ['INTEGER32 value' ].raw = 0x01020304
24
- map ['BOOLEAN value' ].raw = False
25
- map ['BOOLEAN value 2' ].raw = True
19
+ pdo ['INTEGER16 value' ].raw = - 3
20
+ pdo ['UNSIGNED8 value' ].raw = 0xf
21
+ pdo ['INTEGER8 value' ].raw = - 2
22
+ pdo ['INTEGER32 value' ].raw = 0x01020304
23
+ pdo ['BOOLEAN value' ].raw = False
24
+ pdo ['BOOLEAN value 2' ].raw = True
25
+
26
+ self .pdo = pdo
27
+ self .node = node
26
28
27
- # Check expected data
28
- self .assertEqual (map .data , b'\xfd \xff \xef \x04 \x03 \x02 \x01 \x02 ' )
29
+ def test_pdo_map_bit_mapping ( self ):
30
+ self .assertEqual (self . pdo .data , b'\xfd \xff \xef \x04 \x03 \x02 \x01 \x02 ' )
29
31
30
- # Read values from data
31
- self .assertEqual (map ['INTEGER16 value' ].raw , - 3 )
32
- self .assertEqual (map ['UNSIGNED8 value' ].raw , 0xf )
33
- self .assertEqual (map ['INTEGER8 value' ].raw , - 2 )
34
- self .assertEqual (map ['INTEGER32 value' ].raw , 0x01020304 )
35
- self .assertEqual (map ['BOOLEAN value' ].raw , False )
36
- self .assertEqual (map ['BOOLEAN value 2' ].raw , True )
32
+ def test_pdo_map_getitem (self ):
33
+ pdo = self .pdo
34
+ self .assertEqual (pdo ['INTEGER16 value' ].raw , - 3 )
35
+ self .assertEqual (pdo ['UNSIGNED8 value' ].raw , 0xf )
36
+ self .assertEqual (pdo ['INTEGER8 value' ].raw , - 2 )
37
+ self .assertEqual (pdo ['INTEGER32 value' ].raw , 0x01020304 )
38
+ self .assertEqual (pdo ['BOOLEAN value' ].raw , False )
39
+ self .assertEqual (pdo ['BOOLEAN value 2' ].raw , True )
37
40
41
+ def test_pdo_getitem (self ):
42
+ node = self .node
38
43
self .assertEqual (node .tpdo [1 ]['INTEGER16 value' ].raw , - 3 )
39
44
self .assertEqual (node .tpdo [1 ]['UNSIGNED8 value' ].raw , 0xf )
40
45
self .assertEqual (node .tpdo [1 ]['INTEGER8 value' ].raw , - 2 )
@@ -54,10 +59,26 @@ def test_bit_mapping(self):
54
59
self .assertEqual (node .tpdo [0x2002 ].raw , 0xf )
55
60
self .assertEqual (node .pdo [0x1600 ][0x2002 ].raw , 0xf )
56
61
57
- def test_save_pdo (self ):
58
- node = canopen .Node (1 , SAMPLE_EDS )
59
- node .tpdo .save ()
60
- node .rpdo .save ()
62
+ def test_pdo_save (self ):
63
+ self .node .tpdo .save ()
64
+ self .node .rpdo .save ()
65
+
66
+ def test_pdo_export (self ):
67
+ import tempfile
68
+ try :
69
+ import canmatrix
70
+ except ImportError :
71
+ raise unittest .SkipTest ("The PDO export API requires canmatrix" )
72
+
73
+ for pdo in "tpdo" , "rpdo" :
74
+ with tempfile .NamedTemporaryFile (suffix = ".csv" ) as tmp :
75
+ fn = tmp .name
76
+ with self .subTest (filename = fn , pdo = pdo ):
77
+ getattr (self .node , pdo ).export (fn )
78
+ with open (fn ) as csv :
79
+ header = csv .readline ()
80
+ self .assertIn ("ID" , header )
81
+ self .assertIn ("Frame Name" , header )
61
82
62
83
63
84
if __name__ == "__main__" :
0 commit comments