Имеется некое стороннее приложение, которое взаимодействует со внешним устройством через DLL файл. Этот DLL файл имеет 14 экспортируемых функций. При помощи сторонней программы был записан лог файл взаимодействия между приложением и этой DLL c расшифровкой всех передаваемых и возвращаемых параметров. Задача состоит в том, чтобы повторить работу стороннего приложения, путем вызова функций DLL через Python.

Задачу нужно разбить на несколько этапов:

  • Преобразование лог файла в файл формата JSON
  • Проигрывание полученного JSON файла для имитации работы стороннего приложения
Преобразование лог файла в файл формата JSON

Некоторые данные, которые передаются или принимаются из DLL находятся в виде указателей на структуры данных (описаны в файле j2534.h), в лог файле они расшифрованы. В JSON файле должны быть отображены все передаваемые и возвращаемые данные/структуры, включая относительное время вызова функции DLL.

Проигрывание полученного JSON файла

На основе полученного в предыдущем этапе JSON файла программа должна уметь его воспроизвести, путем вызова DLL функций (имя DLL задается пользователем). При этом, должны быть соблюдены временные интервалы между вызовом DLL функций.

Некоторые DLL функции возвращают следующие указатели: pDeviceID, pChannelID. В последствии эти значения передаются в качестве входных параметров DLL функции. Однако, проблема в том, что возвращаемые pDeviceID, pChannelID в разные моменты времени могут быть разными, и чтобы все корректно работало, при проигрывании лога необходимо сохранять полученные значения указателей pDeviceID, pChannelID, и использовать именно их при вызове функций DLL, в которые они передаются, игнорируя данные из JSON файла

Также учесть возможность контроля (задается пользователем при необходимости) выходных значений DLL функции, путем сравнения с данными о выходных значениях из JSON файла. Если данные не совпадают, выводить в лог файл подробную информацию о месте возникновения проблемы в отдельный файл. Предусмотреть параметр в JSON файле, по которому можно принудительно отключить данный контроль для каждого конкретного вызова DLL функции.

Файл j2534.h можно скачать отсюда: https://github.com/fenugrec/oj2534-fw/blob/master/src/j2534.h

Один из примеров лог файла я прикрепил. Выбранному исполнителю будет предоставлено большое количество подобных файлов для теста.

Оплата WebMoney по договоренности.

8 лет назад
wertex76
48 лет
17 лет в сервисе
Был
5 лет назад

Заявки фрилансеров

Нет заявок фрилансеров