本文章為原創,轉載請注明出處!
IOTOS驅動Thales800對接從0到1詳細程序
- Thales800
- 代碼分析`
- 代碼拆分決議
- 1. InitComm
- init負責代碼撰寫程序中初始化通訊,不論是客戶在和設備對接時,還是在開發者拿到資料后和中臺進行通訊,均只在此程序初始化一次;另外值得注意的是,在任何場景下,連接資料庫、請求api介面、C++sdk初始化通訊等均可在此代碼下進行初始化通訊,
- 2. conllecting
登錄平臺:IOTOS?愛投斯物聯中臺
賬號:iotos_test 密碼:iotos123
代碼地址:IOTOSDK-Python: IOTOS Python版本SDK,自帶原生介面和采集引擎 (gitee.com)
Thales800
法國泰雷茲集團(THALES)源于1879年的法國湯姆遜(THOMSON)集團,是設計、開發和生產航空、防御及資訊技術服務產品的專業電子高科技公司,同時是法國最大的防務類機械電子科技公司,公司總部設在法國,研發設在美國硅谷和法國巴黎及俄羅斯,
代碼分析`
#!coding:utf8
import json
import sys
sys.path.append("..")
from driver import *
class Thales800(IOTOSDriverI):
#1、通信初始化
def InitComm(self,attrs):
try:
# 一、tcp埠監聽
self.__port = self.sysAttrs['config']['param']['tcp']
self.__tcpServer = TcpServerThread(self, self.__port)
self.__tcpServer.setDaemon(True)
self.__tcpServer.start()
self.info(self.sysAttrs['name'] + u' TCP埠' + str(self.__port) + u"已啟動監聽!")
except Exception, e:
self.online(false)
traceback.print_exc(u'通信初始化失敗' + e.message)
def tcpCallback(self, data):
datastr = self.str2hex(data)
self.info("HEX Master < < < < < < Device: " + datastr)
self.info("STRING Master < < < < < < Device: " + data)
# self.debug(struct.unpack('B', data[11])[0])
# if len(data) >= 17 and struct.unpack('B', data[12])[0] == 3: # modbus設備地址1,功能號3
# valuetmp = (struct.unpack('B', data[14])[0] * 256 + struct.unpack('B', data[15])[0]) / 10.0
# for dataId, attrs in self.data2attrs.items():
# try:
# if attrs['config']['param'].has_key('devid') and attrs['config']['param']['devid'] == \
# struct.unpack('B', data[11])[0]:
# self.setValue(self.name(dataId), valuetmp)
# self.info(valuetmp)
# break
# except Exception, e:
# traceback.print_exc(u'忽略例外資料:' + dataId)
# else:
# self.warn(u'忽略設備地址為1的正常資料以外的資料!')
#2、采集引擎回呼
def Collecting(self, dataId):
'''*************************************************
TODO
**************************************************'''
return ()
#3、控制
#廣播事件回呼,其他操作訪問
def Event_customBroadcast(self, fromUuid, type, data):
'''*************************************************
TODO
**************************************************'''
return json.dumps({'code':0, 'msg':'', 'data':''})
# 4、查詢
# 查詢事件回呼,資料點查詢訪問
def Event_getData(self, dataId, condition):
'''*************************************************
TODO
**************************************************'''
return json.dumps({'code':0, 'msg':'', 'data':''})
# 5、控制事件回呼,資料點控制訪問
def Event_setData(self, dataId, value):
'''*************************************************
TODO
**************************************************'''
return json.dumps({'code':0, 'msg':'', 'data':''})
# 6、本地事件回呼,資料點操作訪問
def Event_syncPubMsg(self, point, value):
'''*************************************************
TODO
**************************************************'''
return json.dumps({'code':0, 'msg':'', 'data':''})
一般的代碼塊中所提到的六種函式InitComm、Collecting、Event_customBroadcast、Event_getData、Event_setData、Event_syncPubMsg僅三種在實際生產生活中使用;分別是InitComm、Collecting、Event_setData這三種
代碼拆分決議
1. InitComm
#1、通信初始化
def InitComm(self,attrs):
try:
# 一、tcp埠監聽
self.__port = self.sysAttrs['config']['param']['tcp']
self.__tcpServer = TcpServerThread(self, self.__port)
self.__tcpServer.setDaemon(True)
self.__tcpServer.start()
self.info(self.sysAttrs['name'] + u' TCP埠' + str(self.__port) + u"已啟動監聽!")
except Exception, e:
self.online(false)
traceback.print_exc(u'通信初始化失敗' + e.message)
init負責代碼撰寫程序中初始化通訊,不論是客戶在和設備對接時,還是在開發者拿到資料后和中臺進行通訊,均只在此程序初始化一次;另外值得注意的是,在任何場景下,連接資料庫、請求api介面、C++sdk初始化通訊等均可在此代碼下進行初始化通訊,
因為在驅動運行之前,所有代碼均已封裝完畢,sys.Attrs()即為從中臺中讀取設備的config配置;如下圖
這里面的配置,也就是用戶在使用的時候創建的設備實體中的配置,就是使用self.Attrs()讀取這里的,并且這里是一個json欄位!
在此強調!!!!
設備和部署中臺的服務器是使用TCP連接,所以需要具有中臺的服務器開放tcp的連接埠給到驅動和設備、設備端進行連接,所以要進行tcp回呼函式,意思也就是當有設備連接的時候會采集到資料,主動上報的資料,也就是在
def tcpCallback(self, data):
'''
其中data就是設備通訊中上傳過來的資料,當然,一般的在設備本身內、資料一般為16進制或者、2進制資料或者unicode型
所以在下面使用到了內置函式,self.str2hex()將資料進制化成為可視組
'''
datastr = self.str2hex(data)
self.info("HEX Master < < < < < < Device: " + datastr)
self.info("STRING Master < < < < < < Device: " + data)
中實作資料通訊,實作tcp通訊,
2. conllecting
在collecting中,使用者是實作驅動代碼和設備進行實際通訊的;也就是在實際程序總,collecting 可以回圈采集資料而非主動詢問,在這強調的是,collecting存在兩種模式,比如在modbus中,上位機和下位機在此模式下是主(上位機)問從(下位機)、從(下位機)報主(上位機)都是可以的,而在collecting中此函式的作用即為回圈的發送指令,則就是回圈執行某特定陳述句所以在collecting中可以回圈針對設備進行詢問,但是上文中提到的tcp連接,在初始化的時候執行一次即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294297.html
標籤:其他
上一篇:物聯網設備上云小demo_02

