You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			104 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
| 
											2 years ago
										 | from celery import Task | ||
|  | 
 | ||
|  | import os | ||
|  | import sys | ||
|  | import sqlite3 | ||
|  | from peewee import * | ||
|  | 
 | ||
|  | sys.path.append('../../../') | ||
|  | sys.path.append('../') | ||
|  | 
 | ||
|  | from protocol.ModBus.tcpmaster_example import TcpMaster | ||
|  | from protocol.Celery.MBTCPMaster import app | ||
|  | 
 | ||
|  | from protocol.Celery.MBTCPSlave.MBTCPSTask import ModBusTCPSTask | ||
|  | 
 | ||
|  | from utils.DBModels.BaseModel import * | ||
|  | from utils.DBModels.ProjectBaseModel import * | ||
|  | 
 | ||
|  | from utils.DBModels.ClientModels import ClientDB | ||
|  | from utils.DBModels.ProtocolModel import ModBusVar, TCPSetting | ||
|  | from model.ProjectModel.VarManage import ModbusVarManage | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | class ModBusTCPMTask(ModBusTCPSTask): | ||
|  |     _TCPMaster = None | ||
|  |     def __init__(self): | ||
|  |         super(ModBusTCPMTask, self).__init__() | ||
|  | 
 | ||
|  |     @property | ||
|  |     def tcpSlave(self): | ||
|  |         return | ||
|  | 
 | ||
|  |     @property | ||
|  |     def TcpModbus(self): | ||
|  |         if self._TCPMaster is None: | ||
|  |             address =  self.setting[0] | ||
|  |             port =  self.setting[1] | ||
|  |             self._TCPMaster = TcpMaster(host = address, port = port) | ||
|  |         return self._TCPMaster | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | @app.task(base = ModBusTCPMTask, bind = True, priority = 5) | ||
|  | def readValues(self): # 读取变量 | ||
|  |     # [var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max] | ||
|  |     # varName = CharField() | ||
|  |     # varType = IntegerField() | ||
|  |     # createTime = CharField() | ||
|  |     # description = CharField() | ||
|  |     # address = CharField() | ||
|  |     # slaveID = CharField() | ||
|  |     # min = CharField() | ||
|  |     # max = CharField() | ||
|  |     # allVar = self.allVar | ||
|  |     self.cursor.execute("select * from ModBusVar") | ||
|  |     allVar = self.cursor.fetchall() | ||
|  |     varDict = {} | ||
|  |     if not allVar: | ||
|  |         return | ||
|  |     else: | ||
|  |         # print(allVar) | ||
|  |         for varMes in allVar: | ||
|  |             name = str(varMes[1]) | ||
|  |             varType = str(varMes[2]) | ||
|  |             slaveId = int(varMes[6]) | ||
|  |             address = int(varMes[5]) - self.offset | ||
|  |             order = varMes[-1] | ||
|  |             # print(varType) | ||
|  | 
 | ||
|  |             if varType == '0': | ||
|  |                 curValue = self.TcpModbus.readCoils(slaveId = slaveId, startAddress = address, varNums = 1) | ||
|  |             elif varType == '1': | ||
|  |                 curValue = self.TcpModbus.readInputCoils(slaveId = slaveId, startAddress = address, varNums = 1) | ||
|  |             elif varType == '3': | ||
|  |                 curValue = self.TcpModbus.readInputRegisters(slaveId = slaveId, startAddress = address, varNums = 1, order = order) | ||
|  |             elif varType == '4': | ||
|  |                 curValue = self.TcpModbus.readHoldingRegisters(slaveId = slaveId, startAddress = address, varNums = 1, order = order) | ||
|  |             if curValue != 'error': | ||
|  |                 self.influxDB.writeFun(str(name), curValue) | ||
|  |             varDict[name] = curValue | ||
|  |     app.backend.set('ModBus', str(self.request.id)) | ||
|  | 
 | ||
|  |     # print(self.TcpModbus.readInputRegisters(slaveId = 2, startAddress =  0, varNums = 10)) | ||
|  | 
 | ||
|  |     # print(self.TcpModbus.readCoils(slaveId = 3, startAddress = 0, varNums = 10)) | ||
|  | 
 | ||
|  |     # print(self.TcpModbus.readInputCoils(slaveId = 4, startAddress = 0, varNums = 10)) | ||
|  |     return varDict | ||
|  | 
 | ||
|  | @app.task(base = ModBusTCPMTask, bind = True, priority = 1) | ||
|  | def setValue(self, name, varType, slaveID, address, value, order): # 写入变量 | ||
|  |     slaveID = int(slaveID) | ||
|  |     address = int(address) - self.offset | ||
|  |     varType = str(varType) | ||
|  |     print(address, 555555555555555555) | ||
|  |     if varType == '4': | ||
|  |         self.TcpModbus.writeSingleRegister(slaveId = slaveID, address = address, outputValue = value, order = order) | ||
|  |     elif varType == '0': | ||
|  |         self.TcpModbus.writeSingleCoil(slaveId = slaveID, address = address, outputValue = value) | ||
|  |     else: | ||
|  |         return '错误的变量类型' | ||
|  |     return 'success2' |