当前位置: 首页 > news >正文

龙岗个性化网站建设价格低小米手机做网站服务器吗

龙岗个性化网站建设价格低,小米手机做网站服务器吗,互联网营销有哪些方式,河南网站建设制作目录 一、西门子PLC仿真环境搭建 【1.1】创建PLC项目 【1.2】编写PLC程序 二、C#代码编写 【2.1】窗口制作 【2.2】效果演示 【2.3】读取源码 【2.4】FrmSiemensSet源码 【2.5】Variable源码 一、西门子PLC仿真环境搭建 【1.1】创建PLC项目 搭建PLCSIM-Advacend模拟仿…目录 一、西门子PLC仿真环境搭建 【1.1】创建PLC项目 【1.2】编写PLC程序 二、C#代码编写 【2.1】窗口制作 【2.2】效果演示 【2.3】读取源码 【2.4】FrmSiemensSet源码 【2.5】Variable源码 一、西门子PLC仿真环境搭建 【1.1】创建PLC项目 搭建PLCSIM-Advacend模拟仿真 设置PLC的IP地址和PLCSIM一致 勾选GET/PUT(如果是S7协议必须勾选)选项 勾选块编译时仿真 创建变量用于测试相关的DB块需要设置为去除优化访问 【1.2】编写PLC程序 【PLC作为服务器】 【Modbus Poll测试】 二、C#代码编写 【2.1】窗口制作 【2.2】效果演示 【2.3】读取源码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; ​ using Approach.DataConvertLib; using Approach.ModbusTCPLib; ​ namespace Approach.ModbusTCP {public partial class FrmSiemens : Form{/// summary/// 【字段】ModbusTCP连接对象/// /summaryprivate ModbusTcp _modbusTcp new ModbusTcp(); ​/// summary/// 【字段】ModbusTCP连接成功标识/// /summaryprivate bool _isConnected false; ​/// summary/// 【字段】多线程取消对象/// /summaryprivate CancellationTokenSource _cts null; ​public FrmSiemens(){InitializeComponent();} ​/// summary/// 【控件事件】建立连接/// /summary/// param namesender/param/// param namee/paramprivate void btn_Connect_Click(object sender, EventArgs e){// 获取UI信息string plcIp txt_Ip.Text.Trim();int plcPort int.Parse(txt_Port.Text.Trim()); ​_isConnected _modbusTcp.Connect(plcIp, plcPort);if (_isConnected true){MessageBox.Show(与西门子PLC连接成功, 连接提示);// 开启线程(创建取消线程对象)_cts new CancellationTokenSource();// 开启线程(创建线程对象)Task.Run(new Action(() {PlcCommunicatin();}), _cts.Token);}else{MessageBox.Show(与西门子PLC连接失败, 连接提示);}} ​/// summary/// 【方法】与PLC进行通信的线程方法/// /summaryprivate void PlcCommunicatin(){// 线程循环执行while(!_cts.IsCancellationRequested){// 通过ModbusTCP读取寄存器信息(PLC发送182字节-读取91个字)byte[] readData _modbusTcp.ReadOutputRegisters(0, 91);// 读取对应的字节个数if(readData ! null readData.Length 182) // 读取成功{// 解析报文跟新UI数据Invoke(new Action(() {UpdateUI(readData, gb_Read);UpdateUI(readData, gb_Write);}));}}} ​/// summary/// 【方法】/// /summary/// param namedata 被处理的数据字节数组 /param/// param nameconrtol 控件对象 /paramprivate void UpdateUI(byte[] data, Control control){if (!control.HasChildren)return; ​// 程序走到这里说明Control控件中包含一个或者多个子控件foreach (var item in control.Controls.OfTypeLabel()){// 排除掉一些标签控件if (item.Tag null || item.Tag.ToString().Length 0)continue;// 程序走到这里说明获取的控件是需要进行操作的控件Variable variable GetVariableByTag(item.Tag.ToString());if (variable ! null){switch (variable.ValueType){case DataType.Bool:{item.BackColor BitLib.GetBitFromByteArray(data, variable.Start, variable.OffsetOrLength) true ? Color.LimeGreen : Color.Red;break;}case DataType.Byte:{item.Text ByteLib.GetByteFromByteArray(data, variable.Start).ToString();break;}case DataType.Short:{item.Text ShortLib.GetShortFromByteArray(data, variable.Start).ToString();break;}case DataType.UShort:{item.Text UShortLib.GetUShortFromByteArray(data, variable.Start).ToString();break;}case DataType.Int:{item.Text IntLib.GetIntFromByteArray(data, variable.Start).ToString();break;}case DataType.UInt:{item.Text UIntLib.GetUIntFromByteArray(data, variable.Start).ToString();break;}case DataType.Float:{item.Text FloatLib.GetFloatFromByteArray(data, variable.Start).ToString();break;}case DataType.Double:{item.Text DoubleLib.GetDoubleFromByteArray(data, variable.Start).ToString();break;}case DataType.Long:{item.Text LongLib.GetLongFromByteArray(data, variable.Start).ToString();break;}case DataType.ULong:{item.Text ULongLib.GetULongFromByteArray(data, variable.Start).ToString();break;}case DataType.String:{item.Text StringLib.GetSiemensStringFromByteArray(data, variable.Start, variable.OffsetOrLength);break;}}}}} ​/// summary/// 【方法】解析Lable-Tag的内容将其转换为Variable这个类/// /summary/// param nametagText/param/// returns/returnsprivate Variable GetVariableByTag(string tagText){if (!tagText.Contains(;))return null; ​// 程序走到这里说明该控件Tag内容是可以解析的string[] values tagText.Split(;); // 分割字符串if (values.Length ! 3)return null; ​try{return new Variable(){ValueType (DataType)Convert.ToInt32(values[0]),Start Convert.ToInt32(values[1]),OffsetOrLength Convert.ToInt32(values[2])};}catch (Exception){return null;}} ​/// summary/// 【控件事件】断开连接/// /summary/// param namesender/param/// param namee/paramprivate void btn_DisConnect_Click(object sender, EventArgs e){if (_isConnected true){_modbusTcp.DisConnect();}} ​/// summary/// 【控件事件】双击Label控件弹出数据修改对话框/// /summary/// param namesender/param/// param namee/paramprivate void CommonModify_DoubleClick(object sender, EventArgs e){if(sender is Label label){if (label.Tag null || label.Tag.ToString().Length 0)return; ​// 程序走到这里说明Label的Tag的值可以解析// 获取源值string srcValue label.Text;// 获取Variable对象Variable variable GetVariableByTag(label.Tag.ToString());FrmSiemensSet frmSiemensSet new FrmSiemensSet(srcValue, variable, _modbusTcp);frmSiemensSet.ShowDialog();}}} } 【2.4】FrmSiemensSet源码 using Approach.DataConvertLib; using Approach.ModbusTCPLib; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; ​ namespace Approach.ModbusTCP {public partial class FrmSiemensSet : Form{private Variable _variable null;private ModbusTcp _modbusTcp null; ​public FrmSiemensSet(string srcValue, Variable variable, ModbusTcp modbusTcp){InitializeComponent();lbl_SrcValue.Text srcValue;lbl_ValueType.Text variable.ValueType.ToString(); ​_variable variable;_modbusTcp modbusTcp;} ​ ​ ​private void btn_Ok_Click(object sender, EventArgs e){bool bResult false;try{switch (_variable.ValueType){case DataType.Short:{bResult _modbusTcp.PreSetSingleRegister((ushort)(_variable.Start / 2), Convert.ToInt16(txt_SetValue.Text.Trim()));break;}case DataType.UShort:{bResult _modbusTcp.PreSetSingleRegister((ushort)(_variable.Start / 2), Convert.ToInt16(txt_SetValue.Text.Trim()));break;}case DataType.Int:{bResult _modbusTcp.PreSetMultiRegisters((ushort)(_variable.Start / 2), ByteArrayLib.GetByteArrayFromInt(Convert.ToInt32(txt_SetValue.Text.Trim())));break;}case DataType.UInt:{bResult _modbusTcp.PreSetMultiRegisters((ushort)(_variable.Start / 2), ByteArrayLib.GetByteArrayFromUInt(Convert.ToUInt32(txt_SetValue.Text.Trim())));break;}case DataType.Float:{bResult _modbusTcp.PreSetMultiRegisters((ushort)(_variable.Start / 2), ByteArrayLib.GetByteArrayFromFloat(Convert.ToSingle(txt_SetValue.Text.Trim())));break;}case DataType.Double:{bResult _modbusTcp.PreSetMultiRegisters((ushort)(_variable.Start / 2), ByteArrayLib.GetByteArrayFromDouble(Convert.ToDouble(txt_SetValue.Text.Trim())));break;}case DataType.Long:{bResult _modbusTcp.PreSetMultiRegisters((ushort)(_variable.Start / 2), ByteArrayLib.GetByteArrayFromLong(Convert.ToInt64(txt_SetValue.Text.Trim())));break;}case DataType.ULong:{bResult _modbusTcp.PreSetMultiRegisters((ushort)(_variable.Start / 2), ByteArrayLib.GetByteArrayFromULong(Convert.ToUInt64(txt_SetValue.Text.Trim())));break;}case DataType.String:{bResult _modbusTcp.PreSetMultiRegisters((ushort)(_variable.Start / 2), ByteArrayLib.GetByteArrayFromSiemensString(txt_SetValue.Text.Trim()));break;}default:{MessageBox.Show(不支持该数据类型写入, 参数设置);return;}}}catch(Exception ex){MessageBox.Show(请检查参数数据类型是否正确 ex.Message, 参数设置);return;} ​if (bResult true){this.DialogResult DialogResult.OK;}}private void btn_Cancel_Click(object sender, EventArgs e){this.DialogResult DialogResult.Cancel;} ​private void FrmSiemensSet_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode Keys.Enter)btn_Ok_Click(null, null);}} } 【2.5】Variable源码 using Approach.DataConvertLib; using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; ​ namespace Approach.ModbusTCP {/// summary/// 变量实体类封装/// /summarypublic class Variable{/// summary/// 标签名称/// /summarypublic string ValueName { get; set; } ​/// summary/// 起始字节/// /summarypublic int Start { get; set; } ​/// summary/// 数据类型/// /summarypublic DataType ValueType { get; set; } ​/// summary/// (位偏移)或(字符串)长度/// /summarypublic int OffsetOrLength { get; set; } ​/// summary/// 变量实际值/// /summarypublic object Value { get; set; }} }
http://www.dnsts.com.cn/news/203394.html

