public bool SetMultipleMArea(int Addr, int count, int[] value, string Area) { if (Status == 0) { bool[] uvalue; uvalue = Array.ConvertAll <int, bool>(value, s => { if (s > 0) { return(true); } else { return(false); } }); try { master.WriteSingleCoil((byte)Constant.DefaultUnitId, (ushort)XJPLCPackCmdAndDataUnpack.AreaGetFromStr(Addr, Area), uvalue[0]); ConstantMethod.Delay(100); } catch (Exception ex) { } return(true); } else { return(false); } }
//一行中获取地址和区域 /根据一行的数据 返回固定的 plc单元格参数 这个函数 是返回绝对地址的 private bool getAddrAndArea(DataRow row, ref int mAddr, ref int mArea, ref string DSmode) { DSmode = row["mode"].ToString().Trim(); string area = "";///地址区域 string valueStr = row["addr"].ToString().Trim(); int count = 0; ConstantMethod.getAddrAndAreaByStr(valueStr, ref mAddr, ref area, DeviceId); //地址超了 无效 暂且定XDM 最大69999 if ((mAddr < 0) || (mAddr > Constant.DTTCPMAXAddr)) { return(false); } if (!int.TryParse(row["count"].ToString().Trim(), out count)) { return(false); } if (DeviceId == Constant.xzjDeivceId) { mArea = XJPLCPackCmdAndDataUnpack.AreaGetFromStr(area); mAddr = XJPLCPackCmdAndDataUnpack.RelAbsGet(mAddr, mArea, DeviceId); } else { mArea = DTTcpCmdPackAndDataUnpack.GetIntAreaFromStr(area); mAddr = DTTcpCmdPackAndDataUnpack.GetAbsAddrFromStr(mAddr, area); } return(true); }
public static byte[] AsPlcGetAbsAddr(int addr, int addressid, int addrbytecount) { List <byte> cmdLst = new List <byte>(); cmdLst.AddRange(BitConverter.GetBytes(XJPLCPackCmdAndDataUnpack.RelAbsGet(addr, addressid, 0))); cmdLst.Reverse(); return(cmdLst.ToArray()); }
public void DgvValueEdit(int rowIndex, int num3) { string userdata = evokDevice.DataForm.Rows[rowIndex]["addr"].ToString(); int addr = 0; string area = "D"; string mode = evokDevice.DataForm.Rows[rowIndex]["mode"].ToString(); ConstantMethod.SplitAreaAndAddr(userdata, ref addr, ref area); if (((XJPLCPackCmdAndDataUnpack.AreaGetFromStr(area) > -1) && (XJPLCPackCmdAndDataUnpack.AreaGetFromStr(area) < 3))) { evokDevice.WriteSingleDData(addr, num3, area, mode); } }
public bool SetMultipleDArea(int Addr, int count, int[] value, string Area) { if (Status == 0) { ushort[] uvalue; uvalue = Array.ConvertAll <int, ushort>(value, s => (ushort)s); try { master.WriteMultipleRegisters((byte)Constant.DefaultUnitId, (ushort)XJPLCPackCmdAndDataUnpack.AreaGetFromStr(Addr, Area), uvalue); return(true); } catch (Exception ex) { return(false); } } else { return(false); } }
public void DgvInOutEdit(int rowIndex, bool editEnable) { string s = evokDevice.DataForm.Rows[rowIndex]["param1"].ToString(); string str2 = evokDevice.DataForm.Rows[rowIndex]["param2"].ToString(); string userdata = evokDevice.DataForm.Rows[rowIndex]["addr"].ToString(); string area = "D"; int addr = 0; ConstantMethod.SplitAreaAndAddr(userdata, ref addr, ref area); int result = 0; int num4 = 0; if (int.TryParse(s, out result) && int.TryParse(str2, out num4)) { if (XJPLCPackCmdAndDataUnpack.AreaGetFromStr(area) < 3) { evokDevice.DPlcInfo[result].IsInEdit = editEnable; } else { evokDevice.MPlcInfoAll[result][num4].IsInEdit = editEnable; } } }
public event socDataProcess EventDataProcess;//利用委托来声明事件 #region 数据写操作 public bool SetMultipleDMArea(int Addr, int count, List<byte[]> value, string Area) { if (isDeviceReady) { List<int> addr = new List<int>(); List<int> addressid = new List<int>(); List<int> count0 = new List<int>(); int addrid = DTTcpCmdPackAndDataUnpack.GetIntAreaFromStr(Area); if (DeviceId == Constant.xzjDeivceId) { addrid = XJPLCPackCmdAndDataUnpack.AreaGetFromStr(Area); for (int i = 0; i < count; i++) { if(value.Count>0) addr.Add(Addr + i*(value[0].Count()/2)); addressid.Add(addrid); count0.Add(1); } } else for (int i = 0; i < count; i++) { addr.Add(Addr+i); addressid.Add(addrid); count0.Add(1); } SetDMCmdOut.Clear(); SetDMCmdIn.Clear(); if (DeviceId == Constant.xzjDeivceId) { if (addrid < Constant.HSD_ID) SetDMCmdOut.AddRange(DTTcpCmdPackAndDataUnpack.AsPlcPackWriteByteCmd(addr.ToArray(), addressid.ToArray(), count0.ToArray(), value, SetDMCmdIn)); else SetDMCmdOut.AddRange(DTTcpCmdPackAndDataUnpack.AsPlcPackWriteBitCmd(addr.ToArray(), addressid.ToArray(), count0.ToArray(), value, SetDMCmdIn)); } else { if (addrid > Constant.MXAddrId) SetDMCmdOut.AddRange(DTTcpCmdPackAndDataUnpack.PackWriteByteCmd(addr.ToArray(), addressid.ToArray(), count0.ToArray(), value, SetDMCmdIn)); else SetDMCmdOut.AddRange(DTTcpCmdPackAndDataUnpack.PackWriteBitCmd(addr.ToArray(), addressid.ToArray(), count0.ToArray(), value, SetDMCmdIn)); } ConstantMethod.Delay(200); //延时一下 防止数据发太快 监控上看不到 //防止前面在写数据 while (isWriteCmd) { Application.DoEvents(); } isWriteCmd = true; ConstantMethod.DelayWriteCmd(Constant.WriteCommTimeOut, ref isWriteCmd); return (!isWriteCmd); } return false; }