Исходя из фрагмента кода, который вы показываете по своему вопросу, создается впечатление, что вы пытаетесь написать клиент Modbus с нуля.
Modbus - довольно простой протокол, но для написания отладки нового клиента потребуется немало усилий, и, поскольку протокол открыт, уже написано, отлажено и протестировано большое количество кода. Смотри, например, здесь .
По какой команде отправлять нелегко сказать, если вы не упомянули, к какому устройству, в частности, вы подключаетесь и что именно вы хотите с ним делать. В частом сценарии у вас есть машина или датчик в отдаленном районе вашей фабрики, который регистрирует данные от своих датчиков и реагирует на эти данные определенным образом. С помощью Modbus вы можете отправлять запросы на данные на ваш компьютер (считывание катушек / битов или регистров / числовых значений), чтобы отслеживать, что он делает, и отправлять команды для управления им (запись катушек или регистров Modbus) из удаленной комнаты управления с помощью HMI или любой другой вид компьютера.
РЕДАКТИРОВАТЬ: Теперь, когда вы решили использовать EasyModbus, вы ближе к тому, что вы хотите. Но похоже, что вы ищете чтение данных с вашего устройства, поэтому вам не нужно записывать регистры. Вы можете попробовать этот фрагмент ( source ):
public static void main(String[] args)
{
ModbusClient modbusClient = new ModbusClient("127.0.0.1", 1536);
try
{
modbusClient.Connect();
//Read Int value from register 0 (Barrier Command)
System.out.println(modbusClient.ReadHoldingRegisters(0, 1));
//Read Float Value from Register 1 and 2 (Barrier Status)
System.out.println(ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(1, 2)));
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
Если вы посмотрите на карту адресов Modbus с вашего устройства (я взял ее из этого руководства , предполагая, что это ваше устройство):
![enter image description here](https://i.stack.imgur.com/h5r6u.png)
Важно отметить, что на вашем устройстве есть 16-битные и 32-битные значения. Поскольку регистры Modbus 16-битные, для 32-битных типов данных вам нужно прочитать два регистра. Это относится только к регистру № 1 (статус барьера в соответствии с приведенным выше отображением). Для всех остальных вы можете читать и отображать в виде целочисленных значений.