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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
#!/usr/bin/env python
'''
MEI Message Test Fixture
--------------------------------
This fixture tests the functionality of all the
mei based request/response messages:
'''
import unittest
from pymodbus.mei_message import *
from pymodbus.constants import DeviceInformation, MoreData
from pymodbus.pdu import ModbusExceptions
from pymodbus.device import ModbusControlBlock
#---------------------------------------------------------------------------#
# Fixture
#---------------------------------------------------------------------------#
class ModbusMeiMessageTest(unittest.TestCase):
'''
This is the unittest for the pymodbus.mei_message module
'''
#-----------------------------------------------------------------------#
# Setup/TearDown
#-----------------------------------------------------------------------#
def setUp(self):
'''
Initializes the test environment and builds request/result
encoding pairs
'''
pass
def tearDown(self):
''' Cleans up the test environment '''
pass
#-----------------------------------------------------------------------#
# Read Device Information
#-----------------------------------------------------------------------#
def testReadDeviceInformationRequestEncode(self):
''' Test basic bit message encoding/decoding '''
params = {'read_code':DeviceInformation.Basic, 'object_id':0x00 }
handle = ReadDeviceInformationRequest(**params)
result = handle.encode()
self.assertEqual(result, '\x0e\x01\x00')
self.assertEqual("ReadDeviceInformationRequest(1,0)", str(handle))
def testReadDeviceInformationRequestDecode(self):
''' Test basic bit message encoding/decoding '''
handle = ReadDeviceInformationRequest()
handle.decode('\x0e\x01\x00')
self.assertEqual(handle.read_code, DeviceInformation.Basic)
self.assertEqual(handle.object_id, 0x00)
def testReadDeviceInformationRequest(self):
''' Test basic bit message encoding/decoding '''
context = None
control = ModbusControlBlock()
control.Identity.VendorName = "Company"
control.Identity.ProductCode = "Product"
control.Identity.MajorMinorevision = "v2.1.12"
handle = ReadDeviceInformationRequest()
result = handle.execute(context)
self.assertTrue(isinstance(result, ReadDeviceInformationResponse))
self.assertTrue(result.information[0x00], "Company")
self.assertTrue(result.information[0x01], "Product")
self.assertTrue(result.information[0x02], "v2.1.12")
def testReadDeviceInformationRequestError(self):
''' Test basic bit message encoding/decoding '''
handle = ReadDeviceInformationRequest()
handle.read_code = -1
self.assertEqual(handle.execute(None).function_code, 0xab)
handle.read_code = 0x05
self.assertEqual(handle.execute(None).function_code, 0xab)
handle.object_id = -1
self.assertEqual(handle.execute(None).function_code, 0xab)
handle.object_id = 0x100
self.assertEqual(handle.execute(None).function_code, 0xab)
def testReadDeviceInformationResponseEncode(self):
''' Test that the read fifo queue response can encode '''
message = '\x0e\x01\x83\x00\x00\x03'
message += '\x00\x07Company\x01\x07Product\x02\x07v2.1.12'
dataset = {
0x00: 'Company',
0x01: 'Product',
0x02: 'v2.1.12',
}
handle = ReadDeviceInformationResponse(
read_code=DeviceInformation.Basic, information=dataset)
result = handle.encode()
self.assertEqual(result, message)
self.assertEqual("ReadDeviceInformationResponse(1)", str(handle))
def testReadDeviceInformationResponseDecode(self):
''' Test that the read fifo queue response can decode '''
message = '\x0e\x01\x01\x00\x00\x03'
message += '\x00\x07Company\x01\x07Product\x02\x07v2.1.12'
handle = ReadDeviceInformationResponse(read_code=0x00, information=[])
handle.decode(message)
self.assertEqual(handle.read_code, DeviceInformation.Basic)
self.assertEqual(handle.conformity, 0x01)
self.assertEqual(handle.information[0x00], 'Company')
self.assertEqual(handle.information[0x01], 'Product')
self.assertEqual(handle.information[0x02], 'v2.1.12')
def testRtuFrameSize(self):
''' Test that the read fifo queue response can decode '''
message = '\x0e\x01\x01\x00\x00\x03'
message += '\x00\x07Company\x01\x07Product\x02\x07v2.1.12'
result = ReadDeviceInformationResponse.calculateRtuFrameSize(message)
self.assertEqual(result, 33)
#---------------------------------------------------------------------------#
# Main
#---------------------------------------------------------------------------#
if __name__ == "__main__":
unittest.main()
|