PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile 2024 → Lecture modbus TCP/IP avec un automate
Lecture modbus TCP/IP avec un automate
Iniciado por SamD, 14,ene. 2019 20:27 - No hay respuesta
Publicado el 14,enero 2019 - 20:27
Bonjour,
Pour une fois je ne pose pas une question mais je propose une solution :D
Vous trouverez ci-dessous le code java pour lire un mot en modbus TCP/IP :
import net.wimpi.modbus.Modbus;
import net.wimpi.modbus.ModbusException;
import net.wimpi.modbus.ModbusIOException;
import net.wimpi.modbus.ModbusSlaveException;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.ReadInputRegistersRequest;
import net.wimpi.modbus.msg.ReadInputRegistersResponse;
import net.wimpi.modbus.msg.WriteSingleRegisterRequest;
import net.wimpi.modbus.net.TCPMasterConnection;
import net.wimpi.modbus.procimg.SimpleRegister;
import java.net.InetAddress;
import java.net.UnknownHostException;

public static void Lecture_auto ()
{
// Integer samInt = 0;
// String toto = " ";
/* The important instances of the classes mentioned before */
TCPMasterConnection con = null; //la connection
ModbusTCPTransaction trans = null; //la transaction
ReadInputRegistersRequest rrq = null;// requete registre
ReadInputRegistersResponse rrs = null;// reponse registre

//ecriture
WriteSingleRegisterRequest WriteReq = null;
//WriteSingleRegisterResponse WriteRes = null;
SimpleRegister MyReg = new SimpleRegister(1);

// /* Variables param�tres */
InetAddress addr = null; //variable adresse esclave
try {
addr = InetAddress.getByName("192.168.30.90");//passage texte en adresse
} catch (UnknownHostException e) {
// TODO Bloc catch genere automatiquement
e.printStackTrace();
}

//D�finition du port - 502 pour mon automate
int port = Modbus.DEFAULT_PORT;
port = 502;

//Offset d�part pour le registre - 100 pour moi
int ref = 0;
ref = 100;

// Nombre de mot lu
int count = 0;
count = 1;

//Boucle de r�p�tition de la transaction
int repeat = 1;

//2. Ouverture de la connection � l'automate
con = new TCPMasterConnection(addr);
con.setPort(port);
try {
con.connect();
// System.out.println("Connection OK");
} catch (Exception e) {
// TODO Bloc catch g�n�r� automatiquement
e.printStackTrace();
}

//3. D�finition de la requ�te registre
rrq = new ReadInputRegistersRequest(ref, count);

//4. Preparation de la transation
trans = new ModbusTCPTransaction(con);
trans.setRequest(rrq);

// 5. Execution de la lecture
int k = 0;
int val_auto = 0;
String txt_auto = "";
do {
try {
trans.execute();
} catch (ModbusIOException e) {
// TODO Bloc catch g�n�r� automatiquement
e.printStackTrace();
} catch (ModbusSlaveException e) {
// TODO Bloc catch g�n�r� automatiquement
e.printStackTrace();
} catch (ModbusException e) {
// TODO Bloc catch g�n�r� automatiquement
e.printStackTrace();
}
rrs = (ReadInputRegistersResponse) trans.getResponse();
for (int n=0; n < rrs.getWordCount(); n++){
val_auto = rrs.getRegisterValue(n);
txt_auto = String.valueOf(val_auto);
appelProcedureWL("Rec_auto", txt_auto);
}
k++;
} while (k < repeat);



//6. Fermeture de la connection
con.close();

}

Il faudra bien intégrer la bibliothèque jamod.jar
Bonne soirée,

Sam