# 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 :

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.

Konverter RS-232 to USB Serial

Setelah terhubung pastikan untuk mengecek kalau port serial terdeteksi oleh Device Manager dari komputer.

Port Serial Terdeteksi

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.

Last Updated: 2022-09-08