0

我是java新手...我正在尝试在modbus上阅读。PLC 为从设备,配置良好。我的 java 文件无法读取 modbus 值。这是下面给出的代码。master.init() 出现错误;方法。在这种情况下请帮助我。

package com.mod4j;
import java.io.File;
import gnu.io.SerialPort;
import com.serotonin.io.serial.SerialParameters;
import com.serotonin.*;
import com.serotonin.modbus4j.ModbusFactory;
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.code.DataType;
import com.serotonin.modbus4j.code.RegisterRange;
import com.serotonin.modbus4j.exception.ModbusInitException;
import com.serotonin.modbus4j.locator.BaseLocator;
import com.serotonin.modbus4j.locator.NumericLocator;
import com.serotonin.modbus4j.msg.ReadCoilsRequest;
import com.serotonin.modbus4j.msg.ReadCoilsResponse;
import com.serotonin.modbus4j.msg.ReadDiscreteInputsRequest;
import com.serotonin.modbus4j.msg.ReadHoldingRegistersRequest;
import com.serotonin.modbus4j.msg.ReadHoldingRegistersResponse;
import com.serotonin.modbus4j.msg.ReadInputRegistersRequest;
import com.serotonin.modbus4j.msg.ReadInputRegistersResponse;
import com.serotonin.modbus4j.msg.WriteCoilRequest;
import com.serotonin.modbus4j.msg.WriteCoilResponse;
import com.serotonin.modbus4j.msg.WriteRegistersRequest;
import com.serotonin.modbus4j.msg.WriteRegistersResponse;
import gnu.io.*;

public class Modbus4JTest
{

    public static void main(String[] args) throws Exception
    {  

   try 
   {
   SerialParameters params = new SerialParameters();
   params.setCommPortId("COM1");
   params.setBaudRate(9600);
   params.setDataBits(8);
   params.setStopBits(1);
   params.setParity(0);

   ModbusFactory modbusFactory = new ModbusFactory();
   ModbusMaster master = modbusFactory.createRtuMaster(params);
   master.setTimeout(100);
   master.setRetries(3);

   byte [] RIR,RHR,RDI,RCR;
   int slaveId=1;
   int startOffset=0;
   int numberOfRegisters=10;
   int numberOfBits=10;

   try
   {
        master.init();
        while (true) 
        {
                ReadInputRegistersRequest reqRIR = new ReadInputRegistersRequest(slaveId, startOffset, numberOfRegisters);
                System.out.println("ReadInputRegistersRequest reqRIR =" +reqRIR);
                ReadInputRegistersResponse resRIR = (ReadInputRegistersResponse) master.send(reqRIR);
                RIR = resRIR.getData();
                System.out.println("InputRegisters :" + RIR);

                ReadHoldingRegistersRequest reqRHR = new ReadHoldingRegistersRequest(slaveId, startOffset, numberOfRegisters);
                ReadHoldingRegistersResponse resRHR = (ReadHoldingRegistersResponse) master.send(reqRHR);
                RHR=resRHR.getData();
                System.out.println("HoldingRegister :" + RHR);

                ReadDiscreteInputsRequest reqRDI= new ReadDiscreteInputsRequest(slaveId, startOffset, numberOfBits);
                ReadCoilsResponse resRDI = (ReadCoilsResponse) master.send(reqRDI);
                RDI=resRDI.getData();
                System.out.println("DiscreteInput :" + RDI);

                ReadCoilsRequest reqRCR = new ReadCoilsRequest(slaveId, startOffset, numberOfBits);
                ReadCoilsResponse resRCR = (ReadCoilsResponse) master.send(reqRCR);
                RCR=resRCR.getData();   
                System.out.println("CoilResponce :" + RCR);

                short[] sdata = null;
                WriteRegistersRequest reqWR = new WriteRegistersRequest(slaveId, startOffset, sdata);
                WriteRegistersResponse resWR = (WriteRegistersResponse) master.send(reqWR);

                int writeOffset = 0;
                boolean writeValue = true;
                WriteCoilRequest reqWC = new WriteCoilRequest(slaveId, writeOffset, writeValue);
                WriteCoilResponse resWC = (WriteCoilResponse) master.send(reqWC);

                Thread.sleep(1000);
             }//end while
        }//end try
       catch (Exception e) 
       {

            e.printStackTrace();
   }//end catch

  finally 
   {
       master.destroy();
   }//end finally
 }//end try
catch (Exception e)
{
    e.printStackTrace();
}//end catch

}// end main
    }//end class Modbus4JTest

这是我正在运行的 java 文件。

这是我在编译后遇到的错误..请提出哪里出了问题,请纠正我...是否有任何分步教程或任何演示视频,请在
ayyaz.nadaf@gmail.com给我链接

Exception in thread "main" java.lang.NoClassDefFoundError:      
jssc/SerialPortException
at com.serotonin.io.serial.SerialUtils.openSerialPort(SerialUtils.java:94)
at com.serotonin.modbus4j.serial.SerialMaster.init(SerialMaster.java:58)
at com.serotonin.modbus4j.serial.rtu.RtuMaster.init(RtuMaster.java:45)
at com.mod4j.Modbus4JTest.main(Modbus4JTest.java:58)
Caused by: java.lang.ClassNotFoundException: jssc.SerialPortException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more
4

1 回答 1

0

看来您正在使用Modbus4J。它基于jSSC(Java 简单串行连接器)进行串行通信,因此请确保在编译时找到 jSSC(您可能需要单独下载它,因为您获得的是ClassNotFoundException与 jSSC 类相关的)。

我不知道任何教程,但我可能建议您查看Modbus4J 论坛存档。这是一个简单的Modbus RTU 示例

于 2015-04-11T15:55:26.243 回答