arik921 Ответов: 1

Проект Poderosa - использование терминального управления с подключением последовательного порта


Я пытаюсь направить полученные данные Сериалпорта на терминал управления.
можете ли вы указать мне, как этого достичь?..
я попробовал следующее:
SerialTerminalParam stp = new SerialTerminalParam();
stp.BaudRate = int.Parse(cmbBaudRate.Text);
stp.FlowControl = FlowControl.None;
stp.Parity = Poderosa.ConnectionParam.Parity.NOPARITY;
stp.Port = 1;
stp.StopBits = Poderosa.ConnectionParam.StopBits.ONESTOPBIT;
stp.TerminalType = TerminalType.XTerm;

      
           
IntPtr pt = new IntPtr();
SerialTerminalConnection con = new SerialTerminalConnection(stp,  pt,624, 249);
ConnectionTag ct = new ConnectionTag(con);
TerminalDataReceiver tdr = new TerminalDataReceiver(ct);


но я получаю сообщение об ошибке, говорящее: Ссылка на объект не устанавливается на экземпляр объекта.
в следующей строке (@ TerminalControl\Terminal\connections.cs):
GEnv.Подключений.Продолжай жить.SetTimerToConnectionTag(это);

знаете ли вы, какие шаги необходимы для открытия последовательного соединения? вместо SSH - соединения вы привели в качестве примера...

Richard MacCutchan

Строка с вашим сообщением об ошибке отсутствует в вашем фрагменте кода; Вы разместили правильную часть своей программы?

Кроме того, какой пример вы имеете в виду?

cholegm

Кто - нибудь знает, почему я получил ошибку "при подключении к COM2 произошла следующая ошибка. WaitCommEvent failed 6" Когда я пытаюсь открыть/подключиться к последовательному порту (COM2)?

1 Ответов

Рейтинг:
0

cholegm

int Port = 2;
int BaudRate = 115200;
ConnectionMethod = ConnectionMethod.Serial;
 