相关文章:

  • 深圳做网站de公司typecho还是WordPress
  • 四川建设厅特种工报名网站天眼查企业查询在线官网
  • WordPress添加进度条哪家公司做推广优化好
  • wordpress网站地图网站对于企业的作用
  • 开通企业网站南宁seo排名优化
  • 深圳医疗网站建设公司seo厂家费用低
  • 建设银行网站每天几点更新基于php旅游网站开发源代码
  • 西安网站建设麦欧科技域名大全免费查询
  • seo网站优化策划书东莞招聘网哪个平台比较好
  • 做国内贸易的网站企业文化墙内容设计
  • 电子商务网站开发 ppt网站设计公司长沙
  • 漳州最专业的网站建设门户网站建设开发
  • 网站建设样板sem是什么工作
  • 图书网站开发背景怎样制作免费网页
  • 沈阳做网站 智域电子商务网站建设交印花税吗
  • 中国矿井建设相关媒体网站义乌论坛
  • 网站 模板 下载网站设计苏州
  • 做网站的哪个好wordpress不同分类模板
  • wordpress关闭网站百度怎么精准搜索
  • 网站建设应注意的问题有哪些wordpress 全部文章
  • 阿里云建设网站要什么给个网站能用的2022
  • 龙之向导外贸网站怎么样网站代码在线优化
  • 私募基金网站建设要求公司申请网站建设
  • 阿里云多网站建设上海最新发布最新
  • 免费制作个人网站rewrite wordpress
  • 阿里巴巴做网站的沧州品牌网站建设
  • 在后台怎么做网站内链建设个人网站刷
  • wordpress网站添加阅读全文合肥网站seo报价
  • 前端直播网站怎么做wordpress3.1.3漏洞
  • 做车贴网站宁波城乡建设网站