反射的具体应用

本文介绍了一种车间配置管理系统的设计方案,通过后台系统集中管理上位机的配置信息,减轻了运维人员的工作负担。系统包括配置类别表、配置项表及系统配置表等关键组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.业务场景

     随着车间中上位机数目的增加,系统运维人员的工作量也在增加,有时候修改一些配置信息,可能需要运维人员挨个在上位机系统中进行修改,因此,把一些配置信息的修改调整到后台系统中,上位机在交接班和系统重启或者上位机启动后台线程每个一段时间查询一次,获取到对应的配置信息,然后进行修改,这样操作的话,能够极大地减轻运维人员的工作量。

2.后台程序设计

    首先,创建配置类别表,用来描述配置项的类别信息,比如,打印配置、系统开关配置、扫描条码长度配置等。

系统配置类别表:Configure_Class
ID(PK)数据主键 
Name类别名称 
Description类别描述 
Category分类属性(Public、Private)

Public:所有上位机公用

Private:上位机专属配置

Delete_Flag删除标记用于数据的逻辑删除

 

 然后,创建配置项表,用于描述配置项的详细信息。

系统配置项表Configure_Item
ID(PK)数据主键 
Class_ID配置类别ID 
Name名称 
Description描述 
Date_Type数据类型String、Boolean、SerialPort、Class等
Instruction配置项说明配置项的详细说明
Delete_Flag删除标记用于数据的逻辑删除

最后,创建系统配置表,用于描述上位机的详细配置信息。

系统配置表Configure
ID(PK)数据主键 
Site_Name部门名称名称也为其唯一标识信息
Area_Name区域名称
PLine_Name生产线名称
Equipment_Name机台名称
Equipment_Part机台部位较大的设备会使用两个上位机控制,分为不同的部位
Item_ID配置项ID 
Item_Value配置项值特殊的信息使用Json字符串标识,上位机进行解析
Delete_Flag删除标记用于数据的逻辑删除

完成以上数据表的创建后,后台系统需要根据表结构进行编程实现,最后系统配置表中数据规则为

IDSite_NameArea_NamePLine_NameEquipment_NameEquipment_PartItem_IDItem_ValueDelete_Flag
1AAABBBCCCDDDUP11(boolean类型) 
2AAABBBCCCDDDDOWN21(string类型) 

 

3.上位机程序设计

上位机程序在特定条件下触发获取后台系统配置的操作,从数据库中获取到机台对应的系统配置,并转换为对应的实体类;

上位机系统配置实体类:

    public class RemoteConfigItem
    {
        /// <summary>
        /// 数据键值
        /// </summary>
        public string ID { get; set; }

        /// <summary>
        /// 配置分类
        /// </summary>
        public string Category { get; set; }

        /// <summary>
        /// 机台名称
        /// </summary>
        public string EquipmentName { get; set; }

        /// <summary>
        /// 机台部位
        /// </summary>
        public string EquipmentPart { get; set; }

        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        ////// </summary>
        public string Value { get; set; }
    }

 

 

 获取配置项的数据后,使用反射机制将配置项的值设置到系统配置实体类的对应属性上,实际上,此处的默认约定就是,系统配置项的名称必须和上位机系统配置类的属性名称相同,否则会无法执行反射操作。

public partial class SystemConfig
{
        /// <summary>
        /// 设置远程配置
        /// </summary>
        private void SetRemoteConfig(List<RemoteConfigItem> itemList)
        {
            var propertyInfoArray = this.GetType().GetProperties();
            List<PropertyInfo> propertyInfoList = new List<PropertyInfo>(propertyInfoArray);
            var publicItemList = itemList.FindAll(item => item.Category.Equals(ConfigCategoryConst.Public));
            foreach (var configItem in publicItemList)
            {
                var propertyInfo = propertyInfoList.Find(item => item.Name.Equals(configItem.Name));
                if (propertyInfo== null)
                {
                    continue;
                }
                if (!propertyInfo.CanWrite)
                {
                    continue;
                }
                //后期此处需要优化,需要对不是基元类型的属性,需要使用Json序列化方法,比如Json字符串序列化为对应的类实例
                propertyInfo.SetValue(this, Convert.ChangeType(configItem.Value, propertyInfo.PropertyType), null);
            }
        } 
}

 

转载于:https://www.cnblogs.com/DreamOfLife/p/8799043.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值