# HW-VX6330K Dengan Menggunakan Python Serial
HW-VX6330K dapat diakses dari berbagai bahasa pemrograman asalakan komunikasi dilakukan berdasarkan protokol komunikasi yang ada, jadi sebelum melanjutkan, disarankan untuk download dahulu protokol komunikasi dari HW-VX6330K dari link berikut : https://www.electron.id/produk/hw-vx6330k/ (opens new window)
# Persiapan
Sebelum masuk ke bagian code, siapkan dulu beberapa hal berikut :
- Python versi 2.7, 3.4 atau lebih baru.
- Library pySerial.
- Pycharm IDE.
- Konverter RS232 to USB Serial.
- Python versi 3 dapat langsung didownload di https://www.python.org/downloads/ (opens new window)
Untuk library pySerial bisa langsung dicari di python interpreter pada pycharm atau langsung di cmd dengan mengetikan
pip install pyserial
pycharm Ide dapat di instal di link berikut https://www.jetbrains.com/pycharm/ (opens new window)
Konverter dapat dibeli di : https://www.tokopedia.com/electron/usb-to-rs232-ch340-serial-port-db9-cable-com-port-adapter-ch-340-kabel (opens new window)
# 1. Hubungkan RS232 to Serial ke komputer
Untuk menghubungkan HW-VX6330K dengan komputer cukup sambungkan dengan menggunakan kabel konverter RS232 to USB Serial.
Setelah terhubung pastikan untuk mengecek kalau port serial terdeteksi oleh Device Manager dari komputer.
Setelah port serial sudah terdeteksi perlu diingat bahwa HW-VX6330K telah terhubung ke port serial COM3 berdasarkan gambar diatas.
# 2. Kode dan Penjelasan
Code ini disiapkan menjadi 3 bagian utama, yang pertama adalah bagian menyusun blok perintah untuk uji coba, setelah itu crc untuk melengkapi blok perintah yang sudah dibuat dan bagian terakhir adalah melakukan pengiriman dan penerimaan data dengan menggunakan komunikasi serial
Perintah – perintah yang akan digunakan pada tutorial ini berfokus pada read / write pada memori didalam tag.
pada bagian pertama yang merupakan perintah diatur menjadi seperti berikut
# scan
INVENTORY1 = '06 FF 01 00 06' # membaca TID
INVENTORY2 = '04 FF 0F' #Membaca EPC
# read EPC
readTagMem = '12 FF 02 02 11 22 33 44 01 00 04 00 00 00 00 00 02'
# change EPC
writeEpc = '0F 03 04 03 00 00 00 00 11 22 33 44 55 66'
# set data
setAddress = '05 03 24 00'
Perintah diatas disusun hanya sampai pada blok perintah data, untuk blok terakhir yang merupakan CRC-16 dari seluruh perintah yang dikirim, dibuat dengan menggunakan code sehingga akan lebih mudah untuk mengganti – ganti isi perintah diatas seperti di bawah ini.
def crc(cmd):
cmd = bytes.fromhex(cmd)
uiCrcValue = PRESET_Value
for x in range((len(cmd))):
uiCrcValue = uiCrcValue ^ cmd[x]
for y in range(8):
if (uiCrcValue & 0x0001):
uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL
else:
uiCrcValue = uiCrcValue >> 1
crc_H = (uiCrcValue >> 8) & 0xFF
crc_L = uiCrcValue & 0xFF
cmd = cmd + bytes([crc_L])
cmd = cmd + bytes([crc_H])
return cmd
Setelah blok perintah sudah dilengkapi oleh fungsi diatas, perintah akan dikirim dan diambil responnya dengan menggunakan prosedur di bawah ini.
def crc(cmd):
cmd = bytes.fromhex(cmd)
uiCrcValue = PRESET_Value
for x in range((len(cmd))):
uiCrcValue = uiCrcValue ^ cmd[x]
for y in range(8):
if (uiCrcValue & 0x0001):
uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL
else:
uiCrcValue = uiCrcValue >> 1
crc_H = (uiCrcValue >> 8) & 0xFF
crc_L = uiCrcValue & 0xFF
cmd = cmd + bytes([crc_L])
cmd = cmd + bytes([crc_H])
return cmd
Dengan 3 bagian penting diatas, kode digabungkan menjadi seperti berikut
from serial import *
PRESET_Value = 0xFFFF
POLYNOMIAL = 0x8408
test_serial = Serial('COM3', 57600, timeout=0.1)
# scan
INVENTORY1 = '06 FF 01 00 06' # membaca TID
INVENTORY2 = '04 FF 0F' #Membaca EPC
# read EPC
readTagMem = '12 FF 02 02 11 22 33 44 01 00 04 00 00 00 00 00 02'
# change EPC
writeEpc = '0F 03 04 03 00 00 00 00 11 22 33 44 55 66'
# set data
setAddress = '05 03 24 00'
def crc(cmd):
cmd = bytes.fromhex(cmd)
uiCrcValue = PRESET_Value
for x in range((len(cmd))):
uiCrcValue = uiCrcValue ^ cmd[x]
for y in range(8):
if (uiCrcValue & 0x0001):
uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL
else:
uiCrcValue = uiCrcValue >> 1
crc_H = (uiCrcValue >> 8) & 0xFF
crc_L = uiCrcValue & 0xFF
cmd = cmd + bytes([crc_L])
cmd = cmd + bytes([crc_H])
return cmd
def send_cmd(cmd):
data = crc(cmd)
print(data)
test_serial.write(data)
response = test_serial.read(512)
response_hex = response.hex().upper()
hex_list = [response_hex[i:i + 2] for i in range(0, len(response_hex), 2)]
hex_space = ' '.join(hex_list)
send_cmd(INVENTORY1)
# Video Tutorial
Untuk mengganti – ganti perintah cukup ganti bagian isi yang di kirim ke prosedur send_cmd. untuk tutorial lebih jelasnya bisa dicek dalam video di bawah ini.