2011-06-15 66 views
0

我對Delphi Prism非常陌生。事實上,你甚至可以說我是一個新手,但是我已經在Delphi中編程了10年。我能夠將以前版本的Delphi編寫的舊版軟件移植到Delphi 2010中。現在,我準備使用Delphi Prism爲Delphi(.NET)編寫相同的Delphi.Net軟件。對於我的生活,我似乎無法理解Delphi Prism如何工作的整體佈局或想法。我已經通過教程和例子,甚至在Stackoverflow上搜索樣本和代碼。儘管我已經花了整整一個星期的時間來玩Delphi Prism IDE,但我仍然無法理解Delphi Prism。如何使用Delphi Prism進行串口通信?

有人在線表示,只需使用.NET框架,就可以獨立完成一個窗口程序並將其完全寫入網頁。

現在我只是試圖創建一個帶有Seri​​alPort組件的webform來在comport上進行通信。我能夠設計網頁控件(按鈕,標籤)...該程序編譯和加載本地主機啓動。我看到瀏覽器上的按鈕,但它不會在串口上通信。

我很困惑。看起來我做得不對。有人能給我一個Delphi Prism SerialPort組件使用的例子嗎?

我不確定我是安裝了它還是附帶了Delphi Prism IDE。但是,如果您在啓動Delphi Prism後查看組件部分下的工具箱,則會看到一個名爲SerialPort的組件。顯然,它是Microsoft .NET Framework的一部分。

我想問一下如何使用Delphi Prism IDE附帶的串口組件。

謝謝你了,

+1

您的意思是與您的機器上的串行端口通信,或與Web應用程序將運行的服務器上的串行端口進行通信?目前他們是同一臺機器,但大概當你部署它時,他們不會。 – R0MANARMY 2011-06-15 17:50:02

+0

@RRUZ好點。所以,你的意思是告訴我你的Delphi.NET或ASP.net程序中使用的任何工具和組件最終都會被服務器而不是客戶機使用。看到,我所做的所有閱讀都沒有提到這些信息。謝謝。 – ThN 2011-06-15 20:28:26

+0

'..我打算問一下如何使用Delphi Prism IDE附帶的串口組件。「哪些組件?你能提一下這些組件中的一個嗎? – RRUZ 2011-06-15 21:02:12

回答

3

而不是尋找一個串行端口一個Delphi棱鏡組件,你必須尋找一個串行端口組件。您可以使用此文章SerialPort (RS-232 Serial COM Port) in C# .NET作爲本主題的指南。

現在檢查這個德爾福棱鏡類處理串口通信(僅接收數據)

namespace SerialComm; 

interface 

uses 
    System.IO.Ports, //this namespace contains classes for controlling serial ports.  
    System.Collections.Generic, 
    System.Linq, 
    System.Text; 

type 
    DataMode = (Text,Hex); 

    TSerialComm = public class 
    private 
    CurrentDataMode  : DataMode; 
    method port_DataReceived(sender : object; e : SerialDataReceivedEventArgs); 
    public 
    ComPort    : SerialPort := new SerialPort(); 
    method OpenPort(); 
    method ClosePort(); 
    method Init; 
    end; 

implementation 

//here you receive the data 
method TSerialComm.port_DataReceived(sender : object; e : SerialDataReceivedEventArgs); 

    method ByteArrayToHexString(data : Array of Byte) : string; 
    Begin 
     var sb : StringBuilder := new StringBuilder(data.Length * 3); 
     for each b in data do 
     sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' ')); 
     result:=sb.ToString().ToUpper(); 
    end; 

Var 
    data :string ; 
begin 

    if not ComPort.IsOpen then exit; 

    try 
       // text mode 
       if (CurrentDataMode = DataMode.Text) then 
       begin          
        data := comport.ReadExisting();  
      //do your stuff here 
       end 
       else 
       ///binary (hex) mode 
       begin 
       var bytes : Integer := ComPort.BytesToRead; 
       var buffer : Array of byte := new byte[bytes]; 
       ComPort.Read(buffer, 0, bytes); 
       Data:= ByteArrayToHexString(buffer); 
       //do your stuff here 
       end; 

    except 
     on ex: exception do begin   
      OutLog('port_DataReceived: ' + ex.Message + ' ** Trace: ' + ex.StackTrace); 
     exit; 
     end; 
    end; 
end; 

method TSerialComm.OpenPort(); 
begin 
     CurrentDataMode := DataMode.Text; 
     OutLog('Open Port COM'); 
     if ComPort.IsOpen then ClosePort();  
     ComPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 

     //ComPort.ReadTimeout:=100; 
     ComPort.BaudRate := Convert.ToInt32(_Settings.BaudRate); 
     ComPort.DataBits := Convert.ToInt32(_Settings.DataBits); 
     var aStopBits : StopBits := StopBits(Enum.Parse(typeof(StopBits), _Settings.StopBits, true)); 
     ComPort.StopBits   := aStopBits; 
     var aParity : Parity  := Parity(Enum.Parse(typeof(Parity), _Settings.Parity, true)); 
     ComPort.Parity    := aParity; 
     ComPort.PortName := _Settings.PortName; 
     ComPort.Open(); 
     if ComPort.IsOpen then 
     OutLog('Port '+ComPort.PortName+' Open') 
     else 
     OutLog('was not possible open the port '+ComPort.PortName); 
end; 

method TSerialComm.ClosePort(); 
begin 
    if ComPort.IsOpen then 
    begin 
     ComPort.DataReceived +=nil; 
     ComPort.ReadExisting; 
     ComPort.Close(); 
    end;  
end; 

method TSerialComm.Init; 
begin 
ComPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 
end; 

注1:OutLog只是登錄的功能,你可以發表評論這個函數的調用。

注2:該代碼必須從服務器端運行。

+0

我的意思是說我很難使用IDE附帶的serialport組件。我已經有了這個組件。 – ThN 2011-06-15 20:29:47

+0

IDE沒有串行端口。 – 2011-06-16 00:08:03

相關問題