现在有一个串口通信的任务,主要实现的目标是:写一个java程序,通过串口读取一个PLC设备的状态信息,读取到了之后我这边的java程序修改一些这些值,然后发送给另外一个设备(可能是一台计算机)
我要写的java程序是扮演一个主站的角色,PLC设备是从站。我现在主要的问题是不知道那个模拟器怎么用,上面很多10001, 10002....这些是什么东西?它的默认值是0,也就是关闭,双击可以改为1,开启,我想在主站中读取它上面这些10001,10002的值,但是主站这边返回的全是0,怎么回事?
从站modbus simulator软件如图所示红框中的值被改成了1,也就是开启java编写的主站的初始化方法:
//类中的主要成员变量private ModbusFactory factory = new ModbusFactory();private ModbusMaster master = null;private DecimalFormat format = new DecimalFormat("0.0");private DecimalFormat format3 = new DecimalFormat("0.000");private Random random = new Random();private String[] cid ={ "101272124", "388477462", "388477474", "388477478", "388477510", "388477518", "388477538", "388477542", "3322208", "388477458", "388477490", "388477494", "388477506","388477522", "395520057", "199222040" };private String getCid(){int index = Math.abs(random.nextInt()) % (cid.length);return cid[index];}
// 初始化方法public void init(){SerialParameters params = new SerialParameters();try{// 设定MODBUS 通讯的串行口params.setCommPortId("COM2");// 设定成无奇偶校验params.setParity(2);// 设定成数据位是8 位params.setDataBits(8);// 设定为1 个停止位params.setStopBits(1);// 串行口上的波特率params.setBaudRate(9600);master = factory.createRtuMaster(params);//master = factory.createAsciiMaster(params);master.setRetries(0);master.init();}catch (Exception e){e.printStackTrace();}}主站发送请求和接收从站的返回值主要代码如下所示:public void readElectValue(int slaveId, int start, int len){ReadHoldingRegistersRequest request = null;ReadHoldingRegistersResponse response = null;try{request = new ReadHoldingRegistersRequest(slaveId, start, len);response = (ReadHoldingRegistersResponse) master.send(request);if (response.isException()){System.out.println("ERROR========================START");System.out.println(response.getExceptionCode());System.out.println(response.getExceptionMessage());System.out.println("ERROR========================END");}short[] value = response.getShortData();//byte[] data = response.getData();//boolean[] bool = response.getBooleanData();for(int i = 0; i < value.length; i++){System.out.println("getShortDate[" + i + "]:" + value[i]);    // 这里输出的全是0}....}