485通信相关笔记

简介: 485通信相关笔记

rs485是一种通信协议

定义2~6V -2 ~ -6V 表示两种逻辑状态

特点:速率不快,半双工

波特率:

每秒钟通过信道传输的码元数称为码元传输速率,简称波特率

1波特即指每秒传输1个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个bit位信息)

——摘自百度百科

常见 9600 、 38400

使用485模块可以实现485信号转以太网信号

这样硬件设备——一些传感器元件对于我们的服务器来说就是透明的

设备接线示意图

图片来自:有人

485 模块使用方式作为客户端(当然也是支持作为服务器的)

主要设置目标ip 和目标端口 波特率等内容

原理: 通过485模块设置和在服务器监听相应端口,495模块主动连接服务器建立TCP连接,然后服务器可以想设备发送指令,也可以接收设备发来的数据,将数据存储数据库后就可以对数据进行分析,或者做其它用途

编程方式上使用java Socket相关api。

监听端口

while(true) {

Socket sc = new Socket(port);

接受连接

Socket client = sc.accept(); // 阻塞直到客户端连上来

发送指令

OutputStream out = client.getOutputStream();

out.wirte(message);

接收数据

InputStream in = client.getOutputStream();

while(in.read(bytes) > 0) {

//处理数据

}

值得注意的是,需要注意指令不要连续发送 需要等待设备响应的数据回来,否则可能会导致数据错乱.

目前还发现485模块,可能会在一段时间内无反应,即发送指令后没有数据响应,但是重启程序或者485模块后恢复正常。

尝试解决办法

判断是否有可读数据 ,一段时间无响应后,断开客户端连接 ,使客户端重新连接进来

代码实现 (伪代码)

long curTime  = Sys.currentTimeMills() + 90000; // 一分半以内
Bytes bytes = new Bytes(); //存数据
while(Sys.currentTimeMills() < curTime) {
  if(clent.getInputStream().avaible() > 0) {
    clent.getInputStream().read(bytes); 
    curTime  = Sys.currentTimeMills() + 90000; 
    //hand data
  }
}
if(!clent.isClosed())
  client.close();

但是问题依然存在

希望路过的大神,指点一下

目录
相关文章
|
5月前
|
网络协议
通信知识点
通信知识点
35 2
|
5月前
|
网络协议
技术笔记:modbus通讯协议详解
技术笔记:modbus通讯协议详解
170 0
|
6月前
|
存储 网络协议 Unix
【计算机网络】UDP协议编写群聊天室----附代码
【计算机网络】UDP协议编写群聊天室----附代码
|
6月前
|
消息中间件 网络协议 前端开发
Socket编程实践模拟通信
Socket编程实践模拟通信
70 0
|
安全 Go
gRPC实现简单通讯 | 青训营笔记
gRPC实现简单通讯 | 青训营笔记
140 0
|
域名解析 网络协议 网络架构
网络通信原理 | 学习笔记
快速学习 网络通信原理
110 0
网络通信原理 | 学习笔记
|
网络协议 网络架构
网络通讯原理简介以及演示通讯过程
网络通讯原理简介以及演示通讯过程
180 0
网络通讯原理简介以及演示通讯过程
|
开发者
数据通信技术基础|学习笔记
快速学习数据通信技术基础
225 0
数据通信技术基础|学习笔记
|
存储 算法 Java
【计网修炼手册】两种通信方式
《计算机组成原理》、《数据结构与算法》、《操作系统》、《计算机网络》不仅是大学信息科学与工程学院的核心课程,也是计算机考研专业基础综合408的考试内容。学习这些内容可能不见得像学习Java和GO一样能让你迅速找到工作,但他们作为计算机世界的基石是需要认真掌握的,这些知识是源源不断的技术浪潮中不会被淘汰的知识。
252 0