forked from canopen-python/canopen
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_pdo.py
More file actions
64 lines (52 loc) · 2.48 KB
/
test_pdo.py
File metadata and controls
64 lines (52 loc) · 2.48 KB
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
import unittest
import canopen
from .util import EDS_PATH
class TestPDO(unittest.TestCase):
def test_bit_mapping(self):
node = canopen.Node(1, EDS_PATH)
map = node.pdo.tx[1]
map.add_variable('INTEGER16 value') # 0x2001
map.add_variable('UNSIGNED8 value', length=4) # 0x2002
map.add_variable('INTEGER8 value', length=4) # 0x2003
map.add_variable('INTEGER32 value') # 0x2004
map.add_variable('BOOLEAN value', length=1) # 0x2005
map.add_variable('BOOLEAN value 2', length=1) # 0x2006
# Write some values
map['INTEGER16 value'].raw = -3
map['UNSIGNED8 value'].raw = 0xf
map['INTEGER8 value'].raw = -2
map['INTEGER32 value'].raw = 0x01020304
map['BOOLEAN value'].raw = False
map['BOOLEAN value 2'].raw = True
# Check expected data
self.assertEqual(map.data, b'\xfd\xff\xef\x04\x03\x02\x01\x02')
# Read values from data
self.assertEqual(map['INTEGER16 value'].raw, -3)
self.assertEqual(map['UNSIGNED8 value'].raw, 0xf)
self.assertEqual(map['INTEGER8 value'].raw, -2)
self.assertEqual(map['INTEGER32 value'].raw, 0x01020304)
self.assertEqual(map['BOOLEAN value'].raw, False)
self.assertEqual(map['BOOLEAN value 2'].raw, True)
self.assertEqual(node.tpdo[1]['INTEGER16 value'].raw, -3)
self.assertEqual(node.tpdo[1]['UNSIGNED8 value'].raw, 0xf)
self.assertEqual(node.tpdo[1]['INTEGER8 value'].raw, -2)
self.assertEqual(node.tpdo[1]['INTEGER32 value'].raw, 0x01020304)
self.assertEqual(node.tpdo['INTEGER32 value'].raw, 0x01020304)
self.assertEqual(node.tpdo[1]['BOOLEAN value'].raw, False)
self.assertEqual(node.tpdo[1]['BOOLEAN value 2'].raw, True)
# Test different types of access
self.assertEqual(node.pdo[0x1600]['INTEGER16 value'].raw, -3)
self.assertEqual(node.pdo['INTEGER16 value'].raw, -3)
self.assertEqual(node.pdo.tx[1]['INTEGER16 value'].raw, -3)
self.assertEqual(node.pdo[0x2001].raw, -3)
self.assertEqual(node.tpdo[0x2001].raw, -3)
self.assertEqual(node.pdo[0x2002].raw, 0xf)
self.assertEqual(node.pdo['0x2002'].raw, 0xf)
self.assertEqual(node.tpdo[0x2002].raw, 0xf)
self.assertEqual(node.pdo[0x1600][0x2002].raw, 0xf)
def test_save_pdo(self):
node = canopen.Node(1, EDS_PATH)
node.tpdo.save()
node.rpdo.save()
if __name__ == "__main__":
unittest.main()