android java 经典字符模式通信接收处理,标准modbus通讯协议接收处理提取数据

通信接收处理

一、字符

接收数据字符串格式:Te:xx Hu:xx GM:xxx CO:xxx \r\n

要提取上面这3个参数的值。

代码:

    	try {
			if (smsg.endsWith("\r\n") &&smsg.length()>20) {
				String s = "Te:";
				if (smsg.contains(s)) {
					int beginIndex = smsg.lastIndexOf(s);
					int endIndex = smsg.indexOf(' ',beginIndex + s.length());
					textView001.setText(smsg.substring(beginIndex + s.length(), endIndex));
					
				}
				s = "Hu:";
				if (smsg.contains(s)) {
					int beginIndex = smsg.lastIndexOf(s);// 761-754
					int endIndex = smsg.indexOf(' ',beginIndex + s.length());
					textView002.setText(smsg.substring(beginIndex + s.length(), endIndex));
				}
				s = "GM:";
				if (smsg.contains(s)) {
					int beginIndex = smsg.lastIndexOf(s);// 761-754
					int endIndex = smsg.indexOf(' ',
							beginIndex + s.length());
					textView003.setText(smsg.substring(beginIndex + s.length(), endIndex));
				}
				s = "CO:";
				if (smsg.contains(s)) {
					int beginIndex = smsg.lastIndexOf(s);// 761-754
					int endIndex = smsg.indexOf('\r',beginIndex + s.length());
					textView004.setText(smsg.substring(beginIndex + s.length(), endIndex).replaceAll(" ", ""));
				}
		
			}
		
		} catch (Exception e) {
		}

二、十六进制

临时

// 接收数据线程
	Thread ReadThread = new Thread() {
		public void run() {
			byte[] buffer = new byte[1];
			bRun = true;
			// 接收线程
			while (true) {
				try {
					while (is.available() == 0) {
						while (bRun == false) {

						}
					}
					while (true) {
						if (1 == is.read(buffer, 0, 1)) // 一个一个地接收,把需要的数据放在buffer_new中
						{
							if (num_new == 0) {
								if (buffer[0] == Wka.add) {
									buffer_new[num_new++] = buffer[0];
								}
							} else if (num_new == 1) {
								buffer_new[num_new++] = buffer[0];
							} else if (num_new < buffer_new[1]) {
								buffer_new[num_new++] = buffer[0];
							}
							// smsg+=String.format("%02X ",buffer[0]);
							// //转为十六进制格式 所有接收
						}
						// 接收处理最好放在线程中
						if (num_new == buffer_new[1]) {
							if ((buffer_new[num_new - 4] & 0xff) == 0xCC
									&& (buffer_new[num_new - 3] & 0xff) == 0x33
									&& (buffer_new[num_new - 2] & 0xff) == 0xC3
									&& (buffer_new[num_new - 1] & 0xff) == 0x3C) {
								Wka.jszt = buffer_new[3];
								if (Wka.jszt == 0x1f)
									Wka.ds++;

								if (Wka.jszt == 0) //
									Wka.pow_con = 0; // 更改状态
								else
									Wka.pow_con = 1;

								Wka.temsj = buffer_new[17] & 0xff;
								Wka.jserrno = buffer_new[16] & 0xff;
							}
							num_new = 0;
						}
						if (is.available() == 0)
							break; // 短时间没有数据才跳出进行显示
					}
					// 发送显示消息,进行显示刷新
					handler.sendMessage(handler.obtainMessage());
				} catch (IOException e) {
				}
			}
		}
	};

标准modbus通讯协议接收处理

之前写的代码,打不到放那了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值