When calling a .NET method that has out parameters, you have to supply
dummy arguments for the out parameters, can you try something like:

result, response, errString = ESP301Device.SR_Get(1, 0.0, '')

The values don't seem to matter, but they must be there from what I have
seen in my usage.


On Fri, Aug 13, 2021 at 9:03 PM LOST _ <lostfree...@gmail.com> wrote:

> Hi Matt,
>
>
>
> From the description this looks like a bug in pythonnet. Can you tell
> which version of pythonnet are you using?
>
>
>
> Regards,
>
> Victor
>
>
>
>
>
> *From: *mysf...@gmail.com
> *Sent: *Friday, August 13, 2021 8:59 PM
> *To: *pythonnet@python.org
> *Subject: *[Python.NET] "TypeError: No method matches given arguments"
> Error - please help!
>
>
>
> 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 -- pythonnet@python.org
>
> To unsubscribe send an email to pythonnet-le...@python.org
>
> https://mail.python.org/mailman3/lists/pythonnet.python.org/
>
> Member address: lostfree...@gmail.com
>
>
> _______________________________________________
> PythonNet mailing list -- pythonnet@python.org
> To unsubscribe send an email to pythonnet-le...@python.org
> https://mail.python.org/mailman3/lists/pythonnet.python.org/
> Member address: slide.o....@gmail.com
>


-- 
Website: http://earl-of-code.com
_______________________________________________
PythonNet mailing list -- pythonnet@python.org
To unsubscribe send an email to pythonnet-le...@python.org
https://mail.python.org/mailman3/lists/pythonnet.python.org/
Member address: arch...@mail-archive.com

Reply via email to