# HW-VX6330K Dengan Menggunakan Python TCP/IP
HW-VX6330K dapat diakses dari berbagai bahasa pemrograman asalkan 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/product/hw-vx6330k.html (opens new window)
# Persiapan
Sebelum masuk ke bagian code, siapkan dulu beberapa hal berikut :
- Python versi 2.7, 3.4 atau lebih baru.
- Socket (Biasanya sudah ada default tidak perlu download lagi)
- Pycharm IDE.
- Kabel Ethernet (straight).
Python versi 3 dapat langsung didownload di https://www.python.org/downloads/ (opens new window)
Pycharm IDE dapat di instal di link berikut https://www.jetbrains.com/pycharm/ (opens new window)
# 1. Mengatur ip address dan port pad HW-VX 63
Untuk menghubungkan HW-VX6330K dengan komputer menggunakan kabel ethernet, kita perlu mengatur dahulu IP address dan port dari HW-VX sebelum melakukan komunikasi.
Setelah IP address sudah diketahui langsung masukan ke bagan dari code sehingga langsung dapat diakses dari python.
# 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
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.
PRESET_Value = 0xFFFF
POLYNOMIAL = 0x8408
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 send_cmd(cmd):
s = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
s.connect((host, port))
message = crc(cmd)
s.sendall(message)
data = s.recv(64)
response_hex = data.hex().upper()
hex_list = [response_hex[i:i + 2] for i in range(0, len(response_hex), 2)]
hex_space = ' '.join(hex_list)
print(hex_space)
s.close()
Dengan 3 bagian penting diatas, kode digabungkan menjadi seperti berikut
import socket
host = '192.168.1.192'
port = 6000
#####Perintah######
# scan
INVENTORY1 = '06 FF 01 00 06' # membaca TID
INVENTORY2 = '04 FF 0F' #Membaca EPC
#crc
PRESET_Value = 0xFFFF
POLYNOMIAL = 0x8408
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):
s = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
s.connect((host, port))
message = crc(cmd)
s.sendall(message)
data = s.recv(64)
response_hex = data.hex().upper()
hex_list = [response_hex[i:i + 2] for i in range(0, len(response_hex), 2)]
hex_space = ' '.join(hex_list)
print(hex_space)
s.close()
send_cmd(INVENTORY1)
send_cmd(INVENTORY2)
# 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.