Привет, ребята. Я работаю над сценарием, который будет получать данные от хоста, используя Стандарт передачи данных () Разработан: Комитетом по стандарту передачи данных Отдел обработки линз The Vision Council ), через последовательный порт и передать данные в ModBus Протокол для устройства, чтобы выполнить его операции.
Поскольку у меня нет финансового доступа к хост-машине, я пытаюсь разработать дополнительный сценарий для эмуляции хоста.Сейчас я нахожусь на этапе, когда мне нужно прочитать много информации с последовательного порта, и я получаю только часть данных.Я надеялся получить всю строку, отправленную с помощью функции send_job () в моем скрипте эмулятора хоста.
Ребята, может, кто-нибудь из вас скажет мне, будет ли это хорошим подходом?единственное, что должен делать компьютер, - это получить 2 значения из ответа хоста и назначить их двум регистрам хранения Modbus.
ПРИМЕЧАНИЕ: функция инициализации жестко запрограммирована, потому что она всегда будетбудет таким же, и фактические данные ответа не будут иметь значения, кроме статуса.Кроме того, запрос задания жестко запрограммирован, я передаю только # задание, которое я получаю из регистра хранения Modbus, точная логика того, как хост разрешил это, не имеет значения, мне нужно только отправить отсканированный с устройства номер задания в этом формате.
основной скрипт:
def request_job_modbus(job):
data = F'[06][1c]req=33[0d][0a]job={job}[0d][0a][1e][1d]'.encode('ascii')
writer(data)
def get_job_from_serial():
response = serial_client.read_all()
resp = response.decode()
return resp
# TODO : SEND INIT SEQUENCE ONCE AND VERIFY IF REQUEST status=0
initiation_request()
init_response_status = get_init_status()
print('init method being active')
print(get_init_status())
while True:
# TODO: get job request data
job_serial = get_job_from_serial()
print(job_serial)
скрипт эмуляции хоста:
def send_job():
job_response = '''[06][1c]ans=33[0d]job=30925[0d]status=0;"ok"[0d]do=l[0d]add=;2.50[0d]ar=1[0d]
bcerin=;3.93[0d]bcerup=;-2.97[0d]crib=;64.00[0d]do=l[0d]ellh=;64.00[0d]engmask=;613l[0d]
erdrin=;0.00[0d]erdrup=;10.00[0d]ernrin=;2.00[0d]ernrup=;-8.00[0d]ersgin=;0.00[0d]
ersgup=;4.00[0d]gax=;0.00[0d]gbasex=;-5.30[0d]gcrosx=;-7.96[0d]kprva=;275[0d]kprvm=;0.55[0d]
ldpath=\\uscqx-tcpmain-at\lds\iot\do\800468.sdf[0d]lmatid=;151[0d]lmatname=;f50[0d]
lnam=;vsp_basic_fh15[0d]sgerin=;0.00[0d]sgerup=;0.00[0d]sval=;5.18[0d]text_11=;[0d]
text_12=;[0d]tind=;1.53[0d][1e][1d]'''.encode('ascii')
writer(job_response)
def get_init_request():
req = p.readline()
print(req)
request = req.decode()[4:11]
# print(request)
if request == 'req=ini':
print('request == req=ini??? <<<<<<< cumple condicion y enviala respuesta')
send_init_response()
send_job()
while True:
# print(get_init_request())
get_init_request()
что я получаю на экране: основной скрипт
init method being active
bce
erd
condition was met init status=0
outside loop
ers
condition was met init status=0
inside while loop
trigger reset <<<--------------------
5782
`:lmatid=;151[0d]lmatname=;f50[0d]
lnam=;vsp_basic_fh15[0d]sgerin=;0.00[0d]sgerup=;0.00[0d]sval=;5.18[0d]text_11=;[0d]
text_12=;[0d]tind=;1.53[0d][1e][1d]
outside loop
condition was met init status=0
outside loop
что я получаю на экране: скрипт эмуляции хоста
b'[1c]req=ini[0d][0a][1e][1d]'
request == req=ini??? <<<<<<< cumple condicion y enviala respuesta
b''
b'[06][1c]req=33[0d][0a]job=5782[0d][0a][1e][1d]'
b''
b''
b''
b''
b''
b''