2

我目前正在使用 Delphi Prism 进行 Mono 开发。因此,该软件可以是跨平台的,主要运行在Linux操作系统上。首先,我一直在实现和测试运行我的软件的基本功能 - 串行和网络通信。

但我似乎无法通过 Mono 的串行通信实现。搜了网上和 Stackoverflow 好像都没有支持 Linux 环境的库或者 .NET 框架。尽管 Stackoverflow 中其他人提出了一些类似的问题,但答案并没有真正显示任何示例。我有点卡住了。

这是我为 Mono 串行通信编写的代码。访问此网站后。

  {$IFDEF LINUX}
    if SerialPort1 = nil then
        SerialPort1 := new System.Io.Ports.SerialPort();
    SerialPort1.Close;

    SerialPort1.BaudRate:=19200;
    SerialPort1.DataBits:=8;
    SerialPort1.DtrEnable:=true;
    SerialPort1.Parity:=System.IO.Ports.Parity.Even;
    SerialPort1.PortName:="/dev/ttyS0";
    SerialPort1.ParityReplace:=63;
    SerialPort1.ReadBufferSize:=4096;
    SerialPort1.ReadTimeout:=1000;
    SerialPort1.RtsEnable:=true;
    SerialPort1.StopBits:=System.IO.Ports.StopBits.One;
    SerialPort1.WriteTimeout:=1000;
    SerialPort1.Open;

    while (true) do
    begin
        CommByte[0]:=$FF;
        CommByte[1]:=$04;
        CommByte[2]:=$04;
        CommByte[3]:=thechannel;
        CommByte[4]:=mcommand;
        CommByte[5]:=(CommByte[2] xor CommByte[3] xor CommByte[4]);

        SerialPort1.Write(CommByte,0,6);
        while SerialPort1.BytesToWrite>0 do;
        Thread.Sleep(10);
        Application.DoEvents;
    end;
{$ENDIF}

但是每次我在 Linux 下运行这段代码时,Mono 都会弹出一个消息框,显示“请求的功能未实现”。我不明白为什么。这甚至可以为 Mono 做吗?

我需要访问 Linux 上的串行端口以进行 RS232 通信。

谢谢,

4

1 回答 1

4

该属性ParityReplace当前未实现。如果它不是真的需要,就把它扔掉,你可能不会有这个例外。如果您需要它,请告诉我,可能可以使用PARMRK并将标记更改为该字节来完成。但是我还必须找到一个如何对其进行单元测试的想法;)

于 2011-07-03T22:00:59.260 回答