using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Collections.Concurrent;
using BPA.Helper;
namespace BPASmartClient.SerialPort
{
public class RobotGripperHelper
{
private System.IO.Ports.SerialPort comPort = new System.IO.Ports.SerialPort();
public bool IsOpen => comPort.IsOpen;
public bool Open(string portName, int baudRate)
{
if (!System.IO.Ports.SerialPort.GetPortNames().Contains(portName))
{
MessageLog.GetInstance.Show($"{portName} 串口不存在");
}
if (!comPort.IsOpen)
{
comPort.PortName = portName;
comPort.BaudRate = baudRate;
comPort.DataBits = 8;
comPort.Parity = Parity.None;
comPort.StopBits = StopBits.One;
/*comPort.ReadTimeout = 1000;
comPort.WriteTimeout = 1000;*/
//comPort.RtsEnable = true; //设置为 true后会读取不到数据
comPort.DtrEnable = true;//获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号。
//comPort.RtsEnable = true;//获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号
try
{
comPort.Open();
}
catch (Exception ex)
{
MessageLog.GetInstance.ShowEx(ex.ToString());
}
}
/* TaskManage.GetInstance.StartLong(new Action(() =>
{
Thread.Sleep(5000);
}), $"开启电爪设备通讯", true);*/
MessageLog.GetInstance.Show($"{portName} 串口打开成功");
return comPort.IsOpen;
}
public bool Stop(string portName)
{
comPort.Close();
MessageLog.GetInstance.Show($"{portName} 串口关闭成功");
return comPort.IsOpen;
}
///
/// 舵机控制 #000P1300T1000!
///
/// 通道号 0 - 5
/// 夹爪幅度 0500 - 2500
/// 夹爪时间 0000-9999
public void Write(byte index, string value, string time = "1000")
{
byte[] PwmNumber = Encoding.ASCII.GetBytes(value);
byte[] Times = Encoding.ASCII.GetBytes(time);
//byte[] buffers = new byte[15] { 0x23, 0x30, 0x30, 0x30, 0x50, PwmNumber[0], PwmNumber[1], PwmNumber[2], PwmNumber[3], 0x54, Times[0], Times[1], Times[2], Times[3], 0x21 };
byte[] buffers = new byte[15] { 0x23, 0x30, 0x30, 0x30, 0x50, 0x31, 0x30, 0x35, 0x30, 0x54, 0x31, 0x30, 0x30, 0x30, 0x21 };
if (IsOpen) comPort.Write(buffers, 0, buffers.Length);
}
}
}