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();

但是问题依然存在

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

目录
相关文章
|
6月前
计算机网络的功能
计算机网络的功能。
155 0
|
19天前
|
存储 网络协议 Linux
|
19天前
|
网络协议 算法 安全
|
19天前
|
安全 SDN 数据中心
|
2月前
|
缓存 负载均衡 网络协议
《网络是怎么样连接的》读书笔记 - 服务器端的局域网中(四)
《网络是怎么样连接的》读书笔记 - 服务器端的局域网中(四)
43 0
|
4月前
|
存储 网络协议 Unix
【计算机网络】UDP协议编写群聊天室----附代码
【计算机网络】UDP协议编写群聊天室----附代码
|
4月前
|
消息中间件 网络协议 前端开发
Socket编程实践模拟通信
Socket编程实践模拟通信
36 0
|
域名解析 网络协议 算法
Linux网络原理与编程(4)——第十四节 传输层协议
客户端认为连接已经建立成功了,所以就正常发数据。但是这个时候服务器并未建立连接,在收到数据之后,会向客户端发送一个含有RST的报文(reset),即希望客户端重新建立连接。
209 0
Linux网络原理与编程(4)——第十四节 传输层协议
|
域名解析 网络协议 网络架构
网络通信原理 | 学习笔记
快速学习 网络通信原理
81 0
网络通信原理 | 学习笔记
|
内存技术 网络协议 编解码
带你读《计算机网络原理》之三:数据通信技术
本书以层次化的网络体系结构为线索,针对通信子网功能详细地介绍了计算机网络的基本概念及数据通信的基本原理。