110,536
社区成员
发帖
与我相关
我的任务
分享
[StructLayout(LayoutKind.Explicit)]
public struct Union
{
[FieldOffset(0)]
public bool bit0;
[FieldOffset(1)]
public bool bit1;
[FieldOffset(2)]
public bool bit2;
[FieldOffset(3)]
public bool bit3;
[FieldOffset(4)]
public bool bit4;
[FieldOffset(5)]
public bool bit5;
[FieldOffset(6)]
public bool bit6;
[FieldOffset(7)]
public bool bit7;
[FieldOffset(8)]
public bool bit8;
[FieldOffset(9)]
public bool bit9;
[FieldOffset(10)]
public bool bit10;
[FieldOffset(11)]
public bool bit11;
[FieldOffset(12)]
public bool bit12;
[FieldOffset(13)]
public bool bit13;
[FieldOffset(14)]
public bool bit14;
[FieldOffset(15)]
public bool bit15;
[FieldOffset(16)]
public bool bit16;
[FieldOffset(17)]
public bool bit17;
[FieldOffset(18)]
public bool bit18;
[FieldOffset(19)]
public bool bit19;
[FieldOffset(20)]
public bool bit20;
[FieldOffset(21)]
public bool bit21;
[FieldOffset(22)]
public bool bit22;
[FieldOffset(23)]
public bool bit23;
[FieldOffset(24)]
public bool bit24;
[FieldOffset(25)]
public bool bit25;
[FieldOffset(26)]
public bool bit26;
[FieldOffset(27)]
public bool bit27;
[FieldOffset(28)]
public bool bit28;
[FieldOffset(29)]
public bool bit29;
[FieldOffset(30)]
public bool bit30;
[FieldOffset(31)]
public bool bit31;
[FieldOffset(0)]
public int BitComb;
}
这里的
[FieldOffset(0)]
public bool bit0;
[FieldOffset(1)]
public bool bit1;
[FieldOffset(2)]
public bool bit2;
[FieldOffset(3)]
public bool bit3;
[FieldOffset(4)]
public bool bit4;
[FieldOffset(5)]
public bool bit5;
[FieldOffset(6)]
public bool bit6;
[FieldOffset(7)]
public bool bit7;
[FieldOffset(8)]
public bool bit8;
[FieldOffset(9)]
public bool bit9;
[FieldOffset(10)]
public bool bit10;
[FieldOffset(11)]
public bool bit11;
[FieldOffset(12)]
public bool bit12;
[FieldOffset(13)]
public bool bit13;
[FieldOffset(14)]
public bool bit14;
[FieldOffset(15)]
public bool bit15;
[FieldOffset(16)]
public bool bit16;
[FieldOffset(17)]
public bool bit17;
[FieldOffset(18)]
public bool bit18;
[FieldOffset(19)]
public bool bit19;
[FieldOffset(20)]
public bool bit20;
[FieldOffset(21)]
public bool bit21;
[FieldOffset(22)]
public bool bit22;
[FieldOffset(23)]
public bool bit23;
[FieldOffset(24)]
public bool bit24;
[FieldOffset(25)]
public bool bit25;
[FieldOffset(26)]
public bool bit26;
[FieldOffset(27)]
public bool bit27;
[FieldOffset(28)]
public bool bit28;
[FieldOffset(29)]
public bool bit29;
[FieldOffset(30)]
public bool bit30;
[FieldOffset(31)]
public bool bit31;
能不能想办法简化?
类似于(当然这是错误的)
[StructLayout(LayoutKind.Explicit)]
public struct Union
{
[FieldOffset(0)]
public bool[32] bit;
[FieldOffset(0)]
public int BitComb;
}
这样很简洁啊。
定义成Class?
namespace Neo.ApplicationFramework.Generated
{
using System.Windows.Forms;
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using Neo.ApplicationFramework.Tools;
using Neo.ApplicationFramework.Common.Graphics.Logic;
using Neo.ApplicationFramework.Controls;
using Neo.ApplicationFramework.Interfaces;
//add related quotation
using System.IO;
using System.Reflection;
//using Neo.ApplicationFramework.Interfaces.Constants;
public class DeviceInfo
{
public float[] wrSV_float = new float[3];
public int[] wrSV_int = new int[4];
public string[] wrPW = new string[3];
public bool[] wBTN = new bool[3];
/// <summary>
/// the followings are just for reads
/// </summary>
public float[] rCV_float = new float[4];
public int[] rCV_int = new int[4];
public bool[] rLP = new bool[3];
public bool[] rSIG = new bool[2];
//
public int execution ()
{
int exe = 0;
int[] bool2int = {0,0};
bool[] sig = this.rSIG;
bool2int[0] = Convert.ToInt16(sig[0]);
bool2int[1] = Convert.ToInt16(sig[1]);
exe |= bool2int[0];
exe |= (bool2int[1])<<1;
return exe;
}
}
[StructLayout(LayoutKind.Explicit)]
public struct Union
{
[FieldOffset(0)]
public bool bit0;
[FieldOffset(1)]
public bool bit1;
[FieldOffset(2)]
public bool bit2;
[FieldOffset(3)]
public bool bit3;
[FieldOffset(4)]
public bool bit4;
[FieldOffset(5)]
public bool bit5;
[FieldOffset(6)]
public bool bit6;
[FieldOffset(7)]
public bool bit7;
[FieldOffset(8)]
public bool bit8;
[FieldOffset(9)]
public bool bit9;
[FieldOffset(10)]
public bool bit10;
[FieldOffset(11)]
public bool bit11;
[FieldOffset(12)]
public bool bit12;
[FieldOffset(13)]
public bool bit13;
[FieldOffset(14)]
public bool bit14;
[FieldOffset(15)]
public bool bit15;
[FieldOffset(16)]
public bool bit16;
[FieldOffset(17)]
public bool bit17;
[FieldOffset(18)]
public bool bit18;
[FieldOffset(19)]
public bool bit19;
[FieldOffset(20)]
public bool bit20;
[FieldOffset(21)]
public bool bit21;
[FieldOffset(22)]
public bool bit22;
[FieldOffset(23)]
public bool bit23;
[FieldOffset(24)]
public bool bit24;
[FieldOffset(25)]
public bool bit25;
[FieldOffset(26)]
public bool bit26;
[FieldOffset(27)]
public bool bit27;
[FieldOffset(28)]
public bool bit28;
[FieldOffset(29)]
public bool bit29;
[FieldOffset(30)]
public bool bit30;
[FieldOffset(31)]
public bool bit31;
[FieldOffset(0)]
public int BitComb;
}
public void DataRead(Union type1,Union type2)
{
int cur_Node = Globals.Tags.addr_node.Value;
switch(cur_Node)
{
case 1:
//pressure set value read
if (type1.bit0)
{
if (type2.bit0)
Globals.Tags.sv_prepressure801.Read();
if (type2.bit1)
Globals.Tags.sv_brushpressure801.Read();
if (type2.bit2)
Globals.Tags.sv_postpressure801.Read();
}
//counter & time set value read
Globals.Tags.sv_brushcnt801.Read();
Globals.Tags.sv_pretime801.Read();
Globals.Tags.sv_brushtime801.Read();
Globals.Tags.sv_posttime801.Read();
//password set value read
Globals.Tags.pw801_Admin.Read();
Globals.Tags.pw801_Eng.Read();
Globals.Tags.pw801_Oper.Read();
// button trig read
Globals.Tags.btn_prepurge801.Read();
Globals.Tags.btn_brush801.Read();
Globals.Tags.btn_postpurge801.Read();
//current parameter read
Globals.Tags.cv_pressure801.Read();
Globals.Tags.cv_flowm801.Read();
Globals.Tags.cv_flowb801.Read();
Globals.Tags.cv_sound801.Read();
//cycle count and time current value read
Globals.Tags.cv_brushcnt801.Read();
Globals.Tags.cv_pretime801.Read();
Globals.Tags.cv_brushtime801.Read();
Globals.Tags.cv_posttime801.Read();
//button lamp read
Globals.Tags.lp_prepurge801.Read();
Globals.Tags.lp_brush801.Read();
Globals.Tags.lp_postpurge801.Read();
//signal read
Globals.Tags.sig_purge801.Read();
Globals.Tags.sig_brush801.Read();
break;
default:
break;
}
}
}
}
如上所示:
1.Globals.Tags能否定义成一个简单的字符进行引用?
2.这个Globals.Tags.*****这个完整的变量能否定义成字符串进行引用?比方说直接定义好字符串然后就可以使用Read();
3.Globals.Tags是不是应该属于哪个命名空间?我用using Globals.Tags会报错。
主要是简化代码。
还有一个问题就是,不知道有谁做过不同设备间Ethernet/IP的网络开发?
题注里面的Globals.Tags.*****这些变量都是本设备定义的变量,然后关联到了其他设备的标签地址。
有没有什么方法能直接引用目标设备的标签地址,因为标签在目标设备中是结构体,而需要定义到的本地的Globals是不支持结构体的。