0
次のコードは、組み込みデバイスのModbusインターフェイスをシミュレートするためのコードです。残念なことに、古いPython(2.4.3)があります。このコードは2.7で動作しますが、2.4.3では動作しません。これは、使用しているPythonのバージョンがstruct.pack_intoをサポートしていないため、struct.packのみをサポートしているためです。これを修正する方法についていくつかアドバイスを受けることができますか?私は、おそらく文字列を使用し、バイトバッファに変換する必要があると思う。これはPython以外のコードと話すので、pickleは使用できません。サイズ計算のビットでPython 2.4.3でPack_intoの代わりにPackを使用
import socket
import sys
import array
import struct
def hexdump(src, length=16):
FILTER = ''.join([(len(repr(chr(x))) == 3) and chr(x) or '.' for x in range(256)])
lines = []
for c in xrange(0, len(src), length):
chars = src[c:c+length]
hex = ' '.join(["%02x" % ord(x) for x in chars])
printable = ''.join(["%s" % ((ord(x) <= 127 and FILTER[ord(x)]) or '.') for x in chars])
lines.append("%04x %-*s %s\n" % (c, length*3, hex, printable))
return ''.join(lines)
HOST = '192.168.1.187'
PORT = 502
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST,PORT))
s.listen(1)
conn, addr = s.accept()
data = []
datatran = array.array('B', '\x00' * 14)
data = conn.recv(1024)
print 'Connect by', addr
while (data):
sys.stdout.write(hexdump(data))
TransID , ProtoColID, PacketLength, UnitID, FC, StartAddress, RegisterCount = struct.unpack_from(">hhhBBhh", data)
print TransID, ProtoColID, PacketLength, UnitID
print FC, StartAddress, RegisterCount
struct.pack_into(">hhhBBBh", datatran, 0, TransID , ProtoColID, PacketLength+2, UnitID, FC, 2, 51)
conn.sendall(datatran)
data = conn.recv(1024)
conn.close()
s.close()
おかげ
はい、これは非常にうまく機能している!!!!!おかげでレックス –