gpt4 book ai didi

android - ReadInputDiscretesResponse 错误(Jamod,Android)

转载 作者:可可西里 更新时间:2023-11-01 02:54:42 25 4
gpt4 key购买 nike

我正在使用 Jamod 库,但在读取记录时遇到问题,我只想读取我连接的记录号 300 的 PLC,但出现读取错误(输入 catch)。感谢您的帮助

package com.JR.scada;

import java.net.InetAddress;

import net.wimpi.modbus.Modbus;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.ReadInputDiscretesRequest;
import net.wimpi.modbus.msg.ReadInputDiscretesResponse;
import net.wimpi.modbus.msg.ReadMultipleRegistersResponse;
import net.wimpi.modbus.net.TCPMasterConnection;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;




public class Main extends Activity{
TextView text, depurar;
EditText IP;
Button boton;
int i=0;


TCPMasterConnection con = null; //the TCP connection
ModbusTCPTransaction trans = null; //the Modbus transaction

InetAddress addr = null; //direccion del esclavo
int port = Modbus.DEFAULT_PORT;//puerto por defecto 502


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

text = (TextView) findViewById(R.id.lblRegistro);
IP = (EditText) findViewById(R.id.txtIp);
depurar = (TextView) findViewById(R.id.txtdepurar);
boton = (Button)findViewById(R.id.btnVerRegistro);


}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onStop() {
super.onStop();
//Close the TCP connection
con.close();
}


public class conectar extends AsyncTask<String,String,Integer>{
ReadInputDiscretesRequest req = null; //the request
ReadInputDiscretesResponse res = null; //the response

int startReg;
protected void onPreExecute() {
try {
//IP address;
addr = InetAddress.getByName("212.170.50.238");
} catch (Exception e) {
Log.d("MODBUS","IP error", e);

}
}
protected Integer doInBackground(String... urls) {
try {

// Open the connection
con = new TCPMasterConnection(addr);
con.setPort(port);
con.connect ();

try {

startReg = 300;
// Prepare the request
req = new ReadInputDiscretesRequest (startReg, 1);

// Prepare the transaction
trans = new ModbusTCPTransaction(con);
trans.setRequest(req);
// execute the transaction
trans.execute();
// get the response
res = (ReadInputDiscretesResponse) trans.getResponse ();


} catch (Exception e) {
Log.d("MODBUS", "Error in reading/writing");
return 1;
}


} catch (Exception e) {
Log.d("MODBUS","connection error", e);

return 1;
}
return 0;
}
protected void onPostExecute(Integer bytes) {
if(con.isConnected()){

depurar.setText("conecta");
}
text.setText("Digital Inputs Status=" + res.getDiscretes ().toString () );

}
}

public void onClick(View v) {

// int startReg;
conectar conectamos = new conectar();
conectamos.execute("hola");
}

错误:

08-21 10:01:57.554: D/MODBUS(3322): Error in reading/writing

最佳答案

在不了解更多关于从属 PLC 上的 modbus 配置的情况下,我的第一个建议是尝试为 startReg 设置不同的值,然后查看错误是否仍然存在。这将排除您的 Java 问题。

一些应该有效的测试数字:0,1,7,8

它们可能不会全部工作,但至少其中一个应该成功返回。

如果都没有返回成功,可能是PLC配置有问题,或者你的请求码有问题。

如果其中一个测试号码成功,您应该发布您的结果。如果是这样,这意味着您正试图访问 PLC 上不存在的内存位置。如果您访问未定义的 PLC 内存位置,PLC 通常会中止请求(它不只是发回“0”)。

后续评论:

如果您发现您的代码在对 startReg 使用不同值时有效,但对 300 无效,则原因与 PLC 上的内存映射有关,并且每个品牌可能有所不同/PLC 型号(如果可用,请发布您的 PLC 品牌/型号)。

您在问题中说'record 300'。使用 PLC 时,通常不会将内存称为记录。您是否正在尝试访问位 300、字节 300、字 300、双字 300?

您真正需要问的问题是 300 您想要读取的实际 modbus 地址,或者 300 300 < strong>PLC地址被映射(比如第300个I/O槽,不一定是第300个WORD)。可能需要在八进制、十进制和十六进制地址之间进行转换。或者,您可能需要重新索引一个地址(有些 PLC 喜欢从 1 开始计数,但通常 modbus 从 0 开始计数)。

也许您打算读取 BIT 300(不是记录 300),这将是 12th BIT18th WORD ,所以它看起来像这样:

// 
startReg = 17;

// Prepare the request
// Your 300th bit should be the last value returned.
req = new ReadInputDiscretesRequest (startReg, 12);

我为 startReg 建议的不同值旨在帮助您发现 Java 库如何将 PLC 输入映射到 modbus 地址。这可能有助于 number conversions .

关于android - ReadInputDiscretesResponse 错误(Jamod,Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18354584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com