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ファイルです。

そして、ここに私がコンパイルした後に得たエラーがあります..何が間違っていたのかを提案し、私を修正してください...ステップバイステップのチュートリアルまたはデモビデオはありますか
.yyaz.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 Simple Serial Connector) に基づいているため、コンパイル中に jSSC が検出されることを確認してください (jSSC クラスに関連するものを取得しているため、別途ダウンロードする必要がある場合がありますClassNotFoundException)。

チュートリアルについては知りませんが、Modbus4J フォーラム アーカイブを参照することをお勧めします。簡単なModbus RTU の例を次に示します。

于 2015-04-11T15:55:26.243 に答える