main
parent a221e1d9a8
commit dd65994848

@ -14,17 +14,34 @@ class BlockType(Enum):
FB = 2 FB = 2
class BlockManage(): class BlockManage():
address = 66 _instance = None
def __init__(self): _dpv1Master = None
def __new__(cls, address):
if not cls._instance:
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self, address = 66):
self.DPV1Master = DPV1Master('192.168.3.10', 502) self.DPV1Master = DPV1Master('192.168.3.10', 502)
self.address = address
print(self.address, self)
self.initBlocks()
@property
def DPV1Master(self):
if not _dpv1Master:
self._dpv1Master = DPV1Master('192.168.3.10', 502)
return self._dpv1Master
def initBlocks(self):
if not self.DPV1Master.judgeSlave(self.address):
return
self.blockDict = { self.blockDict = {
BlockType.PB : [], BlockType.PB : [],
BlockType.TB : [], BlockType.TB : [],
BlockType.FB : [], BlockType.FB : [],
} }
self.initBlocks()
def initBlocks(self):
dirHeadDatas = self.DPV1Master.readParm(address = self.address, slot = 1, index = 0, length = 12) dirHeadDatas = self.DPV1Master.readParm(address = self.address, slot = 1, index = 0, length = 12)
DirID = dirHeadDatas[0] # 目录id DirID = dirHeadDatas[0] # 目录id
DirRevNum = dirHeadDatas[1] # 目录版本号 DirRevNum = dirHeadDatas[1] # 目录版本号
@ -78,17 +95,18 @@ class Block():
self.addParms() self.addParms()
def addParms(self): def addParms(self):
pass # pass
# getParmsFunc = { getParmsFunc = {
# BlockType.PB: PhysicalBlock.getallParame, BlockType.PB: PhysicalBlock.getallParame,
# BlockType.TB: AIFunctionBlock.getallParame, BlockType.TB: AIFunctionBlock.getallParame,
# BlockType.FB: PressureTranslationBlock.getallParame, BlockType.FB: PressureTranslationBlock.getallParame,
# }.get(self.blockType, lambda: []) }.get(self.blockType, lambda: [])
# parms_data = getParmsFunc() parms_data = getParmsFunc()
if __name__ == '__main__': if __name__ == '__main__':
b = BlockManage() b = BlockManage(address = 55)
c = BlockManage(address = 77)
# b.initBlock() # b.initBlock()

@ -7,6 +7,25 @@ import struct
import threading import threading
import time import time
# from protocol.ModBus.ByteOrder import * # from protocol.ModBus.ByteOrder import *
import threading
class SearchSlaveThread(threading.Thread):
def __init__(self, callback, master):
super().__init__()
self.stopEvent = threading.Event()
self.callback = callback
self.master = master
def run(self):
for address in range(1, 126):
if not self.stopEvent.is_set():
self.callback(address, self.master.judgeSlave(address))
def stop(self):
self.stopEvent.set()
class DPV1Master(): class DPV1Master():
@ -43,31 +62,12 @@ class DPV1Master():
return all(x == 0 for x in tup) return all(x == 0 for x in tup)
def searchMaster(self, callback = None): def searchSlave(self, callback = None):
def search(): self.searchSlaveThread = SearchSlaveThread(callback = callback, master = self)
for address in range(1, 126): self.searchSlaveThread.start()
hexAddress = address.to_bytes(1, byteorder='little')
searchByteStream = b'\x01' + hexAddress + b'\x01\x00\xF0\x00'
searchDate = struct.unpack('>hhh', searchByteStream)
self.writeMultipleRegister(1, 750, searchDate)
time.sleep(0.3)
dir = self.readHoldingRegisters(1, 750, 6)
if not self.areAllZeros(dir) and dir != 'error':
callback(address, True)
else:
callback(address, False)
self.writeMultipleRegister(1, 750, self.resetData)
time.sleep(0.1)
# print(address, dir)
# if callable(callback):
if not self.master:
callback(125, False)
return
self.searchMasterThread = threading.Thread(target=search)
self.searchMasterThread.start()
def closeThread(self): def closeThread(self):
self.searchMasterThread.join() self.searchSlaveThread.stop()
def readParm(self, address, slot, index, length, callback = None): def readParm(self, address, slot, index, length, callback = None):
hexAddress = address.to_bytes(1, byteorder='little') hexAddress = address.to_bytes(1, byteorder='little')
@ -85,6 +85,19 @@ class DPV1Master():
return return
return value return value
def judgeSlave(self, address):
hexAddress = address.to_bytes(1, byteorder='little')
searchByteStream = b'\x01' + hexAddress + b'\x01\x00\xF0\x00'
searchDate = struct.unpack('>hhh', searchByteStream)
self.writeMultipleRegister(1, 750, searchDate)
time.sleep(0.3)
dir = self.readHoldingRegisters(1, 750, 6)
self.writeMultipleRegister(1, 750, self.resetData)
time.sleep(0.1)
if not self.areAllZeros(dir) and dir != 'error':
return True
else:
return False
# def readInputRegisters(self, slaveId, startAddress, varNums, order = 'ABCD'): # def readInputRegisters(self, slaveId, startAddress, varNums, order = 'ABCD'):

Loading…
Cancel
Save