Показано с 1 по 10 из 13

Тема: Как последовательно считывать параметр PV с ТРМ201?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,574

    По умолчанию

    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();
    у меня ни каких проблем не возникает, правда это не Ваш язык и код для тестов, так что много лишнего

  2. #2

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    у меня ни каких проблем не возникает, правда это не Ваш язык и код для тестов, так что много лишнего
    У меня всё таки проблема в постоянном считывании переменной. Один раз прочитать и вывести на экран - это не сложно, а вот её считывать не представляю как. Вы знаете как это сделать? Нужно-ли использовать потоки? В одном потоке читать значение переменной, а в другом выводить её на экран. Так?

    З.Ы.: ваш код скорее не до конца понял, но вы читаете через бесконечный while, так?

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 06.12.2011, 07:18
  2. ТРМ101 как считать параметр r-S по RS-485
    от Friencis в разделе Помощь Разработчикам
    Ответов: 7
    Последнее сообщение: 20.12.2010, 22:22
  3. Считывать\посылать посылки через порт rs232
    от Максим_Фалалеев в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 08.10.2008, 18:09
  4. ТРМ 33 параметр Р5
    от незарегистрированный в разделе Эксплуатация
    Ответов: 2
    Последнее сообщение: 30.06.2008, 10:52
  5. на что влияет параметр n.FLt у ТРМ1387
    от незарегистрированный в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 20.12.2007, 23:23

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •