header
裝置型別
裝置id
資料型別
命令字引數長度
引數校驗字
tail
1acffc1d
01ffffffffffffffffffffffff
0401
0101
ff2ee9c8fd
strs=
"1acffc1d 01 ffffffffffffffffffffffff 04 01 01 01 07 2ee9c8fd"
#模擬完全資料流
# strs="1acffc1d 01 fffffffffffffffffffffffe 04 02 2ee9c8fd" #模擬命令字、引數長度、引數缺失
strs_list=strs.replace(
" ","")
header=strs_list[0:
8]#報頭devicetype=strs_list[8:
10]#裝置型別
deviceid=strs_list[10:
34]#裝置id
datatype = strs_list[34:
36]# 資料型別if(
len(strs_list[36:
])==10):
#判斷資料幀的引數長度、引數字段是否存在,判斷依據:資料型別後字串長度是否僅僅滿足校驗字和報尾的長度。
command =
'ff'
# 命令字
parameterlength =
''# 引數長度
parameters =
''else
:#命令字、引數長度、引數都是從前往後擷取
command=strs_list[36:
38]#命令字
parameterlength=strs_list[38:
40]#引數長度
parameters=strs_list[40:
42]#引數checkword=strs_list[-10
:-8]
#校驗字 從後往前擷取,先將裝置型別、裝置id、資料型別、命令字、引數長度、引數累加和累加和的低八位(有問題)
checkword_first=
str(
hex(
int(devicetype,16)
+int
(deviceid,16)
+int
(datatype,16)
+int
(command,16)
+int
(parameterlength if parameterlength!=
""else
"0",16)
+int
(parameters if parameters!=
""else
"0",16)
))checkword_final=checkword_first[-2
:]#校驗字計算為2個16進製制=1個位元組
tail=strs_list[-8
:]#報尾if
(checkword_final==checkword)
:#判斷接收到的校驗字checkword是否等於計算後的校驗字checkword_final
# 資料翻譯
# 裝置型別
devicetype_list =
devicetype = devicetype_list.get(devicetype)
# 命令字
parameters_list=
""if datatype ==
'03'
:if command ==
'01'
: parameters_list =
elif command ==
'02'
: parameters_list =
elif command ==
'05'
: parameters_list =
elif command ==
'09'
: parameters_list =
elif datatype ==
'04'
:if command ==
'01'
: parameters_list =
elif command ==
'02'
: parameters_list =
elif command ==
'05'
: parameters_list =
elif command ==
'08'
: parameters_list =
elif command ==
'09'
: parameters_list =
parameters=parameters_list.get(parameters.lstrip(
"0")
)# 命令字或狀態幀
command_list =
''if
(datatype ==
'03'):
command_list =
elif datatype ==
'04'
: command_list =
command = command_list.get(command)
# 資料型別
datatype_list =
datatype = datatype_list.get(datatype)
else
: exit(
)
#!/usr/bin/python
# -*- coding: utf-8 -*-
from mysqltest.data_dealwith import
*import mysqldb
# 開啟資料庫連線
db = mysqldb.connect(
"localhost"
,"root"
,"11111"
,"zzw"
, charset=
'utf8'
)# 使用cursor()方法獲取操作游標
cursor = db.cursor(
)# sql 插入語句
sql =
"""insert into deviceinfo_translation(header,device_type, device_id, data_type, command,parameter_length,parameters,check_word,tail)
values ('"""
+header+
"""','"""
+devicetype+
"""','"""
+deviceid+
"""','"""
+datatype+
"""','"""
+command+
"""','"""
+parameterlength+
"""','"""
+parameters+
"""','"""
+checkword+
"""','"""
+tail+
"""')"""
try:
# 執行sql語句
print
(sql)
cursor.execute(sql)
# 提交到資料庫執行
db.commit(
)except
:# rollback in case there is any error
msg=db.rollback(
)# 關閉資料庫連線
db.close(
)
經過翻譯後的資料插入:
未經翻譯後的資料插入:
欄位名字段型別
備註header
varchar(10)
報頭device_type
varchar(20)
裝置型別
device_id
varchar(30)
裝置id
data_type
varchar(10)
資料型別
command
varchar(10)
命令字parameter_length
varchar(4)
引數長度
parameters
varchar(100)
引數check_word
varchar(4)
校驗字tail
varchar(10)
報尾
Python高階 連線 Mysql
本篇文章主要用 pymysql 來實現python3 mysql資料的連線。git clone cd pymysql python3 setup.py install 安裝過程如下圖所示 開啟資料庫連線 db pymysql.connect localhost username password t...
python連線MySQL示例
python連線mysql示例一 開啟資料庫連線 connect,connect,connection import pymysql db pymysql.connect host localhost port 3306 user root passwd 123456 db stu charset ...
mysql 模擬 mysql 模擬四
一,填空題 每空 分,共 分 1 如果乙個mysql的版本號沒有字尾,表示該版本已經在很多地方執行一段時間了,而且沒有非平台特定的錯誤報告。我們通常稱之為 穩定 版。2 可以用幾種方式提供mysql程式的選項 1 在命令列中在程式名後面提供。2 在程式啟動時讀取的中設定 檔案 3 在 環境變數 中設...