feat - 添加点位

master
SoulStar 2 months ago
parent 0ea79d69a9
commit 5eb5c0d911

@ -50,7 +50,9 @@
<Compile Include="EndianConvert.cs" /> <Compile Include="EndianConvert.cs" />
<Compile Include="PlcConnect.cs" /> <Compile Include="PlcConnect.cs" />
<Compile Include="PlcEntity\RgvStationEnum.cs" /> <Compile Include="PlcEntity\RgvStationEnum.cs" />
<Compile Include="PlcEntity\StationRecipeEntity.cs" />
<Compile Include="PlcHelper\RecipeParaHelper.cs" /> <Compile Include="PlcHelper\RecipeParaHelper.cs" />
<Compile Include="PlcHelper\TransferSingal.cs" />
<Compile Include="PlcHelper\WorkStationHelper.cs" /> <Compile Include="PlcHelper\WorkStationHelper.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HighWayIot.Plc.PlcEntity
{
/// <summary>
/// 工位配方信息
/// </summary>
public class StationRecipeEntity
{
/// <summary>
/// 工位配方描述
/// </summary>
public string StationRecipeDescripe { get; set; }
/// <summary>
/// 工位配方号
/// </summary>
public short StationRecipeNo { get; set; }
/// <summary>
/// 工位小车号
/// </summary>
public short StationVehicleNo { get; set; }
/// <summary>
/// 称重工位胎坯重量
/// </summary>
public float StationTireWeight { get; set; }
}
}

@ -0,0 +1,177 @@
using HighWayIot.Plc.PlcEntity;
using HslCommunication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HighWayIot.Plc.PlcHelper
{
/// <summary>
/// 中专信号点位读写
/// </summary>
public class TransferSingal
{
/// <summary>
/// 工位贴合开始信号写入
/// </summary>
/// <param name="stationNo"></param>
/// <returns></returns>
public bool WriteStationStickSingal(int stationNo)
{
bool result = false;
switch (stationNo)
{
case 1:
result = PlcConnect.PlcWrite2("B201", true, DataTypeEnum.Bool).IsSuccess;
break;
case 2:
result = PlcConnect.PlcWrite2("B202", true, DataTypeEnum.Bool).IsSuccess;
break;
case 3:
result = PlcConnect.PlcWrite2("B203", true, DataTypeEnum.Bool).IsSuccess;
break;
case 4:
result = PlcConnect.PlcWrite2("B205", true, DataTypeEnum.Bool).IsSuccess;
break;
case 5:
result = PlcConnect.PlcWrite2("B207", true, DataTypeEnum.Bool).IsSuccess;
break;
default:
break;
}
return result;
}
/// <summary>
/// 工位贴合计数开始信号写入
/// </summary>
/// <param name="stationNo"></param>
/// <returns></returns>
public bool WriteStationStickCountSingal(int stationNo)
{
bool result = false;
switch (stationNo)
{
case 1:
result = PlcConnect.PlcWrite2("B211", true, DataTypeEnum.Bool).IsSuccess;
break;
case 2:
result = PlcConnect.PlcWrite2("B212", true, DataTypeEnum.Bool).IsSuccess;
break;
case 3:
result = PlcConnect.PlcWrite2("B213", true, DataTypeEnum.Bool).IsSuccess;
break;
case 4:
result = PlcConnect.PlcWrite2("B215", true, DataTypeEnum.Bool).IsSuccess;
break;
case 5:
result = PlcConnect.PlcWrite2("B217", true, DataTypeEnum.Bool).IsSuccess;
break;
default:
break;
}
return result;
}
/// <summary>
/// 读取小车就绪信号(开始贴合) 鼓到位信号读取(开始横裁信号)和贴合计数信号读取(横裁结束信号)
/// </summary>
/// <returns>第一个Byte数组是第二个Byte数组是开始横裁信号第三个是结束横裁信号</returns>
public bool[][] ReadDrumReadyAndCountReadySignal()
{
OperateResult<byte[]> operateResult = PlcConnect.MelsecInstance1.Read("B991", 2);
if (!operateResult.IsSuccess)
{
return null;
}
byte[] data = operateResult.Content;
bool[][] result = new bool[3][];
result[0] = new bool[9];
result[1] = new bool[8];
result[2] = new bool[8];
//12345工位小车就绪
for (int i = 0; i < 6; i++)
{
result[0][i] = data[0].GetBoolByIndex(i);
}
//345称重工位就绪
for (int i = 0; i < 3; i++)
{
result[0][i + 6] = data[1].GetBoolByIndex(i);
}
//开始和结束横裁的信号
for (int i = 0; i < 8; i++)
{
result[1][i] = data[0].GetBoolByIndex(i);
result[2][i] = data[2].GetBoolByIndex(i);
}
return result;
}
/// <summary>
/// 监控中转信号
/// </summary>
/// <returns></returns>
public bool[][] ReadMonitorSingal()
{
OperateResult<byte[]> operateResult = PlcConnect.MelsecInstance1.Read("B9B1", 5);
if (!operateResult.IsSuccess)
{
return null;
}
byte[] data = operateResult.Content;
bool[][] result = new bool[5][];
for (int i = 0; i < 5; i++)
{
result[i] = new bool[5];
for (int j = 0; j < 5; j++)
{
result[i][j] = data[i * 2].GetBoolByIndex(j);
}
}
return result;
}
/// <summary>
/// 监控工位配方信息
/// </summary>
/// <returns></returns>
public List<StationRecipeEntity> ReadStationRecipeInfo()
{
OperateResult<byte[]> operateResult = PlcConnect.MelsecInstance1.Read("W950", 80);
if (!operateResult.IsSuccess)
{
return null;
}
byte[] data = operateResult.Content;
List<StationRecipeEntity> resultList = new List<StationRecipeEntity>();
for (int i = 0; i < 5; i++)
{
resultList.Add(new StationRecipeEntity()
{
StationRecipeDescripe = PlcConnect.MelsecInstance2.ByteTransform.TransString(data, (i * 16) + 0, 20, Encoding.ASCII),
StationRecipeNo = PlcConnect.MelsecInstance2.ByteTransform.TransInt16(data, (i * 16) + 20),
StationVehicleNo = PlcConnect.MelsecInstance2.ByteTransform.TransInt16(data, (i * 16) + 22),
StationTireWeight = PlcConnect.MelsecInstance2.ByteTransform.TransSingle(data, (i * 16) + 24),
});
}
return resultList;
}
}
}

