C# modbus.CreateRTU(SerialPort)

0

Witam,

Mam kłopot.

Użyłem biblioteki NModBus.dll w wersji 1.11, u przy uruchomieniu przykładu:

    private void button1_Click(object sender, EventArgs e)
    {
        ModbusSerialMaster m = null;
        Modbus.IO.ModbusTransport t = new Modbus.IO.ModbusTransport()
        
        SerialPort p = new SerialPort("COM5");
        p.BaudRate = 115200;
        p.DataBits = 8;
        p.Parity = Parity.None;
        p.StopBits = StopBits.One;
        p.Open();

        m = ModbusSerialMaster.CreateRtu(p);
       
    }

    wykonanie polecenia ModBusSerialMaster.CreateRtu(p); sypiąc błędem :

An unhandled exception of type 'System.TypeInitializationException' occurred in Modbus.dll

Additional information: Inicjator typów zgłosił wyjątek dla typu 'Modbus.IO.ModbusRtuTransport'.

Jak ktoś ma jakieś sugestie to chętnie wysłucham, pozdrawiam.

0

opakuj to w blok try i catch i wyswietl wiadomosc

zapewne SerialPort jest zle skonfigurowany albo blokowany (sprawdz porty w antywirusie)

edit

i co sie stanie jak sprobujesz ten kod?

SerialPort serialPort = new SerialPort(); //Create a new SerialPort object.
serialPort.PortName = “COM1”;
serialPort.BaudRate = 115200;
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.Open();
ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);
0

Dzieki za odpowiedź,
ale już napisałem jaki mam komunikat : Inicjator typów zgłosił wyjątek dla typu 'Modbus.IO.ModbusRtuTransport'

może inne sugestie ?

pozdrawiam

0

no to zlap ten wyjatek i go wypisz przeciez jest napisane

unhandled exception of type 'System.TypeInitializationException' occurred in Modbus.dll

ja nie widze tutaj zadnego try-catch wiec gdzie zlapales ten wyjatek i wypisales co tam jest?

Jak sama nazwa wskazuje expectiona, cos musiales przy inicjalizacji obiektu zrobic zle.

0

Poniżej masz mój kod ze starszej aplikacji. Wygląda to podobnie do twojego. Prawdopodobnie masz problem z portem. Spróbuj nawiązać połączenie jakimś klientam Modbusa np. http://polish.modbus.pl/node/5 i zobaczy czy działa.

               serial_port.BaudRate = 9600;
                serial_port.DataBits = 8;
                serial_port.Parity = Parity.None;
                serial_port.StopBits = StopBits.One;
                serial_port.ReadTimeout = 2000;
                serial_port.WriteTimeout = 2000;
                serial_port.Open();

                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serial_port);
                master.Transport.Retries = 0;
                master.Transport.ReadTimeout = 2000;
                master.Transport.WriteTimeout = 2000;
 
0

w przykładzie na forum nie uzyłem tej składni a w kodzie jest - dlatego złapałem
a Modbus.dll to bibliotek, jak mam złapać wyjątek ?

0
try
{
  m = ModbusSerialMaster.CreateRtu(p);
}
catch (System.TypeInitializationException typeInitializationExpcetion)
{
  //tutaj wypisujesz albo w ogole dajesz breakpointa i podlagadasz czy typeInitializationExpcetion ma cos ciekawego co moglo by naprowadzic Cie
} 
0

W tej części kodu, który podałeś jest podobnie (mam programik terminal.exe), który port normalnie otwiera i przesyła dane. Tyle, że wszystko się rypie z chwilą
master = (...).CreateRtu(port);

pozdrawiam

0

do @fasadin ( ale ja już przechwyciłem wyjątek i otrzymałem komunikat błędu, ale biblioteki.dll nie zdebuguje.

0

Czy jest InnerException ustawiony, a jeżeli jest to jaki?

0

dziękuję za pomoc. Problem zostal rozwiązany. W moim przypadku chodziło jednak, o uszkodzony plik biblioteki modbus.dll.

Podmieniłem na inny plik i śmiga. Pozdrawiam serdecznie,

1 użytkowników online, w tym zalogowanych: 0, gości: 1