为工序添加工位的一种方式,
优点;
1.当一个工序添加完所需要的工位,他是自动排序的。
2.当产品执行流转逻辑时,对工位的状态更新更加方便
[Flags] public enum Workstation {None = 0, // 无工位OP01 = 1, // 工位 1 (二进制: 0000000000000001)OP02 = 2, // 工位 2 (二进制: 0000000000000010)OP03 = 4, // 工位 3 (二进制: 0000000000000100)OP04 = 8, // 工位 4 (二进制: 0000000000001000)OP05 = 16, // 工位 5 (二进制: 0000000000010000)OP06 = 32, // 工位 6 (二进制: 0000000000100000)OP07 = 64, // 工位 7 (二进制: 0000000001000000)OP08 = 128, // 工位 8 (二进制: 0000000010000000)OP09 = 256, // 工位 9 (二进制: 0000000100000000)OP10 = 512, // 工位 10 (二进制: 0000001000000000)OP11 = 1024, // 工位 11 (二进制: 0000010000000000)OP12 = 2048, // 工位 12 (二进制: 0000100000000000)OP13 = 4096, // 工位 13 (二进制: 0001000000000000)OP14 = 8192, // 工位 14 (二进制: 0010000000000000)OP15 = 16384, // 工位 15 (二进制: 0100000000000000)OP16 = 32768 // 工位 16 (二进制: 1000000000000000) }
using System;public class Process {public Workstation Stations { get; private set; } // 工位组合public Process(){Stations = Workstation.None; // 初始化工位组合 }// 添加工位public void AddWorkstation(Workstation workstation){Stations |= workstation; // 使用按位或操作符添加工位 }// 移除工位public void RemoveWorkstation(Workstation workstation){Stations &= ~workstation; // 使用按位与和取反操作符移除工位 }// 检查是否包含某个工位public bool ContainsWorkstation(Workstation workstation){return Stations.HasFlag(workstation);}// 获取 16 位二进制表示public string GetBinaryString(){return Convert.ToString((int)Stations, 2).PadLeft(16, '0');}// 从二进制字符串解析工位组合public static Workstation FromBinaryString(string binaryString){int value = Convert.ToInt32(binaryString, 2); // 将二进制字符串转换为整数return (Workstation)value; // 将整数转换为枚举值 }// 输出工序信息public void PrintProcessInfo(){Console.WriteLine("Stations: " + Stations);Console.WriteLine("Binary (16-bit): " + GetBinaryString());} }
class Program {static void Main(){// 创建一个工序Process process = new Process();// 添加工位 process.AddWorkstation(Workstation.OP01);process.AddWorkstation(Workstation.OP03);process.AddWorkstation(Workstation.OP05);process.AddWorkstation(Workstation.OP16);// 输出工序信息 process.PrintProcessInfo();// 检查是否包含某个工位if (process.ContainsWorkstation(Workstation.OP03)){Console.WriteLine("Process contains OP03.");}// 移除工位 process.RemoveWorkstation(Workstation.OP01);Console.WriteLine("After removing OP01:");process.PrintProcessInfo();// 从二进制字符串解析工位组合string binaryString = "1000000000010101"; // 二进制表示的工位组合Workstation parsedStations = Process.FromBinaryString(binaryString);Console.WriteLine($"Parsed Stations from binary '{binaryString}': " + parsedStations);} }
输出结果:
Stations: OP01, OP03, OP05, OP16
Binary (16-bit): 1000000000010101
Process contains OP03.
After removing OP01:
Stations: OP03, OP05, OP16
Binary (16-bit): 1000000000010100
Parsed Stations from binary '1000000000010101': OP01, OP03, OP05, OP16