Как проверить связь с Modbus - PullRequest
3 голосов
/ 20 мая 2011

Я пытаюсь пропинговать счетчик Socomec , используя протокол Modbus, изучив, я нашел NModbus, библиотеку C #. Я никогда не использовал библиотеки или C # (обычно Java), но я должен погрузиться прямо в.

Я настроил себя на Visual Studio Express для C # и установил .Net. Затем я скопировал содержимое файла NModbus в папку моего проекта и добавил ссылки на две основные библиотеки DLL. Он не работал с .Net 4, но я переназначил на 3.5 (и удалил ссылку на Microsoft.Csharp), и все, похоже, скомпилировалось.

Я использую этот образец ниже, чтобы попытаться подключиться к ведомому устройству. Когда я запускаю это и устанавливаю переменную startAdress в нужное значение (см. Документацию Socomec), все, что я получаю, это пустое консольное окно.

Короче говоря, я использую правильный метод / параметры, мои настройки / код неверны? Как мне подключиться к этому счетчику?

Мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using Modbus.Data;
using Modbus.Device;
using Modbus.Utility;


namespace NModbus
{
    class SerialMaster
    {
        static void Main(string[] args)
        {
            ModbusSerialAsciiMasterReadRegisters();
        }

        public static void ModbusSerialAsciiMasterReadRegisters()
        {
            using (SerialPort port = new SerialPort("COM1"))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();

                // create modbus master
                IModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);

                byte slaveId = 1;
                ushort startAddress = 50536;
                ushort numRegisters = 5;

                // read five registers       
                ushort[] registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);

                for (int i = 0; i < numRegisters; i++)
                    Console.WriteLine("Register {0}={1}", startAddress + i, registers[i]);
                    Console.ReadLine();
            }

            // output:
            // Register 1=0
            // Register 2=0
            // Register 3=0
            // Register 4=0
            // Register 5=0
        }
    }
}

Ответы [ 2 ]

5 голосов
/ 23 мая 2011

Почему бы вам не использовать библиотеку Java MODBUS , когда вы уже знакомы с Java?Я не работал со счетчиками Socomec, но в целом для устройств MODBUS вам нужно знать протокол и адреса, которые вас интересуют. Затем попробуйте прочитать теги с устройства с помощью какого-то инструмента, который, как вы знаете, работает хорошо, например MODPOLL .Затем, когда вы получаете пригодные значения, как и ожидалось, вы переходите к программированию соединения опроса на любом языке, который вам нравится.В противном случае вы рискуете потерять много времени, размышляя о том, что происходит.Один намек ... Из вашего кода я вижу, что вы действуете как последовательный мастер MODBUS ASCII.Хотя такие устройства существуют, 95% устройств RS232 / RS485, с которыми я работал, были MODBUS RTU.Прочитайте спецификацию, если вы не знаете разницу.

1 голос
/ 17 марта 2013

Вы можете запускать приложения Java как службу Windows. Существует Java-сервис Tomcat, который я использую с Java-приложением моей компании. Вы создали метод, который будет вызываться для остановки службы, но это всего лишь метод.

Вот строка, которую я использую для установки приложения в качестве службы -

"% ~ dp0windows \ tomcat6" // IS //% 1 --DisplayName% 1 - Описание "gmServer для% 1" ^ --JavaHome "% JAVA_HOME%" --Classpath "% PR_CLASSPATH%" --LogPrefix gmserver ^ --StartMode jvm --StopMode jvm --Jvm auto --StartPath "% ~ dp0." ^ --LogPath "% ~ dp0." --LogLevel debug --StdOutput% 1.out --StdError% 1.err ^ --StartClass greenMonitor.gmServer --StartParams -I #% I # -u # 3600 ^ --StopMethod windowsService --StopParams stop --StopTimeout 10

Символы каретки ("^") являются символами продолжения строки в файлах .BAT. Вы сможете найти значения параметров командной строки Tomcat с помощью документации Tomcat.

А для библиотеки Modbus на основе Java, в комплекте с множеством удобных программ, которые вы можете использовать для проверки соединения, посмотрите j2mod на Sourceforge. Моя компания сделала джамод, вместе с кучей чисток, и это было результатом.

...