//导出枚举 private void btnMj_Click(object sender, EventArgs e) { try { SaveFileDialog save = new SaveFileDialog(); save.Title = "枚举另存"; save.Filter = "txt files (*.txt)|*.txt"; save.FilterIndex = 2; save.RestoreDirectory = true; if (save.ShowDialog() == DialogResult.OK) { string file = save.FileName; save.Dispose(); try { System.IO.File.Delete(file); } catch { } Log.LogWriter.WriteEnum(file, "/// <summary>"); Log.LogWriter.WriteEnum(file, "/// PLC设备枚举"); Log.LogWriter.WriteEnum(file, "/// </summary>"); Log.LogWriter.WriteEnum(file, "public enum PlcDevice"); Log.LogWriter.WriteEnum(file, "{{"); Log.LogWriter.WriteEnum(file, " /// <summary>"); Log.LogWriter.WriteEnum(file, " /// 错误"); Log.LogWriter.WriteEnum(file, " /// </summary>"); Log.LogWriter.WriteEnum(file, " ERROR=-1,"); Log.LogWriter.WriteEnum(file, " "); Log.LogWriter.WriteEnum(file, " /// <summary>"); Log.LogWriter.WriteEnum(file, " /// 空"); Log.LogWriter.WriteEnum(file, " /// </summary>"); Log.LogWriter.WriteEnum(file, " NULL=0,"); Log.LogWriter.WriteEnum(file, " "); for (int i = 0; i < this.dgvPlcData.RowCount; i++) { Config.PlcDataItem o = (Config.PlcDataItem) this.dgvPlcData.Rows[i].DataBoundItem; if (o != null) { Log.LogWriter.WriteEnum(file, " /// <summary>"); Log.LogWriter.WriteEnum(file, " /// {0}", o.Descrip); Log.LogWriter.WriteEnum(file, " /// </summary>"); Log.LogWriter.WriteEnum(file, " {0},", o.ItemName); Log.LogWriter.WriteEnum(file, " "); } } Log.LogWriter.WriteEnum(file, "}}"); System.Threading.Thread.Sleep(100); System.Diagnostics.Process.Start("notepad", file); } } 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); }
/// <summary> /// PLC值改变回调 /// </summary> /// <param name="item"></param> public void PlcValueChange(Config.PlcDataItem item) { //try //{ // business business = SystemHandle.Instance.GetMachineKylin(item.MachineID); // if (business != null) // business.PlcValueChange(item); //} //catch (Exception ex) //{ // Log.LogWriter.WriteException(ex); //} if (PlcValueChangedEvent == null) { return; } Regex regex = new Regex(@"V_[0-9]{2}_TriggerGrab"); if (!regex.IsMatch(item.PlcDevice.ToString())) { return; } // if (regex.IsMatch(item.PlcDevice.ToString())&&(bool)item.ValueNew ==true) if (item.DataType == Common.DataTypes.Short) { short value = (short)item.ValueNew; bool IsOk = true; if (value < 1) { IsOk = false; } else { IsOk = true; } if (IsOk) { PlcValueChangedEvent(item, new object()); } } if (item.DataType == Common.DataTypes.Bool) { bool value = (bool)item.ValueNew; if (value) { PlcValueChangedEvent(item, new object()); } } }
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 { } }
// 读设备的值 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); } }
//PLC数据变化事件回调 public void plc_PropertyChanged(object sender, PropertyChangedEventArgs e) { try { this.Invoke(new EventHandler(delegate { try { if (e.PropertyName == "ValueNew") { Config.PlcDataItem plcdata = (Config.PlcDataItem)sender; dgvPlcData.Refresh(); } } catch { } })); } catch { } }
//添加新行数据 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 btnImport_Click(object sender, EventArgs e) { bool bFindSame = false; for (int i = 0; i < this.plcList.Count; i++) { Config.PlcDataItem plcData = plcList[i]; if (plcData != null) { Config.PlcDataItem replcData = Logic.PlcHandle.Instance.GetPlcDataItem(plcData.ItemName); if (replcData == null) { plcData.IsActive = false; plcData.MachineID = (plcData.MachineID + " ").Substring(0, 2).Trim(); Logic.PlcHandle.Instance.config.PlcDataItems.Add(plcData); } else { bFindSame = false; for (int j = 0; j < Logic.PlcHandle.Instance.config.PlcDataItems.Count; j++) { Config.PlcDataItem di = Logic.PlcHandle.Instance.config.PlcDataItems[j]; if (di.MachineID == plcData.MachineID && di.ItemName == plcData.ItemName && di.DeviceName == plcData.DeviceName && di.Address == plcData.Address && di.DataType == plcData.DataType) { bFindSame = true; break; } } if (!bFindSame) { Logic.PlcHandle.Instance.config.PlcDataItems.Add(plcData); } } } } }
//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); }
public object GetValue(Common.PlcDevice plcDevice) { Config.PlcDataItem devData = this.GetPlcDataItem(plcDevice); return(devData.ValueNew); }
//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); }
//数据匹配 private void btnMatch_Click(object sender, EventArgs e) { try { m_plcDataItem.Clear(); for (int i = 0; i < this.dgvPlcData.RowCount; i++) { Config.PlcDataItem o = (Config.PlcDataItem) this.dgvPlcData.Rows[i].DataBoundItem; if (o != null) { Config.PlcDataItem plc = Logic.PlcHandle.Instance.GetPlcDataItem(o.ItemName); if (plc != null) { try { plc.PlcDevice = (Common.PlcDevice)Enum.Parse(typeof(Common.PlcDevice), plc.ItemName); } catch { m_plcDataItem.Add(plc); } } else { m_plcDataItem.Add(plc); } } } this.dgvPlcData.Refresh(); if (m_plcDataItem.Count > 0) { SaveFileDialog save = new SaveFileDialog(); save.Title = "枚举另存"; save.Filter = "txt files (*.txt)|*.txt"; save.FilterIndex = 2; save.RestoreDirectory = true; if (save.ShowDialog() == DialogResult.OK) { string file = save.FileName; try { System.IO.File.Delete(file); } catch { } Log.LogWriter.WriteEnum(file, "/// <summary>"); Log.LogWriter.WriteEnum(file, "/// PLC设备枚举"); Log.LogWriter.WriteEnum(file, "/// </summary>"); Log.LogWriter.WriteEnum(file, "public enum PlcDevice"); Log.LogWriter.WriteEnum(file, "{{"); for (int i = 0; i < this.m_plcDataItem.Count; i++) { Config.PlcDataItem o = this.m_plcDataItem[i]; if (o != null) { Log.LogWriter.WriteEnum(file, " /// <summary>"); Log.LogWriter.WriteEnum(file, " /// {0}", o.Descrip); Log.LogWriter.WriteEnum(file, " /// </summary>"); Log.LogWriter.WriteEnum(file, " {0},", o.ItemName); Log.LogWriter.WriteEnum(file, " "); } } Log.LogWriter.WriteEnum(file, "}}"); System.Threading.Thread.Sleep(100); System.Diagnostics.Process.Start("notepad", file); m_plcDataItem.Clear(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }