S7DB类型

DataType:

  • 0x01 - BIT
  • :一个无符号的bit
  • 0x02 - BYTE
  • :一个8位的数字
  • 0x03 - CHAR
  • :一个字符
  • 0x04 - WORD
  • :两个字节宽的无符号整数
  • 0x05 - INT
  • :两个字节宽的有符号整数。
  • 0x06 - DWORD
  • :四字节宽的无符号整数
  • 0x07 - DINT
  • :四字节宽的有符号整数
  • 0x08 - REAL
  • :四个字节宽的IEEE浮点数
  • 0x1c - COUNTER
  • :PLC程序计数器使用的计数器类型

西门子

 以下代码供参考,不保证能够正常编译。

using System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions;public static class SiemensTypeHelper{public static void Parse(string input, out SiemensArea dataType, out int dbNumber, out SiemensVarType varType, out int address, out int bitNumber,out object defaultvalue){bitNumber = -1;dbNumber = 0;defaultvalue = 0;switch (input.Substring(0, 2)){case "DB":string[] strings = input.Split(new char[] { '.' });if (strings.Length < 2)throw new InvalidAddressException("To few periods for DB address");var pos = GetNumPosition(strings[1]);dataType = SiemensArea.DataBlock;dbNumber = int.Parse(strings[0].Substring(2));address = int.Parse(strings[1].Substring(pos));string dbType = strings[1].Substring(0, pos);switch (dbType){case "DBB":case "BYTE":varType = SiemensVarType.Byte;defaultvalue = 0;return;case "WORD":case "DBW":varType = SiemensVarType.Word;defaultvalue = 0;return;case "DINT":varType = SiemensVarType.DInt;defaultvalue = 0;return;case "DWORD":case "DBE":varType = SiemensVarType.DWord;defaultvalue = 0;return;case "INT":case "SHORT":case "DBI":varType = SiemensVarType.Int;defaultvalue = 0;return;case "REAL":case "DBR":varType = SiemensVarType.Real;defaultvalue = 0;return;case "STRING":case "DBS":varType = SiemensVarType.String;defaultvalue = "";return;case "BOOLEAN":case "DBX":bitNumber = int.Parse(strings[2]);if (bitNumber > 7)throw new InvalidAddressException("Bit can only be 0-7");varType = SiemensVarType.Bit;defaultvalue = 0;return;default:throw new InvalidAddressException();}case "EB":// Input bytedataType = SiemensArea.Input;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.Byte;defaultvalue = 0;return;case "EW":// Input worddataType = SiemensArea.Input;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.Word;defaultvalue = 0;return;case "ED":// Input double-worddataType = SiemensArea.Input;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.DWord;defaultvalue = 0;return;case "AB":// Output bytedataType = SiemensArea.Output;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.Byte;defaultvalue = 0;return;case "AW":// Output worddataType = SiemensArea.Output;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.Word;defaultvalue = 0;return;case "AD":// Output double-worddataType = SiemensArea.Output;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.DWord;defaultvalue = 0;return;case "MB":// Memory bytedataType = SiemensArea.Memory;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.Byte;defaultvalue = 0;return;case "MW":// Memory worddataType = SiemensArea.Memory;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.Word;defaultvalue = 0;return;case "MD":// Memory double-worddataType = SiemensArea.Memory;dbNumber = 0;address = int.Parse(input.Substring(2));varType = SiemensVarType.DWord;defaultvalue = 0;return;default:switch (input.Substring(0, 1)){case "E":case "I":// InputdataType = SiemensArea.Input;varType = SiemensVarType.Bit;break;case "A":case "O":// OutputdataType = SiemensArea.Output;varType = SiemensVarType.Bit;break;case "M":// MemorydataType = SiemensArea.Memory;varType = SiemensVarType.Byte;break;case "T":// TimerdataType = SiemensArea.Timer;dbNumber = 0;address = int.Parse(input.Substring(1));varType = SiemensVarType.Timer;return;case "Z":case "C":// CounterdataType = SiemensArea.Timer;dbNumber = 0;address = int.Parse(input.Substring(1));varType = SiemensVarType.Counter;return;default:throw new InvalidAddressException(string.Format("{0} is not a valid address", input.Substring(0, 1)));}string txt2 = input.Substring(1);if (txt2.IndexOf(".") == -1)throw new InvalidAddressException("To few periods for DB address");address = int.Parse(txt2.Substring(0, txt2.IndexOf(".")));bitNumber = int.Parse(txt2.Substring(txt2.IndexOf(".") + 1));if (bitNumber > 7)throw new InvalidAddressException("Bit can only be 0-7");return;}}private static int GetNumPosition(string str){var regex = new Regex(@"\d");return regex.Match(str).Index;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA 黑色主题很难看到鼠标

“控制面板”—搜索“鼠标”关键字—选择“更改鼠标设置” 参考&#xff1a; IDEA 黑色主题很难看到鼠标

JDBC常见的几种连接池使用(C3PO、Druid、HikariCP 、DBCP)

✨前言✨ 本篇作为主要在于介绍jdbc数据库连接池&#xff0c;以及多种连接池的用法 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 文章目…

计算机基础:网络基础

目录 一.网线制作 1.制作所需要工具 网线制作标准 ​编辑 2.水晶头使用 3.网线钳使用 4.视频教学 二.集线器、交换机介绍 1.OSI七层模型 2.TCP/IP四层参考模型 3.集线器、交换机。路由器介绍 集线器 交换机 路由器 区别 三.路由器的配置 1.路由器设置 说明书 设…

智能优化算法应用:基于水基湍流算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于水基湍流算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于水基湍流算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.水基湍流算法4.实验参数设定5.算法结果6.…

ansible剧本playbook

Palybook组层部分 tasks 任务包含要在目标主机上执行的操作&#xff0c;使用模块定义这些操作&#xff0c;每个任务都是一个模块的调用variables变量:存储和传递数据&#xff0c;变量可以自定义&#xff0c;可以在palybook当中定义为全局变量&#xff0c;也可以在外部传参temp…

Python:正则表达式---贪婪匹配

在正则表达式中&#xff0c;贪婪匹配是指匹配尽可能多的字符&#xff0c;而非贪婪匹配&#xff08;也称为懒惰匹配或最小匹配&#xff09;则是匹配尽可能少的字符。 .* 表示匹配任意数量的任意字符&#xff08;除换行符外&#xff09;。贪婪匹配会将尽可能多的字符都作为匹配结…

macOS 安装 oh-my-zsh 后 node 报错 command not found : node

最近为了让终端中显示 git 分支的名称&#xff0c;安装了 oh-my-zsh &#xff0c;安装之后呢&#xff0c;我原先安装的 Volta、 node 都没法用了&#xff0c;报错如下&#xff1a; 这时候粗略判断应该是系统变量出了问题&#xff0c;oh-my-zsh 的变量文件是 ~/.zshrc&#xff0…

变分自动编码器【03/3】:使用 Docker 和 Bash 脚本进行超参数调整

一、说明 在深入研究第 1 部分中的介绍和实现&#xff0c;并在第 2 部分中探索训练过程之后&#xff0c;我们现在将重点转向在第 3 部分中通过超参数调整来优化模型的性能。要访问本系列的完整代码&#xff0c;请访问我们的 GitHub 存储库在GitHub - asokraju/ImageAutoEncoder…

Linux(二)常用命令

文章目录 一、文件管理命令1.1 chmod1.2 chown1.3 cat1.4 cp1.5 find1.6 head1.7 tail1.8 less1.9 more1.10 mv1.11 rm1.12 touch1.13 vim1.14 >和>>1.15 scp1.16 ln1.17 怎么用命令查看日志 二、文档管理命令2.1 grep2.2 wc2.3 echo 三、磁盘管理命令3.1 cd3.2 df3.3…

短视频账号矩阵系统3年独立开发正规接口源码搭建部署开发

一、矩阵系统源码主要有三种框架&#xff1a; 短视频账号矩阵源码的框架有很多种&#xff0c;以下列举其中几种&#xff1a; 1. **星图矩阵**&#xff1a;星图矩阵是抖音官方向商家提供的短视频广告推广平台&#xff0c;是抖音官方的赚钱工具。商家可利用星图矩阵进行广告推广…

适用于车载电动升窗器的解决方案

升窗器是指避免车主忘记关窗的自动关窗装置&#xff0c;主要通过电子模块加认组合&#xff0c;利用主机上的芯片里面设定的程序完成检测功能&#xff0c;使自动升窗步骤顺利完成。 ■ 基于ACM32F403系列MCU ■ 高性价比软件控制方案&#xff0c;高算力 ■ MCU内置2路CAN总线&a…

为什么项目管理工具需要项目财务信息?

在讨论项目时&#xff0c;钱是绕不开的话题。 资金是项目管理中最重要的因素之一&#xff0c;与范围和时间并列&#xff0c;三者共同构成了 “三重约束”。例如&#xff0c;如果缩短项目时间&#xff0c;就必须增加成本。 如果无法清楚了解开支及其对项目的影响&#xff08;反…

Python接口自动化测试:断言封装详解

前言 在进行API接口测试时&#xff0c;断言起着至关重要的作用。断言是用于验证预期结果与实际结果是否一致的过程。在Python中&#xff0c;我们可以利用一些库来实现断言功能。 1. 安装必要的库 在Python中&#xff0c;我们主要会使用两个库&#xff1a;requests和jsonpath…

基于 SOAP 的 Web 服务 是什么服务

基于 SOAP 的 Web 服务是一种网络服务&#xff0c;它使用简单对象访问协议&#xff08;SOAP&#xff09;作为通信协议。SOAP 是一种基于 XML 的协议&#xff0c;用于在网络上交换结构化信息。基于 SOAP 的 Web 服务通常用于实现跨网络的远程过程调用&#xff08;RPC&#xff09…

红队打靶练习:WINTERMUTE: 1

前言 网络扫描&#xff08;Nmap、netdiscover&#xff09; HTTP 服务枚举 使用电子邮件日志文件在浏览器中进行目录遍历 利用 SMTP RCPT 选项中的操作系统命令注入 生成 PHP 后门 (Msfvenom) 执行RCPT选项中嵌入的后门 反向连接&#xff08;Metasploit&#xff09; 导入 pytho…

音频文件合成

音频文件合成 音频文件合成 http://ffmpeg.org/download.html https://blog.csdn.net/u013314786/article/details/89682800 http://www.360doc.com/content/19/0317/01/10519289_822112563.shtml https://chaijunkun.blog.csdn.net/article/details/116491526?spm1001.210…

Java中List相关操作

1、中文排序 // 升序(注意&#xff1a;是根据的汉字的拼音的字母排序的&#xff0c;而不是根据汉字一般的排序方法) Collections.sort(list, Collator.getInstance(java.util.Locale.CHINA)); // 降序 Collections.reverse(list);2、字符串排序 ->1.8 // 正序 list.stream…

Poi实现复杂Excel导出,理解POI操作Excel思路!!!

前言 对于简单excel报表导出&#xff0c;有很多简单的工具如easypoi&#xff0c;而且现在网上已经有很多工具类整合easypoi使用起来非常方便。但是简单的弊端往往无法适配一些负责场景&#xff0c;而我们实际生产中面临的都是客户自定以的一个负责报表导出&#xff0c;这是利用…

python中字典应用场景

Python中的字典&#xff08;Dictionary&#xff09;是一种无序的键值对集合&#xff0c;它提供了一种灵活的方式来存储和访问数据。字典在许多应用场景下都非常有用&#xff0c;以下是一些常见的应用场景&#xff1a; 存储和检索数据&#xff1a; 字典是一种通过键来检索值的数…

ngrok编译

ngrok编译 安装golang 官方golang安装文档&#xff1a;https://golang.google.cn/doc/install 配置国内源 go env -w GOPROXYhttps://goproxy.cn,direct关掉GO111MODULE go env -w GO111MODULEoff 配置访问github proxy_host$1 # 192.168.126.173 proxy_port$1 # 7890 exp…