Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
new-socketemulator
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李远洪
new-socketemulator
Commits
268ca5ec
Commit
268ca5ec
authored
Apr 03, 2020
by
liyuanhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
M300 OBD协议完成50%
parent
98b8eb32
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
163 additions
and
2 deletions
+163
-2
README.md
README.md
+1
-1
lib/protocol/m300/OBDCAN_protocol_m300.py
lib/protocol/m300/OBDCAN_protocol_m300.py
+162
-1
No files found.
README.md
View file @
268ca5ec
lib/protocol/m300/OBDCAN_protocol_m300.py
View file @
268ca5ec
...
...
@@ -9,7 +9,11 @@ from lib.protocol.m300.M300Base import M300Base
class
OBDCAN_protocol_m300
(
M300Base
):
def
__init__
(
self
,
waterCode
=
"0003"
,
DEV_ID
=
"M121501010001"
,
timeInfo
=
"2020-03-30 17:00:59"
,
prototolType
=
"11"
,
statusMask
=
"01010101010101010101"
\
,
safeStatus
=
0
,
doorStatus
=
0
,
lockStatus
=
0
,
windowStatus
=
0
,
lightStatus
=
0
,
swichStatusA
=
0
,
swichStatusB
=
0
,
dataBit
=
0
\
,
dataFlowMask
=
"fffffffd"
,
votage
=
360
,
totalMilleageType
=
"02"
,):
,
dataFlowMask
=
"fffffffd"
,
votage
=
360
,
totalMilleageType
=
"02"
,
totalMilleage
=
3000
,
totalOil
=
300
,
troubleLightStatus
=
0
\
,
troubleCodeNum
=
2
,
engineSpeed
=
3000
,
speed
=
60
,
airInletTemperature
=
88
,
coolingLiquidTemperature
=
76
,
envTemperature
=
65
\
,
intakeManifoldPressure
=
20
,
oilPressure
=
276
,
atmosphericPressure
=
28
,
airFlow
=
550
,
valveLocation
=
51
,
acceleratorLocation
=
32
\
,
engineRunTime
=
370
,
troubleMileage
=
4508
,
surplusOil
=
801
,
engineLoad
=
52
,
fuelTrim
=
89
,
fireAngle
=
154
,
dashboardTotailMilleage
=
3000
\
,
carTotalRunTime
=
360
,):
super
()
.
__init__
()
# 不执行该方法,无法使用父类里面定义的属性
self
.
waterCode
=
waterCode
#消息流水号
self
.
DEV_ID
=
DEV_ID
#设备Id
...
...
@@ -25,10 +29,37 @@ class OBDCAN_protocol_m300(M300Base):
self
.
swichStatusA
=
swichStatusA
#开关状态A
self
.
swichStatusB
=
swichStatusB
# 开关状态B
self
.
dataBit
=
dataBit
#数据字节
self
.
retain9
=
0
self
.
retail10
=
0
self
.
dataFlowMask
=
dataFlowMask
#数据流掩码
self
.
votage
=
votage
#电瓶电压
self
.
totalMilleageType
=
totalMilleageType
#总里程类别
self
.
totalMilleage
=
totalMilleage
#行驶里程,上传值单位为m(米)
self
.
totalOil
=
totalOil
#总的燃油消耗量,上传值单位为ml(毫升)
self
.
troubleLightStatus
=
troubleLightStatus
#故障灯状态(MIL)
self
.
troubleCodeNum
=
troubleCodeNum
#故障码个数
self
.
engineSpeed
=
engineSpeed
#发动机转速
self
.
speed
=
speed
#车辆速度
self
.
airInletTemperature
=
airInletTemperature
#进气口温度
self
.
coolingLiquidTemperature
=
coolingLiquidTemperature
#冷却液温度
self
.
envTemperature
=
envTemperature
#车辆环境温度
self
.
intakeManifoldPressure
=
intakeManifoldPressure
#进气歧管压力
self
.
oilPressure
=
oilPressure
#燃油压力
self
.
atmosphericPressure
=
atmosphericPressure
#大气压力
self
.
airFlow
=
airFlow
#空气流量
self
.
valveLocation
=
valveLocation
#气门位置传感器
self
.
acceleratorLocation
=
acceleratorLocation
#油门踏板位置
self
.
engineRunTime
=
engineRunTime
#发动机运行时间
self
.
troubleMileage
=
troubleMileage
#故障行驶里程
self
.
surplusOil
=
surplusOil
#剩余油量
self
.
engineLoad
=
engineLoad
#发动机负荷
self
.
fuelTrim
=
fuelTrim
#长期燃油修正(组1)
self
.
fireAngle
=
fireAngle
#点火提前角
self
.
dashboardTotailMilleage
=
dashboardTotailMilleage
#仪表总里程
self
.
carTotalRunTime
=
carTotalRunTime
#车辆总运行时间
self
.
retail
=
"00000000000000000000"
self
.
tripMark
=
"0000"
# 驾驶循环标签
#################################################
...
...
@@ -52,8 +83,138 @@ class OBDCAN_protocol_m300(M300Base):
#################################################
def
getMsgBody
(
self
):
data
=
""
dateInfo
=
self
.
getDateInfo
(
self
.
timeInfo
)
# 日期
prototolType
=
self
.
prototolType
#协议类别
statusMask
=
self
.
statusMask
#状态掩码
safeStatus
=
self
.
getSafeStatus
()
#安全状态
doorStatus
=
self
.
getDoorStatus
()
#门状态
lockStatus
=
self
.
getLockStatus
()
#锁状态
windowStatus
=
self
.
getWindowStatus
()
#窗户状态
lightStatus
=
self
.
getLightStatus
()
#灯状态
swichStatusA
=
self
.
getSwichStatusA
()
#开关状态A
swichStatusB
=
self
.
getSwichStatusB
()
# 开关状态B
dataBit
=
self
.
getDataBit
()
#数据字节
retain9
=
self
.
int2hexStringByBytes
(
self
.
retain9
)
retail10
=
self
.
int2hexStringByBytes
(
self
.
retail10
)
dataFlowMask
=
self
.
dataFlowMask
return
data
#获取安全状态
def
getSafeStatus
(
self
):
accStatus
=
0
#acc状态,1:开 0:关
defenseStatus
=
0
#设防撤防状态,2:设防 0:撤防
brakeStatus
=
0
#脚刹状态,4:踩下 0:松开
acceleratorStatus
=
0
#是否踩油门,8:踩下 0:松开
handBrakeStatus
=
0
#手刹状态,16:拉起手刹 0:松开手刹
mainSafetyBelt
=
0
#主驾驶安全带,32:插入安全带 0:松开安全带
subSafetyBelt
=
0
#副驾驶安全带,64:插入安全带 0:松开安全带
retain
=
0
#预留字段
val
=
accStatus
+
defenseStatus
+
brakeStatus
+
acceleratorStatus
+
handBrakeStatus
+
mainSafetyBelt
+
subSafetyBelt
+
retain
hexData
=
self
.
int2hexStringByBytes
(
val
)
return
hexData
#获取门状态
def
getDoorStatus
(
self
):
lfDoorStatus
=
0
#左前门,1,:开 0:关
rfDoorStatus
=
0
#右前门,2:开 0:关
lbDoorStatus
=
0
#左后门,4:开 0:关
rbDoorStatus
=
0
#右后门,8:开 0:关
trunk
=
0
#后备箱,16:开 0:关
enginCover
=
0
#发动机盖:32:开 0:关
retain1
=
0
#预留字段
retain2
=
0
#预留字段
val
=
lfDoorStatus
+
rfDoorStatus
+
lbDoorStatus
+
rbDoorStatus
+
trunk
+
enginCover
+
retain1
+
retain2
hexData
=
self
.
int2hexStringByBytes
(
val
)
return
hexData
#获取锁状态
def
getLockStatus
(
self
):
lfDoorLockStatus
=
0
#左前门锁状态,1:开 0:关
rfDoorLockStatus
=
0
#右前门锁状态,2:开 0:关
lbDoorLockStatus
=
0
#左后门锁状态,4:开 0:关
rbDoorLockStatus
=
0
#右后门锁状态,8:开 0:关
retain1
=
0
retain2
=
0
retain3
=
0
retain4
=
0
val
=
lfDoorLockStatus
+
rfDoorLockStatus
+
lbDoorLockStatus
+
rbDoorLockStatus
+
retain1
+
retain2
+
retain3
+
retain4
hexData
=
self
.
int2hexStringByBytes
(
val
)
return
hexData
#获取窗户状态
def
getWindowStatus
(
self
):
lfWindowStatus
=
0
#左前窗,1:开 0:关
rfWindowStatus
=
0
#右前窗,2:开 0:关
lbWindowStatus
=
0
# 左后窗,4:开 0:关
rbWindowStatus
=
0
# 右后窗,8:开 0:关
topWindowStatus
=
0
#天窗开关,16:开 0:关
lTurnLight
=
0
#左转向灯,32:开 0:关
rTurnLight
=
0
#右转向灯,64:开 0:关
readLight
=
0
#阅读灯,128:开 0:关
val
=
lfWindowStatus
+
rfWindowStatus
+
lbWindowStatus
+
rbWindowStatus
+
topWindowStatus
+
lTurnLight
+
rTurnLight
+
readLight
hexData
=
self
.
int2hexStringByBytes
(
val
)
return
hexData
# 灯状态
def
getLightStatus
(
self
):
lowHeadlight
=
0
#近光灯,1:开 0:关
highHeadlight
=
0
#远光灯,2:开 0:关
ffogLight
=
0
#前雾灯,4:开 0:关
bfogLight
=
0
#后雾灯,8:开 0:关
dangerLight
=
0
#危险灯,16:开 0:关
backCarLight
=
0
#倒车灯,32:开 0:关
autoLight
=
0
#auto灯,64:开 0:关
widthLight
=
0
#示宽灯,128:开 0:关
val
=
lowHeadlight
+
highHeadlight
+
ffogLight
+
bfogLight
+
dangerLight
+
backCarLight
+
autoLight
+
widthLight
hexData
=
self
.
int2hexStringByBytes
(
val
)
return
hexData
# 开关状态A
def
getSwichStatusA
(
self
):
machineOilWarning
=
0
#机油报警,1:开 0:关
oilWarning
=
0
#燃油报警,2:开 0:关
wiperWarning
=
0
#雨刷报警,4:开 0:关
loudsspeakerWaring
=
0
#喇叭报警,8:开 0:关
airConditionerWaring
=
0
#空调,16:开 0:关
backMirrorWaring
=
0
#后视镜状态:32开 0:关
retain1
=
0
retain2
=
0
val
=
machineOilWarning
+
oilWarning
+
wiperWarning
+
loudsspeakerWaring
+
airConditionerWaring
+
backMirrorWaring
+
retain1
+
retain2
hexData
=
self
.
int2hexStringByBytes
(
val
)
return
hexData
# 开关状态B
def
getSwichStatusB
(
self
):
retain1
=
0
retain2
=
0
retain3
=
0
retain4
=
0
#档位,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
val
=
retain1
+
retain2
+
retain3
+
retain4
+
gears
hexData
=
self
.
int2hexStringByBytes
(
val
)
return
hexData
# 数据字节
def
getDataBit
(
self
):
V1N1
=
0
#VIN1,1:存在 0:不存在
retain1
=
0
retain2
=
0
busMileage
=
0
#总线总里程,8:存在 0:不存在
dashboardData
=
0
#仪表数据,16:存在 0:不存在
engineSpeed
=
0
#发动机转速,32:存在 0:不存在
carSpeed
=
0
#车辆速度,64:存在 0:不存在
surplueOil
=
0
#剩余油量,64:存在 0:不存在
val
=
V1N1
+
retain1
+
retain2
+
busMileage
+
dashboardData
+
engineSpeed
+
carSpeed
+
surplueOil
hexData
=
self
.
int2hexStringByBytes
(
val
)
return
hexData
#获取时间信息
def
getDateInfo
(
self
,
data
):
year
=
self
.
int2hexStringByBytes
(
int
(
data
[
2
:
4
]))
month
=
self
.
int2hexStringByBytes
(
int
(
data
[
5
:
7
]))
day
=
self
.
int2hexStringByBytes
(
int
(
data
[
8
:
10
]))
hour
=
self
.
int2hexStringByBytes
(
int
(
data
[
11
:
13
]))
miniute
=
self
.
int2hexStringByBytes
(
int
(
data
[
14
:
16
]))
seconds
=
self
.
int2hexStringByBytes
(
int
(
data
[
17
:]))
dataHex
=
year
+
month
+
day
+
hour
+
miniute
+
seconds
return
dataHex
if
__name__
==
"__main__"
:
print
(
OBDCAN_protocol_m300
()
.
generateMsg
())
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment