Байтовый массив в Python из C# DLL - PullRequest
0 голосов
/ 05 августа 2020

Я сейчас пытаюсь понять, как работать с байтовыми массивами в Python. В сценарии Python я буду вызывать C# DLL с разными функциями. Один из них имеет массив байтов в качестве возвращаемого значения, с которым мне нужно работать. Функция с этим возвращаемым значением - это функция ICPVL_Read ниже.

Python Код:

import clr
import enum
clr.AddReference(R'C:\Software\Kleinprojekte\EAM_Safety\trunk\Testing\i2c_tests\I2C.dll')
from I2C import I2C_Control, FTDI

myControl = I2C_Control()

def ListDevices():
    deviceList = myControl.ListFTDIDevice()

    for i in range(2):
        print("Device Index: {0}".format(i))
        print("Flags: {0}".format(deviceList[i].Flags))
        print("Type: {0}".format(deviceList[i].Type)) 
        print("ID: {0}".format(deviceList[i].ID))
        print("Location ID: {0}".format(deviceList[i].LocId))
        print("Serial Number: {0}".format(deviceList[i].SerialNumber))
        print("Description: {0}".format(deviceList[i].Description))
        print("")
        
def OpenDevice(devicenumber):
    status = myControl.OpenDevice(devicenumber)
    if status == FTDI.FT_STATUS.FT_OK:
        print("successfully opened device")
    else:
        print("unable to open device")
        
ListDevices()
OpenDevice(0)

myControl.ConfigureMPSSE(50000)
# receivedData = myControl.ICPVL_Read(0x61, 0x0F)
print(myControl.ICPVL_Read(0x61, 0x0F))

Но теперь я всегда получаю 0 в качестве ответа вместо 6. Но работает тот же код. при вызове функций DLL из самого проекта C# с той же кодовой базой. Это результат моего python кода

Следующий код - это функция C# внутри DLL, которая работает правильно!

public byte[] ICPVL_Read(byte SlaveAddress, byte RegisterAddress)
        {
            MPSSE Device = new MPSSE();                                                                 // Create new instance of MPSSE to call specific functions
            bool state = false;                                                                         // state

            byte SlaveAddToWrite = (byte)((SlaveAddress << 1) | 0x00);                                  // Configure SlaveAddress to 7-bit format and with Write bit
            byte SlaveAddToRead = (byte)((SlaveAddress << 1) | 0x01);                                   // Configure SlaveAddress to 7-bit format and with Read bit

            byte[] ReceivedData;                                                                        // Array of received data bytes

            state = Device.iC_PVL_WriteAddress(myFtdiDevice, SlaveAddToWrite, 0x0F);                    // Send first part of reading from register process
            ReceivedData = Device.iC_PVL_ReadAddress(myFtdiDevice, SlaveAddToRead);                     // Send second part and read specific data

            return ReceivedData;                                                                        // Return array of data bytes
        }

Спасибо за ваша помощь :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...