main
parent a221e1d9a8
commit dd65994848

@ -14,17 +14,34 @@ class BlockType(Enum):
FB = 2
class BlockManage():
address = 66
def __init__(self):
_instance = None
_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.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 = {
BlockType.PB : [],
BlockType.TB : [],
BlockType.FB : [],
}
self.initBlocks()
def initBlocks(self):
dirHeadDatas = self.DPV1Master.readParm(address = self.address, slot = 1, index = 0, length = 12)
DirID = dirHeadDatas[0] # 目录id
DirRevNum = dirHeadDatas[1] # 目录版本号
@ -78,17 +95,18 @@ class Block():
self.addParms()
def addParms(self):
pass
# getParmsFunc = {
# BlockType.PB: PhysicalBlock.getallParame,
# BlockType.TB: AIFunctionBlock.getallParame,
# BlockType.FB: PressureTranslationBlock.getallParame,
# }.get(self.blockType, lambda: [])
# pass
getParmsFunc = {
BlockType.PB: PhysicalBlock.getallParame,
BlockType.TB: AIFunctionBlock.getallParame,
BlockType.FB: PressureTranslationBlock.getallParame,
}.get(self.blockType, lambda: [])
# parms_data = getParmsFunc()
parms_data = getParmsFunc()
if __name__ == '__main__':
b = BlockManage()
b = BlockManage(address = 55)
c = BlockManage(address = 77)
# b.initBlock()

@ -7,6 +7,25 @@ import struct
import threading
import time
# 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():
@ -43,31 +62,12 @@ class DPV1Master():
return all(x == 0 for x in tup)
def searchMaster(self, callback = None):
def search():
for address in range(1, 126):
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 searchSlave(self, callback = None):
self.searchSlaveThread = SearchSlaveThread(callback = callback, master = self)
self.searchSlaveThread.start()
def closeThread(self):
self.searchMasterThread.join()
self.searchSlaveThread.stop()
def readParm(self, address, slot, index, length, callback = None):
hexAddress = address.to_bytes(1, byteorder='little')
@ -85,6 +85,19 @@ class DPV1Master():
return
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'):

Loading…
Cancel
Save