【发布时间】:2019-11-14 12:54:43
【问题描述】:
在这一点上我很沮丧,我想我会作为最后的手段发布这个。
我正在开发一个 C# .NET 4.5 应用程序,该应用程序将通过 USB 与 Moneris 支付设备进行通信。它是 Moneris ICT-250,Moneris 将其称为“半集成”应用程序。我一直在尝试发送测试付款以使设备使用串行端口类工作,但似乎没有任何工作。
对于初学者,Moneris 确实提供了一个模拟器来启动和运行。我可以确认我可以继续,设置测试付款 - 比如 100.00 美元 - 发送它......然后设备亮起。它还输出请求和响应的详细日志。
每个请求都必须是一个特定格式的字符串,用于标识付款类型、金额等......我已将在日志中找到的字符串发送出去,但似乎没有任何效果。设备不会记录失败或成功。
我知道设备已正确连接。如果我更改端口号或拔下设备,我的 catch 将处理它(如下)。
下面是一个简单的控制台应用程序。我的代码有问题吗?有没有其他人在连接半集成 Moneris 解决方案方面有任何经验?我对任何想法持开放态度。 Moneris 无法提供任何支持或代码 sn-ps。至少可以说非常令人沮丧...
谢谢大家!代码如下:)
using System;
using System.IO.Ports;
class Moneris_Integration
{
public static void Main()
{
SerialPort port = new SerialPort("COM8");
// These properties are required by the device
port.BaudRate = 19200;
port.Parity = Parity.Even;
port.StopBits = StopBits.One;
port.DataBits = 8;
port.Open();
// This is the request that is sent by the simulator to the device
port.Write("<STX>02<FS>0011000<FS>0020<ETX><LRC>");
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
Console.WriteLine("===| Moneris Test |===");
Console.ReadKey();
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string incomingData = sp.ReadExisting();
Console.WriteLine("Response:");
Console.Write(incomingData);
}
}
【问题讨论】:
-
我不认为
port.Write("<STX>做你认为它做的事。是 ASCII 代码 2,如果我没记错的话,你必须自己编码。您可能还需要设置端口使用的(不相关的)代码页编码。 SO上有这样的例子。如果找不到,请大声喊叫。 -
设备是否期望在每个命令的末尾有一个“\n”?您正在使用 Write,也许您应该使用 WriteLine。
-
好的 - 首先感谢大家的 cmets。您对 ASCII 的看法是正确的……我刚刚从 Moneris 那里得到了一些文档,解释了所需的 LRC 计算、所需的编码等……令人沮丧,我希望他们早点给我这个。我会在一两天内尝试一下,并就进展提出建议。再次感谢!
标签: c# serial-port