Commit df3a9adb authored by liyuanhong's avatar liyuanhong

并发线程类初步设计完成

parent d1d6f7f7
#coding:utf-8
#########################################################
#
# 定义基类,供所有类继承
#
#########################################################
import threading
class Base(threading.Thread):
def __init__(self):
pass
#coding:utf-8
import binascii
import json
import socket
import threading
import time
from lib.multiThread.ThreadBase import ThreadBase
class SendMultMsgThread():
def __init__(self,host="10.100.11.20",port=9001,msg=""):
self.host = host
self.port = port
self.msg = msg
self.timeOut = 1 #socket超时时间
self.BUF_SIZE = 1024 #接收消息缓存
self.threadCount = 10 #并发线程数
self.totalTime = 0 #所有线程的运行总和
self.threadArr = {} #保存每个线程的信息
self.failThreadCount = 0 #失败线程数
pass
############################################
# 设置host
############################################
def setHost(self,host):
self.host = host
############################################
# 设置端口号
############################################
def setPort(self,port):
self.port = port
############################################
# 设置消息
############################################
def setMsg(self,msg):
self.msg = msg
############################################
# 设置并发线程数
############################################
def setThreadCount(self,threadCount):
self.threadCount = threadCount
############################################
# 发送一条消息
############################################
def sendMsg(self,msg,threadName):
msg = msg
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) # 在客户端开启心跳
client.settimeout(self.timeOut)
startTime = int(time.time() * 1000)
try:
client.connect((self.host, self.port))
client.send(binascii.a2b_hex(msg))
except BaseException as e:
client.close()
self.threadArr[threadName]["status"] = 1
self.failThreadCount = self.failThreadCount + 1
print("连接超时,socket断开")
return
try:
data = client.recv(self.BUF_SIZE)
# print(data)
except BaseException as e:
# traceback.print_exc()
client.close()
# raise RuntimeError('socket 接收消息超时!')
self.threadArr[threadName]["status"] = 1
self.failThreadCount = self.failThreadCount + 1
print('socket 接收消息超时!')
return
endTime = int(time.time() * 1000)
timeExpend = endTime - startTime
self.threadArr[threadName]["timeExp"] = timeExpend
self.totalTime = self.totalTime + timeExpend
client.close()
############################################
# 启动并发线程
############################################
def startThread(self):
timeStart = int(time.time() * 1000)
for i in range(0,self.threadCount):
threadName = "thread" + str(i)
theThread = threading.Thread(target=self.sendMsg,args=(self.msg,threadName,))
threadInfo = {}
threadInfo["name"] = threadName
threadInfo["status"] = 0
self.threadArr[threadName] = threadInfo
theThread.start()
timeEnd = int(time.time() * 1000)
timeExpend = timeEnd - timeStart
print("耗时:" + str(timeExpend) + " 毫秒")
print("并发数据每秒发送:" + str(int(self.threadCount / (timeExpend / 1000))))
time.sleep(2)
print("平均响应时间:" + str(self.totalTime / self.threadCount) + "毫秒")
print("响应失败个数:" + str(self.failThreadCount))
print(json.dumps( self.threadArr))
if __name__ == "__main__":
t = SendMultMsgThread(msg="")
t.setMsg("7e0002000001314620111800065b7e")
# t.setMsg("7e020001020131462011190001fffc7fff001c010401c0a6380659ad7a02090042003b200204185704310102EA6600010400000000000204001e7c1f0003050A0001f400000405020001d4c000050400057d0240000604000119400007040007530000100c0004006403f203f203f203f2001114ffffffffffffffffffff00200000000000000000001202002400130106001D0101EB7960C0020bb860D0013c62f00203216050014c60F0015860B001146330011c646001416490012060A00201146014010160100102610002022661100201f561F0020e746210040000119c6040012c60700200e660E00203206701010067020100670301016704024e20670502000067060200416707040000017d02097e")
t.startThread()
#coding:utf-8
from lib.multiThread.Base import Base
class ThreadBase(Base):
def __init__(self):
pass
\ No newline at end of file
...@@ -39,7 +39,7 @@ class DataUpstreamTransport_msg(MessageBase): ...@@ -39,7 +39,7 @@ class DataUpstreamTransport_msg(MessageBase):
# 0xF2 故障码数据(状态改变发送) # 0xF2 故障码数据(状态改变发送)
# 0xF3 休眠进入(进入休眠模式发送) # 0xF3 休眠进入(进入休眠模式发送)
# 0xF4 休眠唤醒(退出休眠模式发送) # 0xF4 休眠唤醒(退出休眠模式发送)
msgType = "F3" msgType = "F2"
msgContent = "" msgContent = ""
if msgType == "F1": if msgType == "F1":
msgContent = self.getDrivingData() #驾驶行程数据(熄火发送) msgContent = self.getDrivingData() #驾驶行程数据(熄火发送)
......
...@@ -66,7 +66,6 @@ class Location_msg(MessageBase): ...@@ -66,7 +66,6 @@ class Location_msg(MessageBase):
####################################################### #######################################################
def getLocationExtraInfo(self): def getLocationExtraInfo(self):
data = "" data = ""
extraInfoId = self.int2hexStringByBytes(1)
# 里程,DWORD,1 / 10km,对应车上里程表读数;不支持OBD时,为基于GPS车速统计的车辆累计行驶总里程。 # 里程,DWORD,1 / 10km,对应车上里程表读数;不支持OBD时,为基于GPS车速统计的车辆累计行驶总里程。
extra_01 = "01" + self.int2hexStringByBytes(4) + self.int2hexStringByBytes(20202020,4) extra_01 = "01" + self.int2hexStringByBytes(4) + self.int2hexStringByBytes(20202020,4)
#油量,WORD,1/10L,对应车上油量表读数 #油量,WORD,1/10L,对应车上油量表读数
...@@ -96,15 +95,12 @@ class Location_msg(MessageBase): ...@@ -96,15 +95,12 @@ class Location_msg(MessageBase):
#报警事件 ID 数据项列表 #报警事件 ID 数据项列表
extra_FA = "FA" + self.int2hexStringByBytes(int(len(AlarmEvent_data().generateAlarmEvent_data()) / 2)) + AlarmEvent_data().generateAlarmEvent_data() extra_FA = "FA" + self.int2hexStringByBytes(int(len(AlarmEvent_data().generateAlarmEvent_data()) / 2)) + AlarmEvent_data().generateAlarmEvent_data()
data = extra_01 + extra_02 + extra_31 + extra_FA # data = extra_01 + extra_02 + extra_11 + extra_31 + extra_EA + extra_EB + extra_FA
data = extra_31 + extra_EA + extra_EB
# data = extra_01 + extra_02 + extra_11 + extra_12 + extra_13 # data = extra_01 + extra_02 + extra_11 + extra_12 + extra_13
# data = data + extra_2A + extra_30 + extra_31 + extra_EA + extra_EB # data = data + extra_2A + extra_30 + extra_31 + extra_EA + extra_EB
# data = data + extra_EC # data = data +extra_FA
extraInfoLen = self.int2hexStringByBytes(int(len(data) / 2))
if int(len(data) / 2) > 255:
raise RuntimeError('附加信息长度超长!')
data = extraInfoId + extraInfoLen + data
return data return data
...@@ -217,13 +213,13 @@ class Location_msg(MessageBase): ...@@ -217,13 +213,13 @@ class Location_msg(MessageBase):
return dataHex return dataHex
'''行驶总里程''' '''行驶总里程'''
def getTotalMileage(self): def getTotalMileage(self):
caculateType = "01" caculateType = "0A"
totalMileage = self.int2hexStringByBytes(128000,4) #行驶总里程(单位米) totalMileage = self.int2hexStringByBytes(128000,4) #行驶总里程(单位米)
data = caculateType + totalMileage data = caculateType + totalMileage
return data return data
'''行驶总油耗''' '''行驶总油耗'''
def getTotalOil(self): def getTotalOil(self):
caculateType = "01" caculateType = "02"
totalOil = self.int2hexStringByBytes(120000,4) #总油耗(单位 mL) totalOil = self.int2hexStringByBytes(120000,4) #总油耗(单位 mL)
data = caculateType + totalOil data = caculateType + totalOil
return data return data
...@@ -283,7 +279,7 @@ class Location_msg(MessageBase): ...@@ -283,7 +279,7 @@ class Location_msg(MessageBase):
# 获取时间 # 获取时间
####################################################### #######################################################
def getInfoTime(self,data="2020-02-04 18:57:04"): def getInfoTime(self,data="2020-02-04 18:57:04"):
now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') #now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
data = data data = data
data = data.replace("-","") data = data.replace("-","")
data = data.replace(" ","") data = data.replace(" ","")
...@@ -401,10 +397,10 @@ class Location_msg(MessageBase): ...@@ -401,10 +397,10 @@ class Location_msg(MessageBase):
# 获取状态 # 获取状态
####################################################### #######################################################
def getStatus(self): def getStatus(self):
ACCStatus = 1 #0:ACC 关;1: ACC 开 (1) ACCStatus = 0 #0:ACC 关;1: ACC 开 (1)
locationStatus = 2 #0:未定位;1:定位 (2) locationStatus = 2 #0:未定位;1:定位 (2)
latitudeStatus = 0 #0:北纬;1:南纬 (4) latitudeStatus = 1 #0:北纬;1:南纬 (4)
longitudeStatus = 0 #0:东经;1:西经 (8) longitudeStatus = 1 #0:东经;1:西经 (8)
runStatus = 0 #0:运营状态;1:停运状态 (16) runStatus = 0 #0:运营状态;1:停运状态 (16)
isLocationEncrypt = 0 #0:经纬度未经保密插件加密;1:经纬度已经保密插件加密 (32) isLocationEncrypt = 0 #0:经纬度未经保密插件加密;1:经纬度已经保密插件加密 (32)
retain6_7 = 0 retain6_7 = 0
......
...@@ -27,7 +27,7 @@ class TerminalRegister_msg(MessageBase): ...@@ -27,7 +27,7 @@ class TerminalRegister_msg(MessageBase):
return msg return msg
# 生成一条完整的消息,针对图形界面,可传递参数 # 生成一条完整的消息,针对图形界面,可传递参数
def generateMsg_GUI(self,msgID="0100",phoneNum="13146201119",msgWaterCode=1,encryptionType=0,subPkg=0,provinceId="0103",\ def generateMsg_GUI(self,msgID="0100",phoneNum="13146201119",msgWaterCode=1,encryptionType=0,subPkg=0,provinceId=103,\
manufacturerId="11010",terminalType="a865h643gfdj64fd7432",terminalId="H6uyt08", \ manufacturerId="11010",terminalType="a865h643gfdj64fd7432",terminalId="H6uyt08", \
licencePlateColor=1,carSign="渝B23CX"): licencePlateColor=1,carSign="渝B23CX"):
msg = "" msg = ""
...@@ -49,21 +49,21 @@ class TerminalRegister_msg(MessageBase): ...@@ -49,21 +49,21 @@ class TerminalRegister_msg(MessageBase):
# msgNums = self.int2hexStringByBytes(1,2) # msgNums = self.int2hexStringByBytes(1,2)
# msgNumber = self.int2hexStringByBytes(1,2) # msgNumber = self.int2hexStringByBytes(1,2)
#市县域 ID (标示终端安装车辆所在的省域,0 保留,由平台取默认值。省 域 ID 采用 GB/T 2260 中规定的行政区划代 码六位中前两) #市县域 ID (标示终端安装车辆所在的省域,0 保留,由平台取默认值。省 域 ID 采用 GB/T 2260 中规定的行政区划代 码六位中前两)
provinceId = "0103" provinceId = self.int2hexStringByBytes(50,2)
#市县域 ID
countyId = self.int2hexStringByBytes(103,2)
#制造商 ID (5 个字节,终端制造商编码) #制造商 ID (5 个字节,终端制造商编码)
manufacturerId = self.str2Hex("11010") manufacturerId = self.str2Hex("man03")
#终端型号 (20 个字节,此终端型号由制造商自行定义,位数不足时,后 补“0X00”。) #终端型号 (20 个字节,此终端型号由制造商自行定义,位数不足时,后 补“0X00”。)
terminalType = self.str2Hex("a865h643gfdj64fd7432") terminalType = self.str2Hex("a865h643gfdj64fd7432")
#终端 ID (7 个字节,由大写字母和数字组成,此终端 ID 由制造商自行 定义,位数不足时,后补“0X00”) #终端 ID (7 个字节,由大写字母和数字组成,此终端 ID 由制造商自行 定义,位数不足时,后补“0X00”)
terminalId = self.str2Hex("H6uyt08") terminalId = self.str2Hex("H6uyt08")
#车牌颜色 (车牌颜色,按照 JT/T415-2006 的 5.4.12。未上牌时,取值 为 0) 1:蓝色 2:黄色 3:黑色 4:白色 9:其他 #车牌颜色 (车牌颜色,按照 JT/T415-2006 的 5.4.12。未上牌时,取值 为 0) 1:蓝色 2:黄色 3:黑色 4:白色 9:其他
licencePlateColor = self.int2hexStringByBytes(1) licencePlateColor = self.int2hexStringByBytes(2)
#车辆标识 (车牌颜色为 0 时,表示车辆 VIN;否则,表示公安交通管理 部门颁发的机动车号牌) #车辆标识 (车牌颜色为 0 时,表示车辆 VIN;否则,表示公安交通管理 部门颁发的机动车号牌)
carSign = str("渝B23CX".encode("gbk")) carSign = self.GBKString2Hex("渝B23CX")
carSign = carSign[2:len(carSign) - 1]
carSign = self.str2Hex(carSign)
# msg = msg + msgNums + msgNumber # msg = msg + msgNums + msgNumber
msg = msg + provinceId + manufacturerId + terminalType + terminalId + licencePlateColor + carSign msg = msg + provinceId + countyId + manufacturerId + terminalType + terminalId + licencePlateColor + carSign
return msg return msg
# 获取消息体,针对图形界面,可传递参数 # 获取消息体,针对图形界面,可传递参数
...@@ -73,17 +73,17 @@ class TerminalRegister_msg(MessageBase): ...@@ -73,17 +73,17 @@ class TerminalRegister_msg(MessageBase):
# msgNums = self.int2hexStringByBytes(1,2) # msgNums = self.int2hexStringByBytes(1,2)
# msgNumber = self.int2hexStringByBytes(1,2) # msgNumber = self.int2hexStringByBytes(1,2)
#市县域 ID (标示终端安装车辆所在的省域,0 保留,由平台取默认值。省 域 ID 采用 GB/T 2260 中规定的行政区划代 码六位中前两) #市县域 ID (标示终端安装车辆所在的省域,0 保留,由平台取默认值。省 域 ID 采用 GB/T 2260 中规定的行政区划代 码六位中前两)
provinceId = "0103" provinceId = self.int2hexStringByBytes(provinceId,2)
#制造商 ID (5 个字节,终端制造商编码) #制造商 ID (5 个字节,终端制造商编码)
manufacturerId = self.str2Hex("11010") manufacturerId = self.str2Hex(manufacturerId)
#终端型号 (20 个字节,此终端型号由制造商自行定义,位数不足时,后 补“0X00”。) #终端型号 (20 个字节,此终端型号由制造商自行定义,位数不足时,后 补“0X00”。)
terminalType = self.str2Hex("a865h643gfdj64fd7432") terminalType = self.str2Hex(terminalType)
#终端 ID (7 个字节,由大写字母和数字组成,此终端 ID 由制造商自行 定义,位数不足时,后补“0X00”) #终端 ID (7 个字节,由大写字母和数字组成,此终端 ID 由制造商自行 定义,位数不足时,后补“0X00”)
terminalId = self.str2Hex("H6uyt08") terminalId = self.str2Hex(terminalId)
#车牌颜色 (车牌颜色,按照 JT/T415-2006 的 5.4.12。未上牌时,取值 为 0) 1:蓝色 2:黄色 3:黑色 4:白色 9:其他 #车牌颜色 (车牌颜色,按照 JT/T415-2006 的 5.4.12。未上牌时,取值 为 0) 1:蓝色 2:黄色 3:黑色 4:白色 9:其他
licencePlateColor = self.int2hexStringByBytes(1) licencePlateColor = self.int2hexStringByBytes(licencePlateColor)
#车辆标识 (车牌颜色为 0 时,表示车辆 VIN;否则,表示公安交通管理 部门颁发的机动车号牌) #车辆标识 (车牌颜色为 0 时,表示车辆 VIN;否则,表示公安交通管理 部门颁发的机动车号牌)
carSign = str("渝B23CX".encode("gbk")) carSign = str(carSign.encode("gbk"))
carSign = carSign[2:len(carSign) - 1] carSign = carSign[2:len(carSign) - 1]
carSign = self.str2Hex(carSign) carSign = self.str2Hex(carSign)
# msg = msg + msgNums + msgNumber # msg = msg + msgNums + msgNumber
......
...@@ -16,18 +16,18 @@ class AlarmEvent_data(MessageBase): ...@@ -16,18 +16,18 @@ class AlarmEvent_data(MessageBase):
##################################################### #####################################################
def generateAlarmEvent_data(self): def generateAlarmEvent_data(self):
data = "" data = ""
ignition = "0001" + self.int2hexStringByBytes(1) #点火上报 ignition = "0001" + self.int2hexStringByBytes(0) #点火上报
flameout = "0002" + self.int2hexStringByBytes(1) #熄火上报 flameout = "0002" + self.int2hexStringByBytes(0) #熄火上报
setUpDefences = "0003" + self.int2hexStringByBytes(1) #设防上报 setUpDefences = "0003" + self.int2hexStringByBytes(0) #设防上报
withdrawGarrision = "0004" + self.int2hexStringByBytes(1) #撤防上报 withdrawGarrision = "0004" + self.int2hexStringByBytes(0) #撤防上报
doorOpen = "0005" + self.int2hexStringByBytes(1) #车门打开 doorOpen = "0005" + self.int2hexStringByBytes(0) #车门打开
doorClose = "0006" + self.int2hexStringByBytes(1) #车门关闭 doorClose = "0006" + self.int2hexStringByBytes(0) #车门关闭
systemStart = "0007" + self.int2hexStringByBytes(1) #系统启动 systemStart = "0007" + self.int2hexStringByBytes(0) #系统启动
trailCarAlarm = "0101" + self.int2hexStringByBytes(1) #拖车报警 trailCarAlarm = "0101" + self.int2hexStringByBytes(0) #拖车报警
locationTooLong = "0102" + self.int2hexStringByBytes(1) #定位过长报警 locationTooLong = "0102" + self.int2hexStringByBytes(0) #定位过长报警
terminalPullOut = "0103" + self.int2hexStringByBytes(1) #终端拔出报警 terminalPullOut = "0103" + self.int2hexStringByBytes(0) #终端拔出报警
terminalInsert = "0104" + self.int2hexStringByBytes(1) #终端插入报警 terminalInsert = "0104" + self.int2hexStringByBytes(0) #终端插入报警
lowVoltage = "0105" + self.int2hexStringByBytes(1) #低电压报警 lowVoltage = "0105" + self.int2hexStringByBytes(0) #低电压报警
#怠速过长报警 附带信息见 表 C6EXT1 #怠速过长报警 附带信息见 表 C6EXT1
idlingSpeedOver = "0106" + self.int2hexStringByBytes(9) + self.getIdlingSpeedOver() idlingSpeedOver = "0106" + self.int2hexStringByBytes(9) + self.getIdlingSpeedOver()
#超速报警 附带信息见 表 C6EXT2 #超速报警 附带信息见 表 C6EXT2
...@@ -36,21 +36,24 @@ class AlarmEvent_data(MessageBase): ...@@ -36,21 +36,24 @@ class AlarmEvent_data(MessageBase):
fatigueDriving = "0108" + self.int2hexStringByBytes(5) + self.getFatigueDriving() fatigueDriving = "0108" + self.int2hexStringByBytes(5) + self.getFatigueDriving()
#水温报警 附带信息见 表 C6EXT4 #水温报警 附带信息见 表 C6EXT4
waterTemperatureAlarm = "0109" + self.int2hexStringByBytes(9) + self.getWaterTemperatureAlarm() waterTemperatureAlarm = "0109" + self.int2hexStringByBytes(9) + self.getWaterTemperatureAlarm()
highSpeedNeutralGear = "010A" + self.int2hexStringByBytes(1) #高速空档滑行报警 highSpeedNeutralGear = "010A" + self.int2hexStringByBytes(0) #高速空档滑行报警
oilExpendNotSurport = "010B" +self.int2hexStringByBytes(1) #油耗不支持报警 oilExpendNotSurport = "010B" +self.int2hexStringByBytes(0) #油耗不支持报警
OBDNotSurport = "010C" + self.int2hexStringByBytes(1) #OBD 不支持报警 OBDNotSurport = "010C" + self.int2hexStringByBytes(0) #OBD 不支持报警
lowWaterTemperatureHighSpeed = "010D" +self.int2hexStringByBytes(1) #低水温高转速 lowWaterTemperatureHighSpeed = "010D" +self.int2hexStringByBytes(0) #低水温高转速
buslineNotSleep = "010E" + self.int2hexStringByBytes(1) #总线不睡眠报警 buslineNotSleep = "010E" + self.int2hexStringByBytes(0) #总线不睡眠报警
illegalOpenDoor = "010f" + self.int2hexStringByBytes(1) #非法开门 illegalOpenDoor = "010f" + self.int2hexStringByBytes(0) #非法开门
illegalFire = "0110" + self.int2hexStringByBytes(1) #非法点火 illegalFire = "0110" + self.int2hexStringByBytes(0) #非法点火
rapidAccelerateAlarm = "0111" + self.int2hexStringByBytes(1) #急加速报警 rapidAccelerateAlarm = "0111" + self.int2hexStringByBytes(0) #急加速报警
sharpSlowdownAlarm = "0112" + self.int2hexStringByBytes(1) #急减速报警 sharpSlowdownAlarm = "0112" + self.int2hexStringByBytes(0) #急减速报警
sharpBendAlarm = "0113" + self.int2hexStringByBytes(1) #急拐弯报警 sharpBendAlarm = "0113" + self.int2hexStringByBytes(0) #急拐弯报警
crashAlarm = "0114" + self.int2hexStringByBytes(1) #碰撞报警 crashAlarm = "0114" + self.int2hexStringByBytes(0) #碰撞报警
rapidChangeLines = "0115" + self.int2hexStringByBytes(1) #急变道报警 rapidChangeLines = "0115" + self.int2hexStringByBytes(0) #急变道报警
# data = buslineNotSleep
data = data + ignition + flameout + setUpDefences + withdrawGarrision + doorOpen data = data + ignition + flameout + setUpDefences + withdrawGarrision + doorOpen
data = data + doorClose + systemStart + trailCarAlarm + locationTooLong + terminalPullOut data = data + doorClose + systemStart + trailCarAlarm + locationTooLong + terminalPullOut
data + data + terminalInsert + lowVoltage + idlingSpeedOver + overspeedAlarm + fatigueDriving data = data + terminalInsert + lowVoltage + idlingSpeedOver + overspeedAlarm + fatigueDriving
data = data + waterTemperatureAlarm + highSpeedNeutralGear + oilExpendNotSurport + OBDNotSurport + lowWaterTemperatureHighSpeed data = data + waterTemperatureAlarm + highSpeedNeutralGear + oilExpendNotSurport + OBDNotSurport + lowWaterTemperatureHighSpeed
data = data + buslineNotSleep + illegalOpenDoor + illegalFire + rapidAccelerateAlarm + sharpSlowdownAlarm data = data + buslineNotSleep + illegalOpenDoor + illegalFire + rapidAccelerateAlarm + sharpSlowdownAlarm
data = data + sharpBendAlarm + crashAlarm + rapidChangeLines data = data + sharpBendAlarm + crashAlarm + rapidChangeLines
......
...@@ -38,13 +38,13 @@ class CarSafeStatusInfo(MessageBase): ...@@ -38,13 +38,13 @@ class CarSafeStatusInfo(MessageBase):
# 按照高位在前,低位在后的规则 # 按照高位在前,低位在后的规则
##################################################### #####################################################
def getSecurityStatusHex(self): def getSecurityStatusHex(self):
accStatus = 1 #acc状态,1:开 0:关 accStatus = 0 #acc状态,1:开 0:关
defenseStatus = 2 #设防撤防状态,2:设防 0:撤防 defenseStatus = 0 #设防撤防状态,2:设防 0:撤防
brakeStatus = 0 #脚刹状态,4:踩下 0:松开 brakeStatus = 0 #脚刹状态,4:踩下 0:松开
acceleratorStatus = 8 #是否踩油门,8:踩下 0:松开 acceleratorStatus = 0 #是否踩油门,8:踩下 0:松开
handBrakeStatus = 0 #手刹状态,16:拉起手刹 0:松开手刹 handBrakeStatus = 0 #手刹状态,16:拉起手刹 0:松开手刹
mainSafetyBelt = 32 #主驾驶安全带,32:插入安全带 0:松开安全带 mainSafetyBelt = 0 #主驾驶安全带,32:插入安全带 0:松开安全带
subSafetyBelt = 64 #副驾驶安全带,64:插入安全带 0:松开安全带 subSafetyBelt = 0 #副驾驶安全带,64:插入安全带 0:松开安全带
retain = 0 #预留字段 retain = 0 #预留字段
val = accStatus +defenseStatus +brakeStatus +acceleratorStatus + handBrakeStatus + mainSafetyBelt + subSafetyBelt + retain val = accStatus +defenseStatus +brakeStatus +acceleratorStatus + handBrakeStatus + mainSafetyBelt + subSafetyBelt + retain
...@@ -59,8 +59,8 @@ class CarSafeStatusInfo(MessageBase): ...@@ -59,8 +59,8 @@ class CarSafeStatusInfo(MessageBase):
rfDoorStatus = 0 #右前门,2:开 0:关 rfDoorStatus = 0 #右前门,2:开 0:关
lbDoorStatus = 0 #左后门,4:开 0:关 lbDoorStatus = 0 #左后门,4:开 0:关
rbDoorStatus = 0 #右后门,8:开 0:关 rbDoorStatus = 0 #右后门,8:开 0:关
trunk = 0 #后备箱,32:开 0:关 trunk = 0 #后备箱,16:开 0:关
enginCover = 0 #发送机盖:64:开 0:关 enginCover = 32 #发送机盖:32:开 0:关
retain1 = 0 #预留字段 retain1 = 0 #预留字段
retain2 = 0 #预留字段 retain2 = 0 #预留字段
...@@ -144,7 +144,7 @@ class CarSafeStatusInfo(MessageBase): ...@@ -144,7 +144,7 @@ class CarSafeStatusInfo(MessageBase):
retain2 = 0 retain2 = 0
retain3 = 0 retain3 = 0
retain4 = 0 retain4 = 0
#档位,0:p 16:R 32:N 48:D 64:1挡 80:2挡 96:3挡 112:4挡 128:5挡 144:16挡 160:M挡 176:S挡 #档位,0:p 16:R 32:N 48:D 64:1挡 80:2挡 96:3挡 112:4挡 128:5挡 144:6挡 160:M挡 176:S挡
gears = 0 gears = 0
val = retain1 + retain2 + retain3 + retain4 + gears val = retain1 + retain2 + retain3 + retain4 + gears
......
...@@ -37,7 +37,7 @@ class SaloonCarOBD_data(MessageBase): ...@@ -37,7 +37,7 @@ class SaloonCarOBD_data(MessageBase):
#燃油压力 , 0 - 500kpa #燃油压力 , 0 - 500kpa
oilPressure = "60A0" + self.int2hexStringByBytes(2) + self.int2hexStringByBytes(276,2) oilPressure = "60A0" + self.int2hexStringByBytes(2) + self.int2hexStringByBytes(276,2)
#故障码状态 , 发动机故障码状态 #故障码状态 , 发动机故障码状态
troubleCodeStatus = "6014" + self.int2hexStringByBytes(1) + self.int2hexStringByBytes(0) troubleCodeStatus = "6014" + self.int2hexStringByBytes(1) + self.int2hexStringByBytes(1)
#故障码个数 #故障码个数
troubleCodeNum = "6010" + self.int2hexStringByBytes(1) + self.int2hexStringByBytes(2) troubleCodeNum = "6010" + self.int2hexStringByBytes(1) + self.int2hexStringByBytes(2)
#空气流量 , 0.1 实际值为上传值/10 0.1g/s #空气流量 , 0.1 实际值为上传值/10 0.1g/s
...@@ -51,9 +51,9 @@ class SaloonCarOBD_data(MessageBase): ...@@ -51,9 +51,9 @@ class SaloonCarOBD_data(MessageBase):
#计算负荷值 #计算负荷值
calculateLoadValue = "6040" + self.int2hexStringByBytes(1) + self.int2hexStringByBytes(44) calculateLoadValue = "6040" + self.int2hexStringByBytes(1) + self.int2hexStringByBytes(44)
#长期燃油修正(气缸列 1 和 3) #长期燃油修正(气缸列 1 和 3)
fuelTrim = "6070" + self.int2hexStringByBytes(2) + self.int2hexStringByBytes(56,2) fuelTrim = "6070" + self.int2hexStringByBytes(2) + self.int2hexStringByBytes(230,2)
#第一缸点火正时提前角 ,显示值为上传值-64 #第一缸点火正时提前角 ,显示值为上传值-64
fireAngle = "60E0" + self.int2hexStringByBytes(2) + self.int2hexStringByBytes(80) fireAngle = "60E0" + self.int2hexStringByBytes(2) + self.int2hexStringByBytes(800,2)
#前刹车片磨损 , 0 正常/否则,显示对应数据,单位:级 #前刹车片磨损 , 0 正常/否则,显示对应数据,单位:级
frontBrakeBlockAbrasion = "6701" + self.int2hexStringByBytes(1) + self.int2hexStringByBytes(0) frontBrakeBlockAbrasion = "6701" + self.int2hexStringByBytes(1) + self.int2hexStringByBytes(0)
#后刹车片磨损 , 0 正常/否则,显示对应数据,单位:级 #后刹车片磨损 , 0 正常/否则,显示对应数据,单位:级
...@@ -67,7 +67,7 @@ class SaloonCarOBD_data(MessageBase): ...@@ -67,7 +67,7 @@ class SaloonCarOBD_data(MessageBase):
#冷却液液位 , 显示值为上传值-48 #冷却液液位 , 显示值为上传值-48
coolingLiquidLocation = "6706" + self.int2hexStringByBytes(2) + self.int2hexStringByBytes(65,2) coolingLiquidLocation = "6706" + self.int2hexStringByBytes(2) + self.int2hexStringByBytes(65,2)
#续航里程 0.1 km ; 显示值为上传值/10 #续航里程 0.1 km ; 显示值为上传值/10
enduranceMileage = "6707" + self.int2hexStringByBytes(4) + self.int2hexStringByBytes(380,4) enduranceMileage = "6707" + self.int2hexStringByBytes(4) + self.int2hexStringByBytes(382,4)
data = data + engineSpeed + carSpeed + surplusOil + coolingLiquidTemperature + airInletTemperature data = data + engineSpeed + carSpeed + surplusOil + coolingLiquidTemperature + airInletTemperature
data = data + intakeManifoldPressure + atmosphericPressure + envTemperature + acceleratorLocation + oilPressure data = data + intakeManifoldPressure + atmosphericPressure + envTemperature + acceleratorLocation + oilPressure
...@@ -81,9 +81,9 @@ class SaloonCarOBD_data(MessageBase): ...@@ -81,9 +81,9 @@ class SaloonCarOBD_data(MessageBase):
# 获取剩余油量 # 获取剩余油量
##################################################### #####################################################
def getSurplusOil(self): def getSurplusOil(self):
# 剩余油量 ,剩余油量,单位 L 或%Bit15=0 百分比%,OBD 都为百分比Bit15=1 单位 L,显示值为上传值/10 (32768) # 剩余油量 ,剩余油量,单位L或% ; Bit15=0 百分比%,OBD都为百分比 ;Bit15=1 单位 L,显示值为上传值/10 (32768)
units = 32768 units = 0
surplusOil = 800 surplusOil = 801
data = units + surplusOil data = units + surplusOil
dataHex = self.int2hexStringByBytes(data,2) dataHex = self.int2hexStringByBytes(data,2)
return dataHex return dataHex
......
...@@ -47,6 +47,7 @@ def sendSingleMsg(msg): ...@@ -47,6 +47,7 @@ def sendSingleMsg(msg):
# client.send(bytes.fromhex(msg)) # client.send(bytes.fromhex(msg))
data = client.recv(BUF_SIZE) data = client.recv(BUF_SIZE)
print(data) print(data)
print(PlatformCommon_res(data).getOriginalMsg())
print(PlatformCommon_res(data).getMsg()) #解析平台通用应答消息 print(PlatformCommon_res(data).getMsg()) #解析平台通用应答消息
# print(TerminalRegister_res(data).getMsg()) #解析终端注册应答消息 # print(TerminalRegister_res(data).getMsg()) #解析终端注册应答消息
# print(PlatefromVersionInfo_res(data).getMsg()) #解析平台版本信息包上传应答 # print(PlatefromVersionInfo_res(data).getMsg()) #解析平台版本信息包上传应答
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
</div> </div>
<H3 style="border-bottom: 1px solid #eee;">设置终端注册消息内容:</H3> <H3 style="border-bottom: 1px solid #eee;">设置终端注册消息内容:</H3>
<ul class="protocol_content" style="padding:0px;"> <ul class="protocol_content" style="padding:0px;">
<li><label>市县域ID:</label><input id="provinceId" type="text" class="form-control" value="0103"></li> <li><label>市县域ID:</label><input id="provinceId" type="text" class="form-control" value="103"></li>
<li><label>制造商ID:</label><input id="manufacturerId" type="text" class="form-control" value="11010"></li> <li><label>制造商ID:</label><input id="manufacturerId" type="text" class="form-control" value="11010"></li>
<li style="width:500px;"><label>终端型号:</label><input style="width:320px;" id="terminalType" type="text" class="form-control" value="a865h643gfdj64fd7432"></li> <li style="width:500px;"><label>终端型号:</label><input style="width:320px;" id="terminalType" type="text" class="form-control" value="a865h643gfdj64fd7432"></li>
<li><label>终端ID:</label><input id="terminalId" type="text" class="form-control" value="H6uyt08"></li> <li><label>终端ID:</label><input id="terminalId" type="text" class="form-control" value="H6uyt08"></li>
......
...@@ -71,7 +71,7 @@ def porcessTerminalRegisterMsg(): ...@@ -71,7 +71,7 @@ def porcessTerminalRegisterMsg():
subPkg = int(request.form.get("subPkg")) subPkg = int(request.form.get("subPkg"))
pkgCounts = int(request.form.get("pkgCounts")) pkgCounts = int(request.form.get("pkgCounts"))
provinceId = request.form.get("provinceId") provinceId = int(request.form.get("provinceId"))
manufacturerId = request.form.get("manufacturerId") manufacturerId = request.form.get("manufacturerId")
terminalType = request.form.get("terminalType") terminalType = request.form.get("terminalType")
terminalId = request.form.get("terminalId") terminalId = request.form.get("terminalId")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment