-
Notifications
You must be signed in to change notification settings - Fork 0
/
modbus.py
121 lines (109 loc) · 3.86 KB
/
modbus.py
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
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
Pymodbus Synchronous Client Examples
--------------------------------------------------------------------------
The following is an example of how to use the synchronous modbus client
implementation from pymodbus.
It should be noted that the client can also be used with
the guard construct that is available in python 2.5 and up::
with ModbusClient('192.168.0.107') as client:
result = client.read_coils(1,10)
print result
'''
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
#client = ModbusClient('192.168.0.107',port=502)
client = ModbusClient('192.168.0.105',retries=5,retry_on_empty=True)
import Data as data
import time
import json
client.connect()
def Write_holding_registers():
print "---------------------------------------------------------------------------"
log.debug("write to a holding register")
print "---------------------------------------------------------------------------"
#wc = client.write_coil(0,True,unit=1)
addr = 40001
for i in range(1,20):
print "---------------------------------------------------------------------------"
log.debug("write to a holding register")
print "---------------------------------------------------------------------------"
wh = client.write_register(addr,1)
addr =addr + 1
time.sleep(1)
def read_holding_registers(status):
print "---------------------------------------------------------------------------"
log.debug("Reading holding register")
print "---------------------------------------------------------------------------"
#rr = client.read_coils(1,1,unit=0x01)
#addr = 40001
dConf = readConf("mqtt_data_conf.json")
id = dConf[0]['ID']
addr = dConf[0]['SAVEADDR']
reg = dConf[0]['REG_QTY']
t = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
print t
dataobj = {
'REG_VAL':{
},
'status':'1',
'TIME':'0',
'PHONE':'18049040679',
'Flag':'Z',
'ID':'0',
}
dataobj['TIME'] = t
dataobj['ID'] = id
start = 0
for i in range(1,reg):
print "---------------------------------------------------------------------------"
log.debug("Reading holding register")
print "---------------------------------------------------------------------------"
rh = client.read_holding_registers(start,1,unit=1)
print rh.registers[0]
dataobj['REG_VAL'][360000+addr] = rh.registers[0]
addr = addr + 1
start = start + 1
if status == 1:
data.onlineDatahold([dataobj])
else:
dataobj['Flag'] = 'D'
data.offlineDatahold(dataobj)
#dConf = readConf("mqtt_data_conf.json")
def Tdata(usersenddata):
id = usersenddata[0]['ID']
addr = usersenddata[0]['SAVEADDR']
reg = usersenddata[0]['REG_QTY']
t = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
dataobj = {
'REG_VAL':{
},
'status':'1',
'TIME':'0',
'PHONE':'18049040679',
'Flag':'T',
'ID':'0',
}
dataobj['TIME'] = t
dataobj['ID'] = id
start = 0
for i in range(1,reg):
print "---------------------------------------------------------------------------"
log.debug("Reading holding register")
print "---------------------------------------------------------------------------"
rh = client.read_holding_registers(start,1,unit=1)
print rh.registers[0]
dataobj['REG_VAL'][360000+addr] = rh.registers[0]
addr = addr + 1
start = start + 1
def readConf(filepath):
fo = open(filepath, "r")
line = fo.readline()
conf = json.loads(line)
print conf
fo.close()
return conf