哪位大神会用esp8266跟Modbus服务器通信?
只要有服务器的 IP 地址,esp8266 模块就可以 连接这个服务器,模块上电启动后对 其进行 初始化设置(模块可以与电脑或者单片机用串口连接), 可以设置成 透传模式,连接网络,连接服务器, 接下来就可以与 其通讯了。
也可以 将模块 设置成 服务器模式,用手机 连接模块 进行数据通讯 和 远程控制。
这个型号的串口服务器应该不能协议转换,如果上位机是WINCC的话只能用OPC去接了。我刚做过一个这样的项目。串口服务器先虚拟串口,上位机再使用一个OPC,我用的是KEPserver,很好用。然后WINCC读取KEPserver的数据,速度还算可以。有什么问题可以继续追问
硬件需要:RS232/485转换器,因为电脑上串是RS232的(9根线),而仪表串口通常是RS485(两根线或四根线)的,除非你的智能仪表支持RS232,且距离在15米内,仪表只有一块的话就不需要加硬件,如果是多块智能仪表,肯定要加MOXA卡或串口服务器。
软件:我只能告诉你KEPware能将 支持Modbus RTU智能仪表的数据读出来,并提供OPC服务,如果WinCC软件能作OPC客户端,那么WinCC能读取现场数据,如果Wincc不能作为OPC客户端,那肯定不行。本人只能肯定WinCC可以作OPC服务器。
两种可能:
如果在仪表上设置参数掉电后都保存不了的话,基本可以确定是仪表问题;
有些仪表写入参数后还需要向固定的寄存器写入确认参数,为了保证写入参数真确,需要检查仪表通信部分说明书。
Modbus
基于串口;
Modbus Plus
基于网络
,
它有四层
:Modbus
、
LLC
、
MAC
、
HDLC
;
通信方式:
ASCII
(每个八位字节用
2
个
ASCII
码表示,如
128
,表示成‘
8
’和‘
0
’
,
LRC
校验)
、
RTU
(二进制,
CRC
校验)
;
报文格式:
(
RTU
方式)
35 characters time
延时、地址(
1
字节)
、功能码(
1
字节)
、数据(
n
字节)
、
CRC
(
2
字
节)
、
35 characters time
延时;
主站发送报文间隔时间
>35 characters time
,否则认为是一封报文;
Query
和
Response
格式一样
;
Query
读
, Response
:所要数据
;
Query
写
, Response
:前
6
个字节与
Query
一样;
寄存器起始地址、
个数和数据
:
高字节在前、
低字节在后;
而
CRC
是低字节在前、
高字节在后
串行字节格式:
启动(
1
位)
、数据(
8
位)
、停止(
2
位)
;
或启动(
1
位)
、数据(
8
位)
、奇
/
偶(
1
位)
、停止(
1
位)
;
地址:
0~247
,
0
:广播;
寄存器号
=
实际号
-1
,每种类型寄存器的高位不变号作为隐含可不表示;
Slave device
对
Query
的处理:
⑴未收到
Query
,
no response;
⑵收到
Query
但校验错,
no response;
⑶正确收到
Query
但不能处理,
Exception response;
Exception response
格式:
地址
(
1
字节)
、
原功能码
+80H
(
1
字节)
、
Exception
Code
(
1
字节)
、
CRC
(
2
字节)
Exception
Code
见
P103/121
⑷正确收到
Query
且能处理,
normal response;
功能码
01~24
,见
P31/121~
;
其中
08
为
diagnostic function code,
详见
P81/121
;
08
码
Query
格式:地址(
1
字节)
、功能码(
1
字节)
、
Subfunction Code(1
个字节
)
、数据、
CRC
(
2
字节)
;
最大参数见
P106/121~
;
收发时间估算:
P112/121~
;
CRC/LRC
计算:
P115/121~
。
读取指令是READ_VAR 写指令是WRITE_VAR 用这两个就能搞定,参数在这两模块上设置,右键点击模块,选FFB(好像是)输入助手,里面可以选和添。
你不用管协议怎么弄,设置好就成了,指令就搞定了。推荐答案和下面说的都不靠谱
0条评论