import java.net.*
import java.sql.*
import java.io.*
import java.util.*
import net.wimpi.modbus.net.*
import net.wimpi.modbus.io.*
import net.wimpi.modbus.msg.*
import net.wimpi.modbus.util.*
import net.wimpi.modbus.procimg.*

arr = new SimpleRegister[2];
def toFloat(Register smal,Register larg) {
byte[] regis = new byte[4];
if (smal instanceof SimpleRegister) {
regis[3] = larg.toBytes()[0]
regis[2] = larg.toBytes()[1]
regis[1] = smal.toBytes()[0]
regis[0] = smal.toBytes()[1]
return ""+ModbusUtil.registersToFloat(regis)
} else if(smal == null) {
regis[0] = 0
regis[1] = 0
regis[2] = larg.toBytes()[0]
regis[3] = larg.toBytes()[1]
return ""+ModbusUtil.registersToInt(regis)
}
}
def myDOset(ModbusTCPTransaction tr) {
z = 2050+Integer.parseInt(""+Math.round(10*Math.random ()))
print "w: "+ z
sr = new SimpleRegister(z);
// SimpleRegister[] sr = arr;
rgs = new WriteMultipleRegistersRequest(2,sr)
rgs.setUnitID(2)
tr.setRequest(rgs)
try {
tr.execute()
} catch(Exception e) {println e}
}
def myDOs(ModbusTCPTransaction tr) {
sreg = new BitVector(15)
(0..14).each{i -> sreg.setBit(i,(Math.round(Math.random())>0?true:fa lse))}
println sreg.size() + " " + sreg.byteSize()
// arr[0] = new SimpleRegister(16914);
// arr[1] = new SimpleRegister(26214);
// SimpleRegister[] sreg = arr;
rgs = new WriteMultipleCoilsRequest(0,sreg)
rgs.setUnitID(1)
tr.setRequest(rgs)
try {
tr.execute()
} catch(Exception e) {println e}
}
def myDIs(ModbusTCPTransaction tr) {
rgs = new ReadCoilsRequest(0,13)
rgs.setUnitID(1)
tr.setRequest(rgs)
try {
tr.execute()
ban = ((ReadCoilsResponse) tr.getResponse()).getCoils()
ban.forceSize(13);
println ban.toString()
} catch(Exception e) {println e}
}
def myDIreq(ModbusTCPTransaction tr) {
igs = new ReadMultipleRegistersRequest(0,4)
// igs = new ReadInputRegistersRequest(2,1)
igs.setUnitID(1)
tr.setRequest(igs)
try {
tr.execute()
ban = (((ReadMultipleRegistersResponse) tr.getResponse()).getRegisters())
// ban = (((ReadInputRegistersResponse) tr.getResponse()).getRegisters())
} catch(Exception e) {println e; System.exit(0)}
// println toFloat(ban[0],ban[1])
// arr[0] = ban[0]
// arr[1] = ban[1]
// println " r: "+toFloat(null,ban[0]) + " "
println toFloat(null,ban[1]) +" "+toFloat(null,ban[0])
//4 println toFloat(null,ban[1]) +" "+toFloat(null,ban[0])+" "+toFloat(null,ban[3])+" "+toFloat(null,ban[2])
//6 println toFloat(null,ban[0]) +" "+toFloat(null,ban[1])+" "+toFloat(null,ban[2])+" "+toFloat(null,ban[3])+" "+toFloat(null,ban[4])+" "+toFloat(null,ban[5])
//8 println toFloat(null,ban[0]) +" "+toFloat(null,ban[1])+" "+toFloat(null,ban[2])+" "+toFloat(null,ban[3])+" "+toFloat(null,ban[4])+" "+toFloat(null,ban[5])+" "+toFloat(null,ban[6])+" "+toFloat(null,ban[7])
}
def myConnect() {
con = new TCPMasterConnection(InetAddress.getByName("10.0.6. 88"))
con.setPort(502)
con.connect()
do_trans = new ModbusTCPTransaction(con)
cal = new GregorianCalendar()
while(true) {
// cal.setTime(new java.util.Date())
// if (cal.get(Calendar.SECOND)%5 == 0) {
// myDOs(do_trans)
// myDOset(do_trans)
// try{Thread.sleep(100)}catch(Exception e){}
myDIreq(do_trans)
// myDIs(do_trans)
// try{Thread.sleep(100)}catch(Exception e){}
// }
try{Thread.sleep(900)}catch(Exception e){}
}
con.close()
}
tScript = new Thread(new Runnable() {
public void run() {
myConnect()
}
});
tScript.start();
у меня ни каких проблем не возникает, правда это не Ваш язык и код для тестов, так что много лишнего