使用 JAMOD 读取正确的 Schneider Momentum PLC 寄存器或线圈地址
Reading the right Schneider Momentum PLC register or coil address using JAMOD
为了在工作中节省一些钱,我想我会创建一个 java 程序来 right/write 值到 Momentum PLC 而不是必须从 Schneider 购买 WonderWare 许可证,但我可以'似乎无法弄清楚 PLC 端的寻址。通信模式是Modbus/TCP,为了在家测试,我下载了一个PLC模拟器,但我也无法让它工作。我连接正常,只是,又一次,似乎无法轮询正确的地址。
我试图读取的线圈输出在 plc 端有 400012 地址,我正在尝试复制它。
这是我的 javafx 代码,它是用 Maven 构建的,连接到 PLC,我可以读取值,但我似乎从来没有得到正确的值。
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.ReadCoilsRequest;
import net.wimpi.modbus.msg.ReadCoilsResponse;
import net.wimpi.modbus.net.TCPMasterConnection;
import java.net.InetAddress;
public class PrimaryController {
@FXML
private Label labelValue;
@FXML
private Button primaryButton;
@FXML
void handleGetData(ActionEvent event) {
try {
getData();
} catch (Exception e) {
e.printStackTrace();
}
}
private void getData() throws Exception {
// Connection
TCPMasterConnection con = null;
ModbusTCPTransaction trans = null;
ReadCoilsRequest req = null;
ReadCoilsResponse res = null;
InetAddress ipAddress = null;
try {
ipAddress = InetAddress.getByName("localhost");
con = new TCPMasterConnection(ipAddress);
con.setPort(502);
System.out.println("Connecting...");
con.connect();
req = new ReadCoilsRequest(12, 1);
trans = new ModbusTCPTransaction(con);
trans.setRequest(req);
trans.execute();
res = (ReadCoilsResponse) trans.getResponse();
System.out.println("Response: " + res.getCoils().toString());
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
依赖性:
<dependency>
<groupId>net.wimpi</groupId>
<artifactId>jamod</artifactId>
<version>1.2</version>
</dependency>
这里是我用的PLC模拟器
我总是得到响应:00000000
有人对 PLC (Schneider Momentum) 和 Java 之间的通信有经验吗?
谢谢!
为了在工作中节省一些钱,我想我会创建一个 java 程序来 right/write 值到 Momentum PLC 而不是必须从 Schneider 购买 WonderWare 许可证,但我可以'似乎无法弄清楚 PLC 端的寻址。通信模式是Modbus/TCP,为了在家测试,我下载了一个PLC模拟器,但我也无法让它工作。我连接正常,只是,又一次,似乎无法轮询正确的地址。
我试图读取的线圈输出在 plc 端有 400012 地址,我正在尝试复制它。
这是我的 javafx 代码,它是用 Maven 构建的,连接到 PLC,我可以读取值,但我似乎从来没有得到正确的值。
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.ReadCoilsRequest;
import net.wimpi.modbus.msg.ReadCoilsResponse;
import net.wimpi.modbus.net.TCPMasterConnection;
import java.net.InetAddress;
public class PrimaryController {
@FXML
private Label labelValue;
@FXML
private Button primaryButton;
@FXML
void handleGetData(ActionEvent event) {
try {
getData();
} catch (Exception e) {
e.printStackTrace();
}
}
private void getData() throws Exception {
// Connection
TCPMasterConnection con = null;
ModbusTCPTransaction trans = null;
ReadCoilsRequest req = null;
ReadCoilsResponse res = null;
InetAddress ipAddress = null;
try {
ipAddress = InetAddress.getByName("localhost");
con = new TCPMasterConnection(ipAddress);
con.setPort(502);
System.out.println("Connecting...");
con.connect();
req = new ReadCoilsRequest(12, 1);
trans = new ModbusTCPTransaction(con);
trans.setRequest(req);
trans.execute();
res = (ReadCoilsResponse) trans.getResponse();
System.out.println("Response: " + res.getCoils().toString());
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
依赖性:
<dependency>
<groupId>net.wimpi</groupId>
<artifactId>jamod</artifactId>
<version>1.2</version>
</dependency>
这里是我用的PLC模拟器
我总是得到响应:00000000
有人对 PLC (Schneider Momentum) 和 Java 之间的通信有经验吗?
谢谢!