实例介绍
【实例简介】可以用来与PLC通讯,采集PLC的数据
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.Text; using HslCommunication.Profinet.Siemens; using HslCommunication; using MySql.Data; using MySql.Data.MySqlClient; namespace PLCRead { class Storage { MySqlConnection conn; SiemensS7Net siemensTcpNet; #region bool bool_I0; // 读取I0.0的值 bool bool_I1; // 读取I0.1的值 bool bool_I2; // 读取I0.2的值 bool bool_I3; // 读取I0.3的值 bool bool_I4; // 读取I0.4的值 bool bool_I5 ; // 读取I0.5的值 bool bool_I6 ; // 读取I0.6的值 bool bool_I7; // 读取I0.7的值 bool bool_Q0; // 读取Q0.0的值 bool bool_Q1; // 读取Q0.1的值 bool bool_Q2; // 读取Q0.2的值 bool bool_Q3; // 读取Q0.3的值 bool bool_Q4; // 读取Q0.4的值 bool bool_Q5 ; // 读取Q0.5的值 bool bool_Q6 ; // 读取Q0.6的值 bool bool_Q7 ; // 读取Q0.7的值 #endregion #region 采集LED灯的状态 int returnvalue_1;//读取returnvalue_1的值 int returnvalue_2;//读取returnvalue_2的值 int returnvalue_3;//读取returnvalue_3的值 int returnvalue_4 ;//读取returnvalue_4的值 int returnvalue_5;//读取returnvalue_5的值 int returnvalue_6;//读取returnvalue_6的值 #endregion OperateResult<string> read; #region 将采集的信息上传到Mysql //上传IO口的数据 bool[] a; string[] c; //上传led的状态数据 int[] b; string[]d; //上传PLC的基本信息 string[] e; string[] f; //上传各表的ID值 int[] g; string[] h; #endregion public Storage(MySqlConnection connection, SiemensS7Net siemensPlc) { conn = connection; siemensTcpNet = siemensPlc; #region 采集IO口的数据 bool_I0 = siemensTcpNet.ReadBool("I0.0").Content; // 读取I0.0的值 bool_I1 = siemensTcpNet.ReadBool("I0.1").Content; // 读取I0.1的值 bool_I2 = siemensTcpNet.ReadBool("I0.2").Content; // 读取I0.2的值 bool_I3 = siemensTcpNet.ReadBool("I0.3").Content; // 读取I0.3的值 bool_I4 = siemensTcpNet.ReadBool("I0.4").Content; // 读取I0.4的值 bool_I5 = siemensTcpNet.ReadBool("I0.5").Content; // 读取I0.5的值 bool_I6 = siemensTcpNet.ReadBool("I0.6").Content; // 读取I0.6的值 bool_I7 = siemensTcpNet.ReadBool("I0.7").Content; // 读取I0.7的值 bool_Q0 = siemensTcpNet.ReadBool("Q0.0").Content; // 读取Q0.0的值 bool_Q1 = siemensTcpNet.ReadBool("Q0.1").Content; // 读取Q0.1的值 bool_Q2 = siemensTcpNet.ReadBool("Q0.2").Content; // 读取Q0.2的值 bool_Q3 = siemensTcpNet.ReadBool("Q0.3").Content; // 读取Q0.3的值 bool_Q4 = siemensTcpNet.ReadBool("Q0.4").Content; // 读取Q0.4的值 bool_Q5 = siemensTcpNet.ReadBool("Q0.5").Content; // 读取Q0.5的值 bool_Q6 = siemensTcpNet.ReadBool("Q0.6").Content; // 读取Q0.6的值 bool_Q7 = siemensTcpNet.ReadBool("Q0.7").Content; // 读取Q0.7的值 #endregion #region 采集LED灯的状态 returnvalue_1 = siemensTcpNet.ReadInt16("DB1.14").Content;//读取returnvalue_1的值 returnvalue_2 = siemensTcpNet.ReadInt16("DB1.16").Content;//读取returnvalue_2的值 returnvalue_3 = siemensTcpNet.ReadInt16("DB1.18").Content;//读取returnvalue_3的值 returnvalue_4 = siemensTcpNet.ReadInt16("DB1.20").Content;//读取returnvalue_4的值 returnvalue_5 = siemensTcpNet.ReadInt16("DB1.22").Content;//读取returnvalue_5的值 returnvalue_6 = siemensTcpNet.ReadInt16("DB1.24").Content;//读取returnvalue_6的值 #endregion #region 采集plc 的基本信息 read = siemensTcpNet.ReadOrderNumber(); #endregion #region 将采集的信息上传到Mysql //上传IO口的数据 a = new bool[] { bool_I0, bool_I1, bool_I2, bool_I3, bool_I4, bool_I5, bool_I6, bool_I7, bool_Q0, bool_Q1, bool_Q2, bool_Q3, bool_Q4, bool_Q5, bool_Q6, bool_Q7 }; c = new string[] { "I0_0", "I0_1", "I0_2", "I0_3", "I0_4", "I0_5", "I0_6", "I0_7", "Q0_0", "Q0_1", "Q0_2", "Q0_3", "Q0_4", "Q0_5", "Q0_6", "Q0_7", "time" }; //上传led的状态数据 b = new int[] { returnvalue_1, returnvalue_2, returnvalue_3, returnvalue_4, returnvalue_5, returnvalue_6 }; d = new string[] { "return_led_value_1", "return_led_value_2", "return_led_value_3", "return_led_value_4", "return_led_value_5", "return_led_value_6", "time" }; //上传PLC的基本信息 e = new string[] { read.Content, "siemens", "S7-1200", "1", "tqr" }; f = new string[] { "plc_num", "plc_brand", "plc_type", "embed_sys_id", "last_operate_name", "last_operate_time" }; //上传各表的ID值 } //增加时间戳 public void Save() { DateTime[] date = { DateTime.Now }; test2<bool, DateTime>(conn, "plc_io", c, a, date); int plc_io_id = Convert.ToInt32(GetID(conn)); test2<int, DateTime>(conn, "plc_led_state", d, b, date); int plc_led_id = Convert.ToInt32(GetID(conn)); test2<string, DateTime>(conn, "plc_info", f, e, date); int plc_info_id = Convert.ToInt32(GetID(conn)); g = new int[] { plc_info_id, plc_io_id, plc_led_id }; h = new string[] { "plc_id", "plc_io_id", "plc_led_state_id", "col_time" }; test2<int, DateTime>(conn, "plc_data_bom", h, g, date); } //一种不同类型的参数存入Mysql public void test1<T1>(MySqlConnection conn, string table, string[] name, T1[] data1) { string strname1 = name[0]; string strname2 = "@" name[0]; for (int i = 1; i < name.Length; i ) { strname1 = "," name[i]; strname2 = "," "@" name[i]; } string sql = " insert into" "\t" table "(" strname1 ") values(" strname2 ")"; try { MySqlCommand cmd = new MySqlCommand(sql, conn); int count = 0; for (; count < data1.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data1[count]); } int result = cmd.ExecuteNonQuery(); Console.WriteLine(table "数据增加成功"); } catch { Console.WriteLine(table "数据增加失败"); } return; } //两种不同类型的参数存入Mysql public void test2<T1, T2>(MySqlConnection conn, string table, string[] name, T1[] data1, T2[] data2) { string strname1 = name[0]; string strname2 = "@" name[0]; for (int i = 1; i < name.Length; i ) { strname1 = "," name[i]; strname2 = "," "@" name[i]; } string sql = " insert into" "\t" table "(" strname1 ") values(" strname2 ")"; try { MySqlCommand cmd = new MySqlCommand(sql, conn); int count = 0; for (; count < data1.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data1[count]); } for (; count < data1.Length data2.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data2[count - data1.Length]); } int result = cmd.ExecuteNonQuery(); Console.WriteLine(table "数据增加成功"); } catch { Console.WriteLine(table "数据增加失败"); } return; } //三种不同类型的参数存入Mysql public void test3<T1, T2, T3>(MySqlConnection conn, string table, string[] name, T1[] data1, T2[] data2, T3[] data3) { string strname1 = name[0]; string strname2 = "@" name[0]; for (int i = 1; i < name.Length; i ) { strname1 = "," name[i]; strname2 = "," "@" name[i]; } string sql = " insert into" "\t" table "(" strname1 ") values(" strname2 ")"; try { MySqlCommand cmd = new MySqlCommand(sql, conn); int count = 0; for (; count < data1.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data1[count]); } for (; count < data1.Length data2.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data2[count - data1.Length]); } int result = cmd.ExecuteNonQuery(); Console.WriteLine(table "数据增加成功"); } catch { Console.WriteLine(table "数据增加失败"); } return; } //四种不同类型的参数存入Mysql public void test4<T1, T2, T3, T4>(MySqlConnection conn, string table, string[] name, T1[] data1, T2[] data2, T3[] data3, T4[] data4) { string strname1 = name[0]; string strname2 = "@" name[0]; for (int i = 1; i < name.Length; i ) { strname1 = "," name[i]; strname2 = "," "@" name[i]; } string sql = " insert into" "\t" table "(" strname1 ") values(" strname2 ")"; try { MySqlCommand cmd = new MySqlCommand(sql, conn); int count = 0; for (; count < data1.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data1[count]); } for (; count < data1.Length data2.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data2[count - data1.Length]); } for (; count < data1.Length data2.Length data3.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data3[count - data1.Length - data2.Length]); } for (; count < data1.Length data2.Length data3.Length data4.Length; count ) { cmd.Parameters.AddWithValue("@" name[count], data4[count - data1.Length - data2.Length - data3.Length]); } int result = cmd.ExecuteNonQuery(); Console.WriteLine(table "数据增加成功"); } catch { Console.WriteLine(table "数据增加失败"); } return; } //获取每个表的ID public object GetID(MySqlConnection conn) { string sql = "select LAST_INSERT_ID()"; try { MySqlCommand cmd = new MySqlCommand(sql, conn); object id = cmd.ExecuteScalar(); Console.WriteLine("获取ID成功" id); return id; } catch { Console.WriteLine("获取ID失败"); return 0; } } } } #endregion
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论