Saya benar-benar berjuang di sini sebagai pemrograman baru dengan proses menggunakan perpustakaan snap7 yang terhubung ke PLC siemens menggunakan Python3 pada raspberry PI. Pada dasarnya saya membaca data sebagai array byte kemudian memodifikasinya dan mengirimkannya kembali ke PLC. Saya dapat membacanya dan mengubahnya menjadi daftar dan memodifikasi data.

Jadi data saya adalah daftar yang terlihat seperti [0,0,0,0,0,0,1,0]. Itu akan selalu tepat 1 byte (8 bit). Jadi saya bisa memodifikasi bit ini. Namun saya berjuang untuk mengembalikannya ke dalam array byte. Saya perlu mengonversi dari daftar itu menjadi respons array byte yang akan terlihat seperti bytearray(b'\x02')

Beberapa contoh dari apa yang saya harapkan

Input [0,0,0,0,0,0,0,1]
Output bytearray(b'\x01')

Input [0,0,0,0,0,0,1,0]
Output bytearray(b'\x02')

Input[0,0,0,0,0,0,1,1]
Output bytearray(b'\x03')

Agak aneh bahwa ini adalah array byte untuk hanya 1 byte tetapi begitulah cara kerja perpustakaan untuk menulis ke blok data di PLC.

Tolong beri tahu saya jika ada data tambahan yang bisa saya bagikan Kevin

0
Kevin Lay 13 Mei 2021, 00:45

1 menjawab

Jawaban Terbaik

Pertama-tama ubah daftar menjadi desimal, ini dapat dilakukan dalam satu baris menggunakan.

sum(val*(2**idx) for idx, val in enumerate(reversed(binary)))

Tetapi untuk membuat kodenya sedikit lebih mudah dibaca

binary_list = [0,0,0,0,0,0,1,0]
number = 0
for b in binary_list:
    number = (2 * number) + b

Kemudian cukup gunakan bytearray dan tambahkan nomornya sebagai input

output = bytearray([number])

Ubah ini menjadi fungsi

def create_bytearray(binary_list):
    number = 0
    for b in binary_list:
        number = (2 * number) + b
    return bytearray([number])

Sekarang Anda hanya perlu menelepon

output = create_bytearray([0,0,0,0,0,0,1,0])
print(output)

Dan Anda akan mendapatkan

bytearray(b'\x02')
0
kinshukdua 12 Mei 2021, 21:59