dep_yangw
我叫锄头 10 months ago
parent 8c0bd3c159
commit 2fed42bed9

@ -295,11 +295,11 @@ namespace ProductionSystem.Untils
switch (Program.ProtocolType)
{
case "PWM":
var result = PWMHelper.PWMCommunication(paraCategoryCode, targetVal, point);
if (!result.isOk)
{
LogHelper.Error(null, $"{paraCategoryCode}请求打开电机时,{result.msg}");
}
// var result = PWMHelper.PWMCommunication(paraCategoryCode, targetVal, point);
// if (!result.isOk)
// {
// LogHelper.Error(null, $"{paraCategoryCode}请求打开电机时,{result.msg}");
// }
break;
case "CAN":
Program.ProtocolDeviceHelper.Run(Program.ProtocolConigCode, (MsgFormatEnum)Enum.Parse(typeof(MsgFormatEnum), Program.MsgFormat), paraCategoryCode, pointKeyValue);

@ -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)
{

@ -5,17 +5,7 @@ namespace ProductionSystem.Untils
{
public class PWMHelper
{
/// <summary>
/// PWM通讯
/// </summary>
/// <param name="paraCategory">工序名称</param>
/// <param name="speed">转速目标值</param>
/// <param name="pointKeyValue">PLC反馈点位信息</param>
/// <returns></returns>
public static (bool isOk, string msg) PWMCommunication(string paraCategory, decimal speed, PointKeyValue pointKeyValue)
{
return PWMDeviceHelper.Instance.Run(paraCategory, speed, pointKeyValue);
}

Loading…
Cancel
Save