есть простой скрипт
import socket import re HOST = '192.168.100.252' PORT = 2000 # reverse func def reverse_per_two_char(chars): ''' reverse '010203' to '030201' ''' return ''.join(reversed(re.findall('..?', chars))) #есть функция которая собирает из частей строку в 16тиричном формате и отправляет в порт на #указаный IP def write_register(start_digit, digit_num=1, port=PORT, host=HOST, dic=True): client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, port)) cmd = '500000ffff03000e00100001140000'\ + reverse_per_two_char('{:0=6x}'.format(start_digit))\ + 'a8' + reverse_per_two_char('{:0=4x}'.format(digit_num))\ + reverse_per_two_char('{:0=4x}'.format(int('0003'))) msg = bytes.fromhex(cmd) client.send(msg) res = client.recv(1024).hex() if dic: return {start_digit: int(reverse_per_two_char(res[-4*digit_num:]), 16)} else: return int(reverse_per_two_char(res[-4*digit_num:]), 16) testregD1 = write_register(1, 1) print('D1: ', testregD1)
не получается вынести int('0003')) в аргумент функции
если передавать в переменной cmd все работает
пробовал вот так:
def write_register(start_digit, write_data, digit_num=1, host=HOST, port=PORT, dic=True): client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, port)) cmd = '500000ffff03000e00100001140000'\ + reverse_per_two_char('{:0=6x}'.format(start_digit))\ + 'a8' + reverse_per_two_char('{:0=4x}'.format(digit_num))\ + reverse_per_two_char('{:0=4x}'.format(int[b](write_data[/b], 16))) msg = bytes.fromhex(cmd) client.send(msg) res = client.recv(1024).hex() if dic: return {start_digit: int(reverse_per_two_char(res[-4*digit_num:]), 16)} else: return int(reverse_per_two_char(res[-4*digit_num:]), 16) testregD1 = write_register(1, 1, '0001') print('D1: ', testregD1)
ошибка:
Traceback (most recent call last):
File “test_write_cmd.py”, line 40, in <module>
testregD1 = write_register(1, 1, ‘0001’)
File “test_write_cmd.py”, line 29, in write_register
+ ‘a8’ + reverse_per_two_char('{:0=4x}'.format(digit_num))\
ValueError: Unknown format code ‘x’ for object of type ‘str’
видимо я что-то где-то не правильно передаю? подскажите что может быть не так, спасибо.