SCLS/SSWCS_JXDL(2019)/SimensSerialPort/CSimensSerialPort.cs
2025-05-19 09:45:29 +08:00

163 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using Microsoft.VisualBasic;
using System.IO.Ports;
using CommonClassLib;
namespace SimensSerialPort
{
/// <summary>
/// Create by Richard.liu 2008
/// Simens PLC通讯类,RS232的自由口协议
/// </summary>
public class CSimensSerialPort
{
SerialPort com;
bool _ifInit;
short _portNo;
string _settings;
/// <summary>
/// 初始化PLC自由口协议通讯类
/// </summary>
/// <param name="Portno">计算机串口COM口12345678</param>
/// <param name="Settings">通讯设置9600None8One分隔符使用全角“”</param>
public CSimensSerialPort(short Portno, string Settings)
{
_portNo = Portno;
_settings = Settings;
com = new SerialPort();
}
string _ComError;
public string ComError
{
get { return _ComError; }
set { _ComError = value; }
}
public bool InitCom()
{
try
{
if (com.IsOpen == true)
{
com.Close();
}
com.PortName ="COM"+ _portNo.ToString();
char[] cc = new char[1] { ''};
string[] split = _settings.Split(cc);
com.BaudRate =Convert.ToInt32( split[0]);
com.Parity = Parity.None;//(Parity)Convert.ChangeType(split[1], typeof(Parity));
com.DataBits = Convert.ToInt32(split[2]);
com.StopBits = StopBits.One;// (StopBits)Convert.ChangeType(split[3], typeof(StopBits));
com.Open();
_ifInit = true;
return true;
}
catch (Exception ex)
{
_ComError = "通讯端口:" + _portNo + "初始化失败!" + ex.Message;
return false;
}
}
public byte[] ReadCom(short InBufCount)
{
if (_ifInit == false)
InitCom();
int i = 0;
try
{
do
{
i++;
if (i > 5)
break;
Thread.Sleep(300);
} while (com.BytesToRead < InBufCount);
if (com.BytesToRead <= 0)
{
_ComError = "在串口输入缓冲区内没有要接收到的数据!";
return null;
}
byte[] inbyte = new byte[InBufCount];
com.Read(inbyte, 0, InBufCount);
//CCarryConvert.WriteDarkCasket(this.ToString(), "Read", com.PortName, inbyte);
return inbyte;
}
catch (Exception ex)
{
_ComError = ex.Message;
return null;
}
}
public string ReadCom()
{
if (_ifInit == false)
InitCom();
try
{
string gets = com.ReadExisting();
//CCarryConvert.WriteDarkCasket(this.ToString(), "ReadExisting", com.PortName, gets);
return gets;
}
catch (Exception ex)
{
_ComError = ex.Message;
return null;
}
}
public bool WriteCom(string wData)
{
if (_ifInit == false)
InitCom();
try
{
com.Write( wData);
//CCarryConvert.WriteDarkCasket(this.ToString(), "Write", com.PortName, wData);
return true;
}
catch (Exception ex)
{
_ComError = "写串口缓冲区失败!" + ex.Message;
return false;
}
}
public bool WriteCom(byte[] wData)
{
if (_ifInit == false)
InitCom();
try
{
//com.WriteBufferSize = 0;
com.Write(wData, 0, wData.GetUpperBound(0)+1);
//CCarryConvert.WriteDarkCasket(this.ToString(), "Write", com.PortName, wData);
return true;
}
catch (Exception ex)
{
_ComError = "写串口缓冲区失败!" + ex.Message;
return false;
}
}
public void CloseCom()
{
if (com.IsOpen==true) com.Close();
}
}
}