Re: [問題] Python struct pack 動態填值
首先先謝謝KSJ,這應該是不用發文問的才是,在下看來對tuple還沒有很熟
不過藉由這次機會,有更熟了。
這個用途我是用在網路通信協定中 MODBUS over TCP/IP
它是Master/Slave 架構
Master 會問Slave端data, 不過由於問的資料筆數可以是變動的
Slave端回送的資料就會有差異,所以才需要動態調整資料傳輸量
基本上我想問的就是如何動態改變pack中資料
至於對應的資料從哪裡來呢?
MODBUS 這協定中會定義一份table,裡面的內容會對應到你的產品相關控制變數
也就是data mapping的部份。
至於有人應該會問這要用在哪?其實MODBUS通常都是用在工業級產品比較多
比方說一些自動化設備中的控制器,這樣管理人員就可以遠端遙控多個設備了
其實它也是有RS485的介面,只不過這裡是用TCP/IP的header包起來再往外送而已
差別不大
對MODBUS有興趣的人可以google一下,或是找我一起討論也可以。 ^_^
(囧 好像跟python有點離題了,應該不會判我劣文吧!XDDD)
Thanks.
※ 引述《KSJ (阿真)》之銘言:
: ※ 引述《leeraphael (leeraphael)》之銘言:
: : 各位先進好,請教一個問題,如下
: : self.packet_struct = struct.Struct('>H H H B B B 3H')
: : # 此處的3H會對應到G1,G2,G3
: : # 問題來了,就是我的3H是希望可以動態變更的
: : # 有時是2H or 3H or 4H 等等
: 稍稍看了一下 官方doc
: 如果希望是可以動態變更 應該是用動態建構吧?
: # n = 動態的
: self.packet_struct = struct.Struct('>H H H B B B '+ str( n ) + 'H')
: : # 但是對應到G1, G2, G3 有辦法用array去對應嗎?
: : # 因為我用int array, compiler會說少參數,因為array他還是只認為是一個參數
: : values = (self.tx_packet,A\
: : self.tx_packet.B, \
: : self.tx_packet.C, \
: : self.tx_packet.D, \
: : self.tx_packet.E, \
: : self.tx_packet.F, \
: : self.tx_packet.G1,\
: : self.tx_packet.G2,\
: : self.tx_packet.G3)
: : self.responce_data = self.packet_struct.pack(*values)
: 這裡有點不懂
: 但是看起來 要9個變數得給它9個 要n個變數就給它n個
: 必須在變數 values 中的個數做一些整合處理
: 因為struct是動態建構的
: values也該是
: 我認為你是想用 類似序列的東西
: (int array??是指什麼 compiler又是@@? 好像c++的東西)
: 好比 G = (1, 2, 3) 或 G = (1, 2) ??
: 然後你塞 values = (a,b,c,d,...,G) 然後被當成一個G 就GG了
: 你可以先 value_first = (a,b,c,d,...) 做一個tuple
: 然後再 values = value_first + G 這樣去變動values的長度
: 再放回去就行了
: : 如果問題有不明白的地方,我會在補充說明
: : 先謝謝大家了
: 如果我誤解你的意思或是上面有誤 還請告訴我
: 感恩
: ps.有空不妨可以分享一下這個module(class)的用途與心得XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.120.68.239
推
12/04 17:27, , 1F
12/04 17:27, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章