public void Connect()
        {
            // Save old log info in case this is a reconnect
            Poderosa.ConnectionParam.LogType logType = Poderosa.ConnectionParam.LogType.Default;
            string file = null;
            if (this.TerminalPane.Connection != null)
            {
                logType = this.TerminalPane.Connection.LogType;
                file = this.TerminalPane.Connection.LogPath;
                //GApp.GetConnectionCommandTarget().Close();
                this.TerminalPane.Connection.Close();
                this.TerminalPane.Detach();
            }
 
            try
            {
                if ((Poderosa.ConnectionParam.ConnectionMethod)this.Method == Poderosa.ConnectionParam.ConnectionMethod.Telnet)
                {
                    TelnetTerminalParam tel = new TelnetTerminalParam(this.Host);
                    tel.Port = Port;
                    tel.TerminalType = TerminalType.VT100;
                    tel.RenderProfile = new RenderProfile();
                    tel.Encoding = EncodingType.ISO8859_1;
 
                    CommunicationUtil.SilentClient s = new CommunicationUtil.SilentClient();
                    Size sz = this.Size;
 
                    SocketWithTimeout swt;
                    swt = new TelnetConnector((Poderosa.ConnectionParam.TelnetTerminalParam)tel, sz);
                    swt.AsyncConnect(s, tel.Host, tel.Port);
                    ConnectionTag ct = s.Wait(swt);
 
                    this.TerminalPane.FakeVisible = true;
                    this.TerminalPane.Attach(ct);
                    ct.Receiver.Listen();
 
                    if (file != null)
                        this.SetLog((LogType)logType, file, true);
                    this.TerminalPane.ConnectionTag.RenderProfile = new RenderProfile();
                    this.SetPaneColors(Color.White, Color.Black);
 
                }
                else if ((Poderosa.ConnectionParam.ConnectionMethod)this.Method == Poderosa.ConnectionParam.ConnectionMethod.SSH2)
                {
                    //------------------------------------------------------------------------
                    SSHTerminalParam sshp = new SSHTerminalParam((Poderosa.ConnectionParam.ConnectionMethod)this.Method, this.Host, this.UserName, this.Password);
                    sshp.AuthType = this.AuthType;
                    sshp.IdentityFile = this.IdentifyFile;
                    sshp.Encoding = EncodingType.ISO8859_1;
                    sshp.Port = Port;
                    sshp.RenderProfile = new RenderProfile();
                    sshp.TerminalType = TerminalType.XTerm;
 
                    CommunicationUtil.SilentClient s = new CommunicationUtil.SilentClient();
                    Size sz = this.Size;
 
                    SocketWithTimeout swt;
                    swt = new SSHConnector((Poderosa.ConnectionParam.SSHTerminalParam)sshp, sz, sshp.Passphrase, (HostKeyCheckCallback)null);
                    swt.AsyncConnect(s, sshp.Host, sshp.Port);
                    ConnectionTag ct = s.Wait(swt);
 
                    this.TerminalPane.FakeVisible = true;
 
                    this.TerminalPane.Attach(ct);
                    ct.Receiver.Listen();
                    //-------------------------------------------------------------
                    if (file != null)
                        this.SetLog((LogType)logType, file, true);
                    this.TerminalPane.ConnectionTag.RenderProfile = new RenderProfile();
                    this.SetPaneColors(Color.White,Color.Black);
                }
                else if ((Poderosa.ConnectionParam.ConnectionMethod)this.Method == Poderosa.ConnectionParam.ConnectionMethod.Serial)
                {
                    SerialTerminalParam stp = new SerialTerminalParam();
                    stp.BaudRate = BaudRate;
                    stp.FlowControl = FlowControl.None;
                    stp.Parity = Poderosa.ConnectionParam.Parity.NOPARITY;
                    stp.Port = Port;
                    stp.StopBits = Poderosa.ConnectionParam.StopBits.ONESTOPBIT;
                    stp.TerminalType = TerminalType.XTerm;
 
                    IntPtr pt = new IntPtr();
                    SerialTerminalConnection stcon = new SerialTerminalConnection(stp, pt, this.TerminalPane.Width, this.TerminalPane.Height);
                    ConnectionTag ct = new ConnectionTag(stcon);
 
                    this.TerminalPane.FakeVisible = true;
 
                    this.TerminalPane.Attach(ct);
                    ct.Receiver.Listen();
                    //-------------------------------------------------------------
                    if (file != null)
                        this.SetLog((LogType)logType, file, true);
                    this.TerminalPane.ConnectionTag.RenderProfile = new RenderProfile();
                    this.SetPaneColors(Color.White, Color.Black);
                }
                else
                {
                    return;
                }
            }
            catch
            {
                //MessageBox.Show(e.Message, "Connection Error");
                return;
            }
        }



Когда я пытаюсь открыть/подключиться к последовательному порту (COM2) Я получил ошибку "при подключении к COM2 произошла следующая ошибка. WaitCommEvent failed 6".


cholegm

Кто - нибудь знает, почему я получил ошибку "при подключении к COM2 произошла следующая ошибка. WaitCommEvent failed 6" Когда я пытаюсь открыть/подключиться к последовательному порту (COM2)?

Member 13140892

Удалось ли когда-нибудь решить эту проблему? Я хотел бы использовать это решение, но я получаю ту же ошибку при попытке открыть порт.

ElectroMonster

У кого-нибудь есть решение для этого кода. Почему-то он жалуется, что порт занят.

ajeda

Проблема с этим soultion заключается в том, что он создает пустой дескриптор для последовательного порта (IntPtr pt = new IntPtr) вместо получения правильного. Вы можете попробовать создать его вручную, но мне было проще использовать функцию CommunicationUtil.CreateNewSerialConnection(IWin32Window parent, SerialTerminalParam stp), которая возвращает объект ConnectionTag. Поэтому вместо того, чтобы создавать ConnectionTag вручную, как в приведенном выше примере, используйте эту функцию и передайте ей экземпляр SerialTerminalParam с требуемой конфигурацией. Это должно сработать.