与串行IP拒绝命令MODBUS通信

本文关键字:命令 MODBUS 通信 拒绝 IP | 更新日期: 2023-09-27 18:32:32

这是一个奇怪的问题,我们有一个带有IP和端口的打印机设置,然后我们需要将打印作业发送到打印机。

我已经设法连接到打印机,但是当我传输任何东西时,我的打印机超时,或者它只是坐在那里什么都不做。

我知道我可以与打印机交谈,因为它显示在日志中。

到目前为止,我有以下内容:

_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
_Socket.Connect("192.168.1.52", 2123);
byte Enq = 0x05;
byte Ack = 0x06;
byte[] tran;
tran = new byte[] { Enq };
_Socket.Send(tran, 1, SocketFlags.None);
tran = new byte[] { 0x30 };
_Socket.Send(tran, 1, SocketFlags.None);
tran = new byte[] { 0x00, 0x01 };
_Socket.Send(tran, 2, SocketFlags.None);
tran = new byte[] { 0xFF };
_Socket.Send(tran, 1, SocketFlags.None);

根据手册,我需要执行以下操作:

send 1 byte Identifier 30h
send 2 bytes length 00h, 01h
send data (action to be performed) 1 byte FFh

正如您可能看到的,我不知道如何实现这一目标,所以欢迎任何和所有帮助

Edit

一些附加信息,打印机没有附带驱动程序,所以据我所知,我需要将原始数据传输到打印机,打印机与它有串行连接,但它对于串行电缆来说太远了,因此以太网连接在那里(我相信它是以太网串行(。

对话的一般原则计算机发送 ENQ(1 字节( 打印机发送 ACK(1 字节(计算机发送数据(标识 1 字节 | 长度 2 字节 | 数据 0 到 n 字节 |校验和 1 字节(打印机发送确认(1 字节(

当我过去使用串行时,我使用端口上的写入功能发送数据,将数据放入缓冲区,一旦完成接收,请检查缓冲区,但我不知道我将如何做这个 onver IP?

Identifier (1 hexadecimal byte)
Specific to each command.
 Length (2 hexadecimal bytes)
The length is a hexadecimal value representing the number of bytes present after the
two length bytes and not including the check byte (Checksum).
In general, the maximum value is 2044 bytes or 07h FCh.
For transmission of a message for printing, the maximum value is 4092 bytes or 0Fh
FCh.
Note: The check byte is not checked by the printer if b7 of the first length byte is set
to 1. In this case the data in the frame received is not checked.
Data (0 to n bytes)
Zero bytes for a general request from the computer to the printer.
n bytes representing the instructions needed to define a function.
Checksum (1 hexadecimal byte)
This corresponds to an exclusive OR of all preceding bytes (identifier, length and data
bytes

与串行IP拒绝命令MODBUS通信

我将系统更改为使用 TCPClass 而不是套接字,它现在按预期工作,他们的技术人员毫无用处,但至少他们的首席销售人员来帮忙解决他所知道的打印机的其他问题,最终设法到达那里。 所有这些都归结为文档中缺少的信息