@ -36,13 +36,11 @@ namespace HighWayIot.Plc.PlcHelper
/// <summary> /// <summary>
/// RFID固定工位识别点位读取 /// RFID固定工位识别点位读取
/// </summary> /// </summary>
/// <param name="rgvStation"></param>
/// <returns></returns>
public bool[] ReadStationSingal() public bool[] ReadStationSingal()
{ {
bool[] result = new bool[17]; bool[] result = new bool[17];
OperateResult<byte[]> PlcResult = PlcConnect.MelsecInstance2.Read("B230", 17); OperateResult<byte[]> PlcResult = PlcConnect.MelsecInstance1.Read("B230", 2);
byte[] data = PlcResult.Content; byte[] data = PlcResult.Content;

@ -67,8 +67,8 @@ namespace HighWayIot.Rfid
index += 2; index += 2;
//取读到标签的EPC //取读到标签的EPC
Array.Copy(DataBytes, index, EPCData.EPC, 0, 4); Array.Copy(DataBytes, index, EPCData.EPC, 0, 12);
index += 4; index += 12;
entity.Data.Add(EPCData); entity.Data.Add(EPCData);
} }

@ -1,5 +1,6 @@
using HighWayIot.Log4net; using HighWayIot.Log4net;
using HighWayIot.Plc; using HighWayIot.Plc;
using HighWayIot.Plc.PlcHelper;
using HighWayIot.Winform.Business; using HighWayIot.Winform.Business;
using HslCommunication; using HslCommunication;
using System; using System;
@ -43,11 +44,30 @@ namespace HighWayIot.Winform.UserControlPages
XmlUtil xmlUtil = new XmlUtil(); XmlUtil xmlUtil = new XmlUtil();
private void button1_Click(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e)
{ {
var list = xmlUtil.ConfigReader(); OperateResult<byte[]> PlcResult = PlcConnect.MelsecInstance1.Read("B230", 2);
foreach (var item in list)
if (PlcResult.IsSuccess)
{ {
Console.WriteLine(item.RoleIndex + item.PageName); byte[] bytes = PlcResult.Content;
Console.WriteLine("长度" + bytes.Length.ToString());
} }
else
{
Console.WriteLine("读取失败");
}
WorkStationHelper helper = new WorkStationHelper();
bool[] res = helper.ReadStationSingal();
foreach(var r in res)
{
Console.WriteLine(r.ToString());
}
//var list = xmlUtil.ConfigReader();
//foreach (var item in list)
//{
// Console.WriteLine(item.RoleIndex + item.PageName);
//}
} }
private async void button2_Click(object sender, EventArgs e) private async void button2_Click(object sender, EventArgs e)

Loading…
Cancel
Save