modbus rtu java 通讯_android Modbus Rtu 通讯例子

这是一个Android应用示例,演示如何使用Java进行Modbus RTU通信。代码展示了连接、读写寄存器和线圈,以及批量读取功能。通过点击按钮,用户可以执行写寄存器、写线圈、读取多个寄存器和线圈等操作。
摘要由CSDN通过智能技术生成

【实例简介】ModbusRtuConnect例子

【实例截图】

530f04e411be276cf97b7768d6b80928.png

d3778a7eb4cfe02b1ad1d469d20cbba0.png

【核心代码】

package com.modbusconnect;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.ToggleButton;

import com.modbusconnect.rtuwrapper.connection.ModbusRtuConnection;

import com.modbusconnect.rtuwrapper.io.ModbusRtuTransaction;

import com.modbusconnect.rtuwrapper.messaging.ModbusException;

import com.modbusconnect.rtuwrapper.messaging.ReadCoilRequest;

import com.modbusconnect.rtuwrapper.messaging.ReadCoilResponse;

import com.modbusconnect.rtuwrapper.messaging.ReadRegisterRequest;

import com.modbusconnect.rtuwrapper.messaging.ReadRegisterResponse;

import com.modbusconnect.rtuwrapper.messaging.WriteCoilRequest;

import com.modbusconnect.rtuwrapper.messaging.WriteCoilResponse;

import com.modbusconnect.rtuwrapper.messaging.WriteRegisterRequest;

import com.modbusconnect.rtuwrapper.messaging.WriteRegisterResponse;

import static com.modbusconnect.rtuwrapper.ModbusConstants.VENDOR_ID;

public class MainActivity extends AppCompatActivity {

TextView textView;

EditText etRegNum;

EditText etRegVal;

EditText editText;

ToggleButton toggleButton;

Button buttonWriteRegister;

Button buttonWriteCoil;

Button buttonSetAllCoils;

Button buttonReadRegs;

Button buttonReadCoils;

ModbusRtuConnection connection;

ModbusRtuTransaction transaction;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textView = (TextView) findViewById(R.id.textView);

editText = (EditText) findViewById(R.id.editText);

toggleButton = (ToggleButton) findViewById(R.id.toggleButton);

etRegNum = (EditText) findViewById(R.id.etRegNum);

etRegVal = (EditText) findViewById(R.id.etRegVal);

System.out.println(etRegNum.getText().toString());

Button buttonConnect = (Button) findViewById(R.id.buttonConnect);

buttonConnect.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

connect();

}

});

buttonWriteRegister = (Button) findViewById(R.id.buttonWriteRegister);

buttonWriteRegister.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

int address = Integer.parseInt(etRegNum.getText().toString());

int value = Integer.parseInt(etRegVal.getText().toString());

WriteRegisterRequest request = new WriteRegisterRequest(address, value);

WriteRegisterResponse response;

try {

transaction.execute(request);

response = (WriteRegisterResponse) transaction.getResponse();

log("reg " address " = " response.getValue());

} catch (ModbusException e) {

e.printStackTrace();

}

}

});

buttonWriteCoil = (Button) findViewById(R.id.buttonWriteCoil);

buttonWriteCoil.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

int address = Integer.parseInt(editText.getText().toString());

boolean value = toggleButton.isChecked();

WriteCoilRequest request = new WriteCoilRequest(address, value);

WriteCoilResponse response;

try {

transaction.execute(request);

response = (WriteCoilResponse) transaction.getResponse();

log("coil " address " = " response.getValue());

} catch (ModbusException e) {

e.printStackTrace();

}

}

});

buttonSetAllCoils = (Button) findViewById(R.id.buttonWriteAllCoils);

buttonSetAllCoils.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

setAllCoilsOnOff();

}

});

buttonReadRegs = (Button) findViewById(R.id.buttonReadRegs);

buttonReadRegs.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

ReadRegisterRequest request = new ReadRegisterRequest();

ReadRegisterResponse response;

for (int i = 0; i < 7; i ) {

request.setData(i, 0);

try {

transaction.execute(request);

} catch (ModbusException e) {

e.printStackTrace();

}

try {

response = (ReadRegisterResponse) transaction.getResponse();

log("reg " i " = " response.getValue());

} catch (ModbusException e) {

e.printStackTrace();

}

}

}

});

buttonReadCoils = (Button) findViewById(R.id.buttonReadCoils);

buttonReadCoils.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

ReadCoilRequest request = new ReadCoilRequest();

ReadCoilResponse response;

for (int i = 1000; i < 1007; i ) {

request.setData(i, false);

try {

transaction.execute(request);

} catch (ModbusException e) {

e.printStackTrace();

}

try {

response = (ReadCoilResponse) transaction.getResponse();

log("coil " i " = " response.getValue());

} catch (ModbusException e) {

e.printStackTrace();

}

}

}

});

enableUi(false);

}

@Override

protected void onDestroy() {

if (connection != null) {

connection.disconnect();

}

super.onDestroy();

}

private void enableUi(boolean enable) {

buttonWriteRegister.setEnabled(enable);

buttonWriteCoil.setEnabled(enable);

buttonSetAllCoils.setEnabled(enable);

buttonReadRegs.setEnabled(enable);

buttonReadCoils.setEnabled(enable);

}

private void log(String text) {

textView.setText(textView.getText().toString() " // " text);

}

private void connect() {

connection = new ModbusRtuConnection(getApplicationContext(), VENDOR_ID, false);

connection.connect(new ModbusRtuConnection.OnConnectedToPlcListener() {

@Override

public void onConnected() {

if (connection.isConnected()) {

transaction = new ModbusRtuTransaction(connection);

}

log("Connected - " connection.isConnected());

enableUi(true);

}

});

}

//setCoilsOnOff vals

int current = 1000;

int startAddress = 1000;

int endAddress = 1006;

boolean isUp = true;

private void setAllCoilsOnOff() {

if (connection == null || !connection.isConnected()) return;

WriteCoilRequest request = new WriteCoilRequest();

if (current == endAddress) {

isUp = false;

} else if (current == startAddress) {

isUp = true;

}

try {

if (isUp) {

while (current < endAddress) {

request.setData(current, true);

transaction.execute(request);

current;

}

if (current == endAddress) {

request.setData(current, true);

transaction.execute(request);

}

} else {

while (current > startAddress) {

request.setData(current, false);

transaction.execute(request);

current--;

}

if (current == startAddress) {

request.setData(current, false);

transaction.execute(request);

}

}

} catch (ModbusException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值