/// <summary> /// 功能描述:根据参数获得定值,软压板,装置设置 /// 参宿中只有IntPtr pItem指向的一个DATA_ITEM类型的结构体数组为输出,其它都是输入参数。 /// 这些值在文件mmssgcfg.cfg中 /// </summary> /// <param name="sta_name">站名称</param> /// <param name="equ_name">装置名称</param> /// <param name="menu_path">菜单树路径/param> /// <param name="ds_type">在配置文件中的数据集类型,保护定值填1,其他定值填3,默认值是3</param> /// <param name="act_sg">表示定值区号,只有保护定值有区号,别的定值没有,填0,默认值是1。具体查看mmssgcfg.cfg</param> /// <returns>返回获得的DATA_ITEM_C类型的数据,如果没有得到数据,则返回null</returns> public static DATA_ITEM_C GetSetting(string sta_name, string equ_name, string menu_path, int ds_type = 1, int act_sg = 1) { DATA_ITEM_C setting_C = new DATA_ITEM_C(); int iMaxNum = 256; int size = Marshal.SizeOf(typeof(DATA_ITEM)); IntPtr pBuffer = Marshal.AllocHGlobal(size * iMaxNum); try { int iGet = dse_get_setting(sta_name, equ_name, menu_path, ds_type, act_sg, pBuffer, iMaxNum); IntPtr ipC = new IntPtr(pBuffer.ToInt64()); for (int i = 0; i < iGet; i++) { DATA_ITEM dataItem = (DATA_ITEM)Marshal.PtrToStructure(ipC, typeof(DATA_ITEM)); DATA_ITEM_C addData = new DATA_ITEM_C(dataItem); setting_C.Add(addData); ipC += size; } } finally { Marshal.FreeHGlobal(pBuffer); } if (setting_C.Count == 0) return null; else return setting_C; }
/// <summary> /// 设置某选项的值即DATA_ITEM_C的Val属性值 /// </summary> /// <param name="setting_C">传进来的某设置后的选项值</param> /// <param name="nums">setting_C数组的大小</param> /// <param name="sta_name">站点名称</param> /// <param name="equ_name">装置名称</param> /// <param name="menu_path">菜单路径</param> /// <param name="ds_type">在配置文件中的数据集类型,保护定值填1,其他定值填3,默认值是3</param> /// <param name="act_sg">表示定值区号,只有保护定值有区号,别的定值没有,填0,默认值是1。具体查看mmssgcfg.cfg</param> /// <returns>设置成功返回true,否则返回false</returns> public static bool SetSetting(DATA_ITEM_C[] setting_C,int nums,string sta_name, string equ_name, string menu_path, int ds_type = 1, int act_sg = 1) { int result = -1; DATA_ITEM[] dataItems = new DATA_ITEM[nums]; for(int i=0;i< nums; i++) { dataItems[i] = setting_C[i].DataItem; } result = dse_set_setting(sta_name, equ_name, menu_path, ds_type, act_sg, dataItems, nums); if (result == 0) return true; else return false; }