|
|
|
@ -19,24 +19,13 @@ namespace ProductionSystem.Untils
|
|
|
|
|
List<byte> _data = new List<byte>();
|
|
|
|
|
SerialPort _serialPort;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// PWM通讯
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="paraCategory">工序名称</param>
|
|
|
|
|
/// <param name="speed">转速目标值</param>
|
|
|
|
|
/// <param name="pointKeyValue">PLC反馈点位信息</param>
|
|
|
|
|
public (bool isok, string msg) Run(string paraCategory, decimal speed, PointKeyValue pointKeyValue)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public (bool isok, string msg) writeData(string sendString)
|
|
|
|
|
{
|
|
|
|
|
LogHelper.Info($"1.{paraCategory}请求PWM通讯!");
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (_serialPort != null && _serialPort.IsOpen)
|
|
|
|
|
{
|
|
|
|
|
_serialPort.Close();
|
|
|
|
|
}
|
|
|
|
|
_serialPort = null;
|
|
|
|
|
_dataList = new List<List<byte>>();
|
|
|
|
|
_data = new List<byte>();
|
|
|
|
|
|
|
|
|
|
_serialPort = new SerialPort
|
|
|
|
|
{
|
|
|
|
|
PortName = "COM5",
|
|
|
|
@ -46,103 +35,7 @@ namespace ProductionSystem.Untils
|
|
|
|
|
StopBits = (StopBits)Program.StopBits
|
|
|
|
|
};
|
|
|
|
|
_serialPort.Open();
|
|
|
|
|
if (!_serialPort.IsOpen)
|
|
|
|
|
{
|
|
|
|
|
return (false, "串口打开失败!");
|
|
|
|
|
}
|
|
|
|
|
_serialPort.DataReceived += _serialPort_DataReceived;
|
|
|
|
|
|
|
|
|
|
var hexVoltage = DataConvertHelper.NumberToHexByteArray(Program.PwmVoltage.Value * 10);//16进制电压
|
|
|
|
|
var hexRate = DataConvertHelper.NumberToHexByteArray(Convert.ToInt32(Program.PwmRate.Value), "X8");//16进制频率
|
|
|
|
|
var speedDif = (Program.MaxSpeed - Program.MinSpeed);
|
|
|
|
|
var duty = (speed - Program.MinSpeed) / (speedDif == 0 ? 1 : speedDif);//计算占空比
|
|
|
|
|
var hexDuty = DataConvertHelper.NumberToHexByteArray(Convert.ToInt32(duty * 1000));//16进制占空比
|
|
|
|
|
|
|
|
|
|
#region 1.发送电机参数指令
|
|
|
|
|
string strByte = $"0{Program.StationNo} 10 00 00 00 0D 1A {hexVoltage}{hexRate}{hexDuty}00 00 00 0A 00 0A 00 32 01 F4 01 90 00 32 00 01 00 01";
|
|
|
|
|
var sendString = MyStrHelper.MyCRC16(strByte);//CRC校验
|
|
|
|
|
LogHelper.Info($"1.发送-->{paraCategory}工序电机参数指令:{sendString}");
|
|
|
|
|
var (isok, msg) = writeData(sendString);
|
|
|
|
|
if (!isok)
|
|
|
|
|
{
|
|
|
|
|
var errorMsg = $"1.发送-->{paraCategory}工序电机参数指令异常:{msg}";
|
|
|
|
|
LogHelper.Error(null, errorMsg);
|
|
|
|
|
var write1Result = OmronHelper.WriteToPlc(pointKeyValue.DataType, pointKeyValue.Address, "2");
|
|
|
|
|
if (!write1Result.ok)
|
|
|
|
|
{
|
|
|
|
|
LogHelper.Error(null, $"{paraCategory}工序PWM通讯时,写入PLC地址:{pointKeyValue.Address}时异常!");
|
|
|
|
|
}
|
|
|
|
|
return (false, errorMsg);
|
|
|
|
|
}
|
|
|
|
|
LogHelper.Info($"{paraCategory}工序PWM通讯时,写入电机参数,PLC地址:{pointKeyValue.Address}时成功!");
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 2.打开电机指令
|
|
|
|
|
var sendOnStr = "01 06 00 0D 00 01 D9 C9";//正确指令
|
|
|
|
|
LogHelper.Info($"1.发送-->{paraCategory}工序打开电机指令:{sendOnStr}");
|
|
|
|
|
(isok, msg) = writeData(sendOnStr);
|
|
|
|
|
if (!isok)
|
|
|
|
|
{
|
|
|
|
|
var errorMsg = $"1.发送-->{paraCategory}工序打开电机指令异常:{msg}";
|
|
|
|
|
LogHelper.Error(null, errorMsg);
|
|
|
|
|
var write3Result = OmronHelper.WriteToPlc(pointKeyValue.DataType, pointKeyValue.Address, "2");
|
|
|
|
|
if (!write3Result.ok)
|
|
|
|
|
{
|
|
|
|
|
LogHelper.Error(null, $"{paraCategory}工序PWM通讯时,写入PLC地址:{pointKeyValue.Address}时异常!");
|
|
|
|
|
}
|
|
|
|
|
return (false, errorMsg);
|
|
|
|
|
}
|
|
|
|
|
LogHelper.Info($"{paraCategory}工序PWM通讯时,写入电机指令,PLC地址:{pointKeyValue.Address}时成功!");
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//设备启动开始显示曲线
|
|
|
|
|
Program.timerEnable = true;
|
|
|
|
|
Program.cureManualReset.Set();
|
|
|
|
|
|
|
|
|
|
//1.5秒后写入反馈点位
|
|
|
|
|
//Thread.Sleep(1500);
|
|
|
|
|
var writeResult = OmronHelper.WriteToPlc(pointKeyValue.DataType, pointKeyValue.Address, "1");
|
|
|
|
|
LogHelper.Info($"{paraCategory}工序PWM通讯写入反馈点位1");
|
|
|
|
|
if (!writeResult.ok)
|
|
|
|
|
{
|
|
|
|
|
return (false, $"{paraCategory}工序PWM通讯,写入PLC地址:{pointKeyValue.Address}时异常!");
|
|
|
|
|
}
|
|
|
|
|
LogHelper.Info($"{paraCategory}工序PWM通讯时,写入反馈点位,PLC地址:{pointKeyValue.Address}时成功!");
|
|
|
|
|
//往PLC写入转速
|
|
|
|
|
var point = Program.CommandPointKeyValues.FirstOrDefault(m => m.Key == "M6");
|
|
|
|
|
if (point != null)
|
|
|
|
|
{
|
|
|
|
|
var writeSpeedResult = OmronHelper.WriteToPlc(point.DataType, point.Address, speed.ToString());
|
|
|
|
|
if (!writeSpeedResult.ok)
|
|
|
|
|
{
|
|
|
|
|
var write2Result = OmronHelper.WriteToPlc(pointKeyValue.DataType, pointKeyValue.Address, "2");
|
|
|
|
|
if (!write2Result.ok)
|
|
|
|
|
{
|
|
|
|
|
LogHelper.Error(null, $"{paraCategory}工序PWM通讯时,写入PLC地址:{pointKeyValue.Address}时异常!");
|
|
|
|
|
}
|
|
|
|
|
return (false, $"{paraCategory}工序PWM通讯时,写入转速时异常!");
|
|
|
|
|
}
|
|
|
|
|
LogHelper.Info($"{paraCategory}工序PWM通讯时,写入转速,PLC地址:{pointKeyValue.Address}时成功!");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LogHelper.Error(null, $"{paraCategory}工序PWM通讯时,往PLC写入转速异常:M6点位为空!");
|
|
|
|
|
}
|
|
|
|
|
return (true, "操作成功!");
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
var msg = ex == null ? $"{paraCategory}工序与232模块通讯异常" : ex.Message;
|
|
|
|
|
LogHelper.Error(ex, $"CANDeviceHelper类中Run方法异常:{msg}");
|
|
|
|
|
return (false, msg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public (bool isok, string msg) writeData(string sendString)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
_dataList.Clear();
|
|
|
|
|
|
|
|
|
|
var (sendBytes, msg) = DataConvertHelper.StrToHexByteArray(sendString);
|
|
|
|
|
if (sendBytes == null)
|
|
|
|
|
{
|
|
|
|
|