[Python.NET] "TypeError: No method matches given arguments" Error - please help!

[email protected] Fri, 13 Aug 2021 17:56:16 -0000
Newsgroups gmane.comp.python.dotnet
Message-ID <[email protected]>
This seems to come up semi-regularly from a web search, but I have been unable to converge on a solution. I am using Python 3.8 and pythonnet to try to control a Newport ESP301 motion controller. The supplied .NET assembly contains this command:

public int SR_Get(int axisNumber, out double limit, out string errstring)
	{
		errstring = string.Empty;
		limit = double.MinValue;
		string text = string.Format("{0}{1}", axisNumber.ToString(), "SR");
		string text2 = text + "?";
		string empty = string.Empty;
		StringBuilder sbBuffer = new StringBuilder();
		int num = m_COM.Query(text2, ref sbBuffer);
		empty = sbBuffer.ToString();
		empty = empty.Trim();
		errstring = checkReturnCodeAndResponse(text2, num, empty);
		if (num == 0 && string.IsNullOrEmpty(errstring))
		{
			decodeDoubleFromResponse(text, empty, out limit);
		}
		if (!string.IsNullOrEmpty(errstring))
		{
			return -1;
		}
		return 0;
	}

I am unable to get this command to run successfully using Pythonnet. Here is my code:
import sys
print("Adding location of Newport.ESP301.CommandInterface.dll to sys.path")
sys.path.append(r'C:\Windows\Microsoft.NET\assembly\GAC_64\Newport.ESP301.CommandInterface\v4.0_2.0.0.3__9f994642f5b48132')
                
import clr
clr.AddReference("Newport.ESP301.CommandInterface")
from CommandInterfaceESP301 import *

import System

#=====================================================================

# Instrument Initialization
instrument="COM3"
BAUDRATE = 921600 
print('Instrument Key=>', instrument)

# create an ESP301 instance 
ESP301Device = ESP301() 

# Open communication 
ret = ESP301Device.OpenInstrument(instrument, BAUDRATE); 
if ret == 0:
    print("Instrument successfully opened!")
else:
    print("Error!")
 
# Get positive software limit
result, response, errString = ESP301Device.SR_Get(1) 
if result == 0:
    print('positive software limit=>', response) 
else: 
    print('Error=>', errString)

If I try to execute this code, I get the following error:
====== RESTART: C:\Users\Laser\Documents\Python Programs\esp301_python.py ======
Adding location of Newport.ESP301.CommandInterface.dll to sys.path
Instrument Key=> COM3
Instrument successfully opened!
Traceback (most recent call last):
  File "C:\Users\Laser\Documents\Python Programs\esp301_python.py", line 57, in <module>
    result, response, errString = ESP301Device.SR_Get(1)
TypeError: No method matches given arguments for SR_Get: (<class 'int'>)


I thought this was originally a problem with int64 vs. int32 but I have tried several methods for converting between these and all give the same error. FWIW, I have no trouble getting this to work in Matlab:
clear
% Add Assembly
NET.addAssembly('C:\Windows\Microsoft.NET\assembly\GAC_64\Newport.ESP301.CommandInterface\v4.0_2.0.0.3__9f994642f5b48132\Newport.ESP301.CommandInterface.dll');
% load modules
import CommandInterfaceESP301.*;
cport = "COM3";
BAUDRATE = 921600;
ESP301Device = ESP301();
% open communication
ret = ESP301Device.OpenInstrument(cport, BAUDRATE);
if ret == 0
    disp("Intrument open!")
else
    disp("Error!")
end

% Get negative software limit
[result, response, errString] = ESP301Device.SR_Get(1);

I'm completely stumped and frustrated at this point. Any constructive feedback would be very appreciated!

Matt
_______________________________________________
PythonNet mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/pythonnet.python.org/
Member address: [email protected]