Я сейчас пытаюсь понять, как работать с байтовыми массивами в 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
}
Спасибо за ваша помощь :)