using System;
|
using System.Collections.Generic;
|
using System.IO.Ports;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Quartz;
|
using WIDESEAWCS_QuartzJob;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
public class SerialPortJob : JobBase, IJob
|
{
|
public enum CommandType
|
{
|
None = 0,
|
Get = 1,
|
Set = 2,
|
}
|
private SerialPort serialPort;
|
private CommandType commandType = CommandType.None;
|
private string commandGet = "";//读值
|
private string commandSet = "";//设值
|
private string setOK = "";
|
private string getOK = "";
|
public Task Execute(IJobExecutionContext context)
|
{
|
try
|
{
|
if (serialPort == null) { serialPort = new SerialPort("COM1"); serialPort.DataReceived += SerialPort_DataReceived;}
|
if (!serialPort.IsOpen)
|
{
|
serialPort.Open();
|
|
serialPort.Write(commandSet);//打开串口时先设值
|
commandType = CommandType.Set;
|
}
|
switch (commandType)
|
{
|
case CommandType.Get:
|
serialPort.Write(commandGet);
|
break;
|
case CommandType.Set:
|
serialPort.Write(commandSet);
|
break;
|
}
|
}
|
catch (Exception ex) { } return Task.CompletedTask;
|
}
|
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
|
{
|
byte[] buffers = new byte[1024];
|
while (serialPort.BytesToRead > 0)
|
{
|
serialPort.Read(buffers, 0, serialPort.BytesToRead > buffers.Length ? buffers.Length : serialPort.BytesToRead);
|
string data = Encoding.Default.GetString(buffers);
|
if (data.Contains(setOK) && commandType == CommandType.Set)
|
{
|
commandType = CommandType.Get;
|
}
|
else if (data.Contains(getOK) && commandType == CommandType.Get)
|
{
|
commandType = CommandType.Set;
|
}
|
}
|
}
|
}
|
}
|