如何在扑波中创建Modbus Master/Server TCP?
我想创建使用Modbus与PLC通信的桌面应用程序。我发现 modbus package,但我无法实现modbus服务器。只有客户实现。我已经阅读 modbus 源代码,发现modbus client是使用socket 来自
飞镖:io
。我们可以使用serversocket
?创建modbus服务器。我尝试使用serversocket
和modbus客户端创建TCP服务器,然后将其连接。 Modbus客户端可以连接到TCP服务器,而TCP服务器将接收uint8list
数据,如果modbus client do writesingleregister
或read> read> readholdingregisters
。
如果Modbus客户端确实写了单个寄存器,则服务器套接字将接收此
[0,1,0,0,0,6,10,6,0,4,0,5]
- 数据
- 。始终为
写单寄存器
4
是地址- 5 是Value
Server套接金额5
[0,1,0,0,0,6,10,3,0,4,0,5]
1
是序列3
=>始终为始终3读取单寄存器
4
是地址5
是量
创建服务器
void createServer(){
ServerSocket.bind("127.0.0.1", 4000)
.then((server) {
server.listen((socket) {
socket.listen((event) {
print(event);
// how to send data result to client?
// socket.write() and socket.add() give errors
socket.write(Uint16List.view(event.buffer,0,1));
// error => Unhandled Exception: RangeError (byteOffset): Invalid value: Not in inclusive range 0..3: 4
});
});
});
}
Future<void>read(modbus.ModbusClient client,int address, int amount)async{
Uint16List data = await client.readHoldingRegisters(address, amount);
print(data);
}
问题
如果客户端readholdingRegisters
,如何将数据发送到Modbus客户端 使用serversocket
?
I want to create desktop app to communicate with PLC using modbus. I found modbus package, but I can not implement modbus server. There is only client implementation. I've read modbus source code and found that modbus client was created using Socket
from dart:io
. Can we create modbus server using ServerSocket
?. I've tried to create tcp server using ServerSocket
and modbus client then connect it. Modbus client can connect to tcp server and tcp server will receive Uint8List
data if modbus client do writeSingleRegister
or readHoldingRegisters
.
Server socket will receive this data if modbus client do write single register with address 4 and value 5
[0,1,0,0,0,6,10,6,0,4,0,5]
1
is sequence- The second
6
=> always 6 forwrite single register
4
is address5
is value
Server socket wil receive this data if modbus client do read single register with address 4 and amount 5
[0,1,0,0,0,6,10,3,0,4,0,5]
1
is sequence3
=> always 3 forread single register
4
is address5
is amount
Create server
void createServer(){
ServerSocket.bind("127.0.0.1", 4000)
.then((server) {
server.listen((socket) {
socket.listen((event) {
print(event);
// how to send data result to client?
// socket.write() and socket.add() give errors
socket.write(Uint16List.view(event.buffer,0,1));
// error => Unhandled Exception: RangeError (byteOffset): Invalid value: Not in inclusive range 0..3: 4
});
});
});
}
Future<void>read(modbus.ModbusClient client,int address, int amount)async{
Uint16List data = await client.readHoldingRegisters(address, amount);
print(data);
}
Problem
How to send data to modbus client if client do readHoldingRegisters
using ServerSocket
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论