private void dgvPlcType_CellClick(object sender, DataGridViewCellEventArgs e) { try { if (e.RowIndex > -1) { //当前客户端设备 Config.PlcTypeItem plc = (Config.PlcTypeItem) this.dgvPlcType.CurrentRow.DataBoundItem; this.dgvPlcType_Focus(plc); //if (!this.chkShowAll.Checked) //{ // this.dgvPlcData.EndEdit(); // this.dgvPlcData.DataSource = Config.ConfigManager.Instance.ConfigPlc.PlcDataItems; // List<Config.PlcDataItem> checkItems = this.dgvPlcData.Rows.Cast<DataGridViewRow>().Where // (x => (string)x.Cells["deviceName"].Value == plc.DevName) // .Select(x => x.DataBoundItem).Cast<Config.PlcDataItem>().ToList(); // this.dgvPlcData.DataSource = checkItems; // this.dgvPlcData.Refresh(); //} //else //{ // //this.dgvPlcData.DataSource = Config.ConfigManager.Instance.ConfigPlc.PlcDataItems; //} } } catch { } }
// 写设备的值 public bool WriteValue(Common.PlcDevice plcDevice, object value) { bool IsOk = false; try { Config.PlcDataItem devData = this.GetPlcDataItem(plcDevice); Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName); switch (devType.DevType) { //Keyence case Common.DeviceType.Keyence: KeyenceMcNet kPlcClient = (KeyenceMcNet)devType.Tag; IsOk = this.WriteSieTcpValue(devType, devData, kPlcClient, value); break; //Melsec case Common.DeviceType.Qseries: MelsecMcNet mPlcClient = (MelsecMcNet)devType.Tag; IsOk = this.WriteSieTcpValue(devType, devData, mPlcClient, value); break; case Common.DeviceType.S1200: case Common.DeviceType.S300: case Common.DeviceType.S400: case Common.DeviceType.S1500: case Common.DeviceType.S200Smart: case Common.DeviceType.S200: SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag; IsOk = this.WriteSieTcpValue(devType, devData, sPlcClient, value); break; case Common.DeviceType.ModbusTcp: ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag; IsOk = this.WriteModTcpValue(devType, devData, mTcpClient, value); break; case Common.DeviceType.ModbusRtu: ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag; IsOk = this.WriteModRtuValue(devType, devData, mRtuClinet, value); break; default: break; } } catch { } return(IsOk); }
private void dgvPlcData_CellContentClick(object sender, DataGridViewCellEventArgs e) { try { if (e.RowIndex >= 0) { //当前网络客户端 if (this.dgvPlcData.CurrentRow.DataBoundItem == null) { return; } Config.PlcDataItem plcdata = (Config.PlcDataItem) this.dgvPlcData.CurrentRow.DataBoundItem; Config.PlcTypeItem devType = Logic.PlcHandle.Instance.GetPlcTypeItem(plcdata.DeviceName); //Config.PlcTypeItem devType = (Config.PlcTypeItem)this.dgvPlcType.CurrentRow.DataBoundItem; switch (dgvPlcData.Columns[e.ColumnIndex].Name) { case "btnDelData": //删除 // if (MessageBox.Show("是否删除该项设备? ", "删除提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return; Config.ConfigManager.Instance.ConfigPlc.PlcDataItems.Remove(plcdata); this.dgvPlcType_Focus(devType); break; case "btnReadPlc": //读值 Logic.PlcHandle.Instance.ReadValue(plcdata.PlcDevice); this.dgvPlcData.CurrentRow.Cells["valueNewCol"].Value = plcdata.ValueNew; //int i = this.dgvPlcData.CurrentRow.Index; //this.dgvPlcData.InvalidateRow(i); break; case "btnWritePlc": //写值 Logic.PlcHandle.Instance.WriteValue(plcdata.PlcDevice, plcdata.ValueWrite); //if(!devType.IsConnected && Common.IsSimulator) //{ // //plcdata.ValueNew = false; // //plcdata.ValueNew = true; //} break; default: break; } } } catch { } }
//是否全部显示数据 private void chkShowAll_CheckedChanged(object sender, EventArgs e) { try { if (this.chkShowAll.Checked) { this.dgvPlcData.DataSource = Config.ConfigManager.Instance.ConfigPlc.PlcDataItems; this.txtCount.Text = (this.dgvPlcData.Rows.Count - 1).ToString(); } else { Config.PlcTypeItem plc = (Config.PlcTypeItem) this.dgvPlcType.CurrentRow.DataBoundItem; this.dgvPlcType_Focus(plc); } //Config.ConfigManager.Instance.ConfigPlc.ShowAllItem = this.chkShowAll.Checked; } catch { } }
// 读设备的值 public object ReadValue(string itemName) { //try //{ Config.PlcDataItem devData = this.GetPlcDataItem(itemName); Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName); switch (devType.DevType) { case Common.DeviceType.S1200: case Common.DeviceType.S300: case Common.DeviceType.S400: case Common.DeviceType.S1500: case Common.DeviceType.S200Smart: case Common.DeviceType.S200: SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag; return(this.ReadSieTcpValue(devType, devData, sPlcClient)); //break; case Common.DeviceType.ModbusTcp: ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag; return(this.ReadModTcpValue(devType, devData, mTcpClient)); //break; case Common.DeviceType.ModbusRtu: ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag; return(this.ReadModRtuValue(devType, devData, mRtuClinet)); //break; default: return(null); //break; } //} //catch (Exception ex) //{ //} }
// 读设备的值 public object ReadValue(Common.PlcDevice plcDevice) { Config.PlcDataItem devData = this.GetPlcDataItem(plcDevice); if (devData == null) { return(null); } Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName); switch (devType.DevType) { //Keyence case Common.DeviceType.Keyence: KeyenceMcNet kPlcClient = (KeyenceMcNet)devType.Tag; return(this.ReadSieTcpValue(devType, devData, kPlcClient)); //Melsec 三菱PLC case Common.DeviceType.Qseries: MelsecMcNet mPlcClient = (MelsecMcNet)devType.Tag; return(this.ReadSieTcpValue(devType, devData, mPlcClient)); //Siemens case Common.DeviceType.S1200: case Common.DeviceType.S300: case Common.DeviceType.S400: case Common.DeviceType.S1500: case Common.DeviceType.S200Smart: case Common.DeviceType.S200: SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag; return(this.ReadSieTcpValue(devType, devData, sPlcClient)); case Common.DeviceType.ModbusTcp: ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag; return(this.ReadModTcpValue(devType, devData, mTcpClient)); case Common.DeviceType.ModbusRtu: ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag; return(this.ReadModRtuValue(devType, devData, mRtuClinet)); default: return(null); } }
//添加新行数据 private void btnAddNew_Click(object sender, EventArgs e) { try { Config.PlcTypeItem plc = (Config.PlcTypeItem) this.dgvPlcType.CurrentRow.DataBoundItem; Config.PlcDataItem newData = new Config.PlcDataItem(); newData.DeviceName = plc.DevName; newData.ItemName = plc.DevName + "_"; newData.MachineID = plc.MachineID; Config.ConfigManager.Instance.ConfigPlc.PlcDataItems.Add(newData); //this.dgvPlcData.DataSource = Config.ConfigManager.Instance.ConfigPlc.PlcDataItems; //this.dgvPlcData.Refresh(); this.dgvPlcType_Focus(plc); } catch { //throw; } }
// 写设备的值 public bool WriteValue(string itemName, object value) { bool IsOK = false; try { Config.PlcDataItem devData = this.GetPlcDataItem(itemName); Config.PlcTypeItem devType = this.GetPlcTypeItem(devData.DeviceName); switch (devType.DevType) { case Common.DeviceType.S1200: case Common.DeviceType.S300: case Common.DeviceType.S400: case Common.DeviceType.S1500: case Common.DeviceType.S200Smart: case Common.DeviceType.S200: SiemensS7Net sPlcClient = (SiemensS7Net)devType.Tag; IsOK = this.WriteSieTcpValue(devType, devData, sPlcClient, value); break; case Common.DeviceType.ModbusTcp: ModbusTcpNet mTcpClient = (ModbusTcpNet)devType.Tag; IsOK = this.WriteModTcpValue(devType, devData, mTcpClient, value); break; case Common.DeviceType.ModbusRtu: ModbusRtu mRtuClinet = (ModbusRtu)devType.Tag; IsOK = this.WriteModRtuValue(devType, devData, mRtuClinet, value); break; default: break; } } catch { } return(IsOK); }
private void dgvPlcType_CellContentClick(object sender, DataGridViewCellEventArgs e) { try { if (e.RowIndex >= 0) { //当前客户端设备 Config.PlcTypeItem plc = (Config.PlcTypeItem) this.dgvPlcType.CurrentRow.DataBoundItem; switch (dgvPlcType.Columns[e.ColumnIndex].Name) { case "btnDelPlcType": //删除 if (MessageBox.Show("是否删除该项设备? ", "删除提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } Config.ConfigManager.Instance.ConfigPlc.PlcTypeItems.Remove(plc); break; case "devName": //Config.PlcDataItem newData = new Config.PlcDataItem(); //newData.DeviceName = plc.DevName; //newData.ItemName = plc.DevName + "_"; //Config.ConfigManager.Instance.ConfigPlc.PlcDataItems.Add(newData); ////this.dgvPlcData.DataSource = Config.ConfigManager.Instance.ConfigPlc.PlcDataItems; //this.dgvPlcData.Refresh(); break; default: break; } } } catch { } }
//清空数据 private void btnClear_Click(object sender, EventArgs e) { //this.dgvPlcData.DataSource = null; if (MessageBox.Show("是否删除该项设备? ", "删除提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } if (!this.chkShowAll.Checked) { Config.PlcTypeItem plc = (Config.PlcTypeItem) this.dgvPlcType.CurrentRow.DataBoundItem; IEnumerable ie = from lst in Config.ConfigManager.Instance.ConfigPlc.PlcDataItems where lst.DeviceName == plc.DevName select lst; List <Config.PlcDataItem> ioLst = ie.Cast <Config.PlcDataItem>().ToList(); foreach (Config.PlcDataItem item in ioLst) { Config.ConfigManager.Instance.ConfigPlc.PlcDataItems.Remove(item); } this.dgvPlcType_Focus(plc); return; } Config.ConfigManager.Instance.ConfigPlc.PlcDataItems.Clear(); }
private void dgvPlcType_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { try { if (this.dgvPlcType.Columns[e.ColumnIndex].Name.Equals("isConnectedPLC")) { Config.PlcTypeItem item = (Config.PlcTypeItem) this.dgvPlcType.Rows[e.RowIndex].DataBoundItem; if (item == null) { e.Value = this.imageList1.Images[3]; } else if (item.IsActive) { e.Value = (item.IsConnected == true) ? this.imageList1.Images[1] : this.imageList1.Images[2]; } else { e.Value = this.imageList1.Images[0]; } } } catch { } }
//聚焦设备项 private void dgvPlcType_Focus(Config.PlcTypeItem plc) { if (!this.chkShowAll.Checked) { //this.dgvPlcData.EndEdit(); //this.dgvPlcData.DataSource = Config.ConfigManager.Instance.ConfigPlc.PlcDataItems; //List<Config.PlcDataItem> checkItems = this.dgvPlcData.Rows.Cast<DataGridViewRow>().Where // (x => (string)x.Cells["deviceName"].Value == plc.DevName) // .Select(x => x.DataBoundItem).Cast<Config.PlcDataItem>().ToList(); IEnumerable <Config.PlcDataItem> ie = from lst in Config.ConfigManager.Instance.ConfigPlc.PlcDataItems where lst.DeviceName == plc.DevName select lst; List <Config.PlcDataItem> ioLst = ie.Cast <Config.PlcDataItem>().ToList(); this.dgvPlcData.DataSource = ioLst; this.dgvPlcData.Refresh(); this.txtCount.Text = dgvPlcData.Rows.Count.ToString(); } else { //this.dgvPlcData.DataSource = Config.ConfigManager.Instance.ConfigPlc.PlcDataItems; this.txtCount.Text = (dgvPlcData.Rows.Count - 1).ToString(); } }
//modbusRtu write private bool WriteModRtuValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, ModbusRtu mod, object value) { HslCommunication.OperateResult rlt = new HslCommunication.OperateResult(); rlt.IsSuccess = false; try { //string[] strAdrss = plcdata.Address.Split('.'); //string Address = strAdrss[0] + "." + Regex.Replace(strAdrss[1], @"^[A-Za-z]+", string.Empty); if (plctype == null || !plctype.IsConnected || plcdata == null || mod == null) { return(rlt.IsSuccess); } switch (plcdata.DataType) { case Common.DataTypes.Bool: //Bool rlt = mod.WriteCoil(plcdata.Address, Convert.ToBoolean(value)); break; case Common.DataTypes.Short: rlt = mod.Write(plcdata.Address, Convert.ToInt16(value)); break; case Common.DataTypes.Ushort: rlt = mod.Write(plcdata.Address, Convert.ToUInt16(value)); break; case Common.DataTypes.Int: rlt = mod.Write(plcdata.Address, Convert.ToInt32(value)); break; case Common.DataTypes.UInt: rlt = mod.Write(plcdata.Address, Convert.ToUInt32(value)); break; case Common.DataTypes.Long: rlt = mod.Write(plcdata.Address, Convert.ToInt64(value)); break; case Common.DataTypes.ULong: rlt = mod.Write(plcdata.Address, Convert.ToUInt64(value)); break; case Common.DataTypes.Float: rlt = mod.Write(plcdata.Address, float.Parse(value.ToString())); break; case Common.DataTypes.Double: rlt = mod.Write(plcdata.Address, Convert.ToDouble(value)); break; case Common.DataTypes.String: rlt = mod.Write(plcdata.Address, Convert.ToString(value)); break; default: break; } } catch { //MessageBox.Show(ex.Message); } return(rlt.IsSuccess); }
//modbusRtu read private object ReadModRtuValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, ModbusRtu mod) { try { //string[] strAdrss = plcdata.Address.Split('.'); //string Address = strAdrss[0] + "." + Regex.Replace(strAdrss[1], @"^[A-Za-z]+", string.Empty); if (plctype == null || !plctype.IsConnected || plcdata == null || mod == null) { return(null); } switch (plcdata.DataType) { case Common.DataTypes.Bool: //Coil plcdata.ValueNew = mod.ReadCoil(plcdata.Address).Content; break; case Common.DataTypes.Discrete: //Discrete plcdata.ValueNew = mod.ReadDiscrete(plcdata.Address).Content; break; case Common.DataTypes.Short: plcdata.ValueNew = mod.ReadInt16(plcdata.Address).Content; break; case Common.DataTypes.Ushort: plcdata.ValueNew = mod.ReadUInt16(plcdata.Address).Content; break; case Common.DataTypes.Int: plcdata.ValueNew = mod.ReadInt32(plcdata.Address).Content; break; case Common.DataTypes.UInt: plcdata.ValueNew = mod.ReadUInt32(plcdata.Address).Content; break; case Common.DataTypes.Long: plcdata.ValueNew = mod.ReadInt64(plcdata.Address).Content; break; case Common.DataTypes.ULong: plcdata.ValueNew = mod.ReadUInt64(plcdata.Address).Content; break; case Common.DataTypes.Float: plcdata.ValueNew = mod.ReadFloat(plcdata.Address).Content; break; case Common.DataTypes.Double: plcdata.ValueNew = mod.ReadDouble(plcdata.Address).Content; break; case Common.DataTypes.String: plcdata.ValueNew = mod.ReadString(plcdata.Address, 10).Content; break; default: break; } } catch { //MessageBox.Show(ex.Message); } return(plcdata.ValueNew); }
//PLC写入 private bool WriteSieTcpValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, SiemensS7Net plc, object value) { HslCommunication.OperateResult rlt = new HslCommunication.OperateResult(); rlt.IsSuccess = false; try { //string[] strAdrss = plcdata.Address.Split('.'); //string Address = strAdrss[0] + "." + Regex.Replace(strAdrss[1], @"^[A-Za-z]+", string.Empty); if (plctype == null || !plctype.IsConnected || plcdata == null || plc == null) { return(rlt.IsSuccess); } switch (plcdata.DataType) { case Common.DataTypes.Bool: //Bool rlt = plc.Write(plcdata.Address, Convert.ToBoolean(value)); break; case Common.DataTypes.Byte: //Byte rlt = plc.Write(plcdata.Address, Convert.ToChar(value)); break; case Common.DataTypes.Short: rlt = plc.Write(plcdata.Address, Convert.ToInt16(value)); break; case Common.DataTypes.Ushort: rlt = plc.Write(plcdata.Address, Convert.ToUInt16(value)); break; case Common.DataTypes.Int: rlt = plc.Write(plcdata.Address, Convert.ToInt32(value)); break; case Common.DataTypes.UInt: rlt = plc.Write(plcdata.Address, Convert.ToUInt32(value)); break; case Common.DataTypes.Long: long lValue = 0; if (long.TryParse(value.ToString(), out lValue)) { long lValueNew = BpLong.SwapInt64(lValue); rlt = plc.Write(plcdata.Address, lValueNew); } //plc.Write(plcdata.Address, Convert.ToInt64(value)); break; case Common.DataTypes.ULong: rlt = plc.Write(plcdata.Address, Convert.ToUInt64(value)); break; case Common.DataTypes.Float: rlt = plc.Write(plcdata.Address, float.Parse(value.ToString())); break; case Common.DataTypes.Double: rlt = plc.Write(plcdata.Address, Convert.ToDouble(value)); break; case Common.DataTypes.String: if (value != null) { byte[] btValue = System.Text.Encoding.ASCII.GetBytes(value.ToString()); byte[] arrData = new byte[btValue.Length + 2]; arrData[0] = 50; arrData[1] = (byte)btValue.Length; btValue.CopyTo(arrData, 2); rlt = plc.Write(plcdata.Address, arrData); } break; default: break; } } catch { //MessageBox.Show(ex.Message); } return(rlt.IsSuccess); }
//PLC读取 private object ReadSieTcpValue(Config.PlcTypeItem plctype, Config.PlcDataItem plcdata, SiemensS7Net plc) { try { if (plctype == null || !plctype.IsConnected || plcdata == null || plc == null) { return(null); } switch (plcdata.DataType) { case Common.DataTypes.Bool: //Bool plcdata.ValueNew = plc.ReadBool(plcdata.Address).Content; break; case Common.DataTypes.Byte: //Byte plcdata.ValueNew = plc.ReadByte(plcdata.Address).Content; break; case Common.DataTypes.Short: plcdata.ValueNew = plc.ReadInt16(plcdata.Address).Content; break; case Common.DataTypes.Ushort: plcdata.ValueNew = plc.ReadUInt16(plcdata.Address).Content; break; case Common.DataTypes.Int: plcdata.ValueNew = plc.ReadInt32(plcdata.Address).Content; break; case Common.DataTypes.UInt: plcdata.ValueNew = plc.ReadUInt32(plcdata.Address).Content; break; case Common.DataTypes.Long: long lValueNew = 0; if (long.TryParse(plc.ReadInt64(plcdata.Address).Content.ToString(), out lValueNew)) { long temp = BpLong.SwapInt64(lValueNew); plcdata.ValueNew = temp; } // plcdata.ValueNew = plc.ReadInt64(plcdata.Address).Content; break; case Common.DataTypes.ULong: plcdata.ValueNew = plc.ReadUInt64(plcdata.Address).Content; break; case Common.DataTypes.Float: plcdata.ValueNew = plc.ReadFloat(plcdata.Address).Content; break; case Common.DataTypes.Double: plcdata.ValueNew = plc.ReadDouble(plcdata.Address).Content; break; case Common.DataTypes.String: HslCommunication.OperateResult <byte[]> data = (HslCommunication.OperateResult <byte[]>)plc.Read(plcdata.Address, 50); if (data != null && data.Content != null && data.Content.Length > 2) { List <byte> lstData = new List <byte>(); int nLen = data.Content[1]; for (int i = 2; i < nLen + 2; i++) { lstData.Add(data.Content[i]); } plcdata.ValueNew = System.Text.Encoding.ASCII.GetString(lstData.ToArray()); } break; default: break; } } catch { //MessageBox.Show(ex.Message); } return(plcdata.ValueNew); }