与串口IP拒绝命令MODBUS通信?

时间:2012-04-27 15:17:07

标签: c# winforms sockets serial-port modbus

这是一个奇怪的问题,我们有一个打印机设置,它有一个监听的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字节) 计算机发送数据(Ident 1字节|长度2字节|数据0到n字节|校验和1字节) 打印机发送Ack(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

1 个答案:

答案 0 :(得分:1)

我改变了系统以使用TCPClass而不是套接字,它现在按预期工作,他们的技术人员没用,但至少他们的销售人员来了并帮助他知道打印机的其他问题,最终设法到达那里。所有归结为文档中缺少的信息