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

网站建设与研发深圳网络营销推广中心

网站建设与研发,深圳网络营销推广中心,网站制作中的更多怎么做,校园门户网站 建设开发平台:Unity 2021 依赖DLL:S7.NET 编程语言:CSharp 6.0 以上   一、前言 Unity 涉及应用行业广泛。在工业方向有着一定方向的涉足与深入。除构建数据看板等内容,也会有模拟物理设备进行虚拟孪生的需求需要解决。而 SIMATIC&a…

开发平台:Unity 2021
依赖DLL:S7.NET
编程语言:CSharp 6.0 以上

一、前言


  Unity 涉及应用行业广泛。在工业方向有着一定方向的涉足与深入。除构建数据看板等内容,也会有模拟物理设备进行虚拟孪生的需求需要解决。而 SIMATIC(西门子)作为工业通讯其一,需要了解如何在 CSharp 中实现通讯是本文章所关注的重点。

二、了解 | 依赖库对象:S7.NET


在这里插入图片描述


限制:限定在 Unity CSharp 配置 2.0 Framework 下运行。
下载链接:GitHub-S7.NET
开发文档:WiKi-S7.NET

  对于 Unity 来说,引用 S7.NET 方法需要将 S7.NET.DLL 或 DLL内所有程序文件导入至 Unity Assets 目录下才可使用。如上图所示:我们仅需要将 S7.NET 文件夹 导入至 Unity 即可。或是生成 S7.NET.DLL 导入目录下 Plugins 文件夹下。

三、了解 | PLC DB数据库


在这里插入图片描述

  PLC DB数据库根据 “数据库 - 数据类型 - 数据偏移量” 进行数据写入或读取。这种描述或有些抽象,以 S7.NET 读取单个示例数据。例如上图红框:获取 PLC数据 [DB160] 下的 Int 数据类型、便宜量为 104.0 的数据。

PLC.Read("DB160.DBW104.0");
  1. 获取 DB库 始终坚持 “DB” + 库编号
  2. 获取 偏移量值,始终坚持 “DB” + 数据类型 + 偏移量值
    在这里插入图片描述
    需注意:S7中所使用 PLC.Read(string content) 读取值默认为 10 进制

  而对于一些数据本身大的情况,部分负责数据的PLC工程师会选择拆分数据进行分批存储。例如:Real 数据类似于 CSharp 中 float 精度数据类。

  • 在 Unity 开发中,涉及精度的数据(如位移、旋转轴数据),常见会被拆分为高低位的 16进制 存储。

四、关于不建议使用 Read 方式进行数据读取


  剖析 PLC.Read(string plc) 可了解其根据字符串组合内容创建一个 DataItem 对象,用于 PLC DB块数据访问。注意:是创建。每次定时请求必须有创建局部变量后才可访问。从高频读取为前提,是不可取且随这使用的 string plc 量增加下,出现读取延时等情况。

public override void OnUpdateData()
{Data.J1 = float.Parse($"{PLC.Read("DB110.DBW20.0")}");Data.J2 = float.Parse($"{PLC.Read("DB110.DBW22.0")}");Data.J3 = float.Parse($"{PLC.Read("DB110.DBW24.0")}");Data.J4 = float.Parse($"{PLC.Read("DB110.DBW26.0")}");	Data.机械夹爪原位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW100.0"), 1);Data.机械夹爪动位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW110.0"), 7);Data.顶升气缸原位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW100.0"), 2); Data.顶升气缸东位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW100.0"), 3); Data.滚筒进料阻挡原位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW110.0"), 2); Data.滚筒进料阻挡动位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW110.0"), 4);//.....更多其他数据
}

  历史记忆最清楚的是一台底盖安装机的机械轴有 4轴轴值数据、机械夹爪状态数据、皮带状态数据、顶升|阻挡气缸等其他部件数据。在同步机械轴数据上本应按照 100ms 一次更新下,在13台设备的同步请求 PLC DB数据下,出现 7s 完成一次数据请求的情况,显然 PLC读取出现阻塞情况。(在设计上使用多线程请求数据,在多线程优化上对于我来说是捉襟见肘)

  于是,考虑到每次请求中,存在相同 DB 块偏移量数据的请求,我建立了局部变量读取。例如:

public override void OnUpdateData()
{var theDB20 = PLC.Read("DB110.DBW20.0");var theDB22 = PLC.Read("DB110.DBW22.0");//...var theDB100 = PLC.Read("DB110.DBW100.0");Data.J1 = float.Parse($"{theDB20}");//...Data.顶升气缸原位 = ConvertUtils.GetBool(theDB100, 2); Data.顶升气缸东位 = ConvertUtils.GetBool(theDB100, 3); //...
}
  • 在使用局部变量作为替代使得13台设备全运行下的更新频率由 7s 缩减至 3 - 4s。针对不同规模的工程,其频率变化程度不一,但相较于反复使用 PLC.Read(string plc) 有明显的提升。但本质上依然未达到即时的目标。

  所以,认识 PLC.Read(string plc) 的字符串解析规则是必然的。透过源码,可了解其最终被解析为 DataItem 的数据类用以请求。而参考 PLC WIKI文档可了解 PLC.ReadMultibleVars(List<DataItem> data) 的方法,其用于获取一个 DB块 下指定偏移量数据。一次访问获取所有数据比多次访问获取多数据明显压力上更低,更适用。因此结合 PLC.Read(string plc) 创建DataItem实例。使用静态字段与属性替代 string 访问DB是最优解(目前)

private static DataItem VarDB20 = new DataItem()
{DataType = DataType.DataBlock,VarType = VarType.Bit,DB = 110,StartByteAdr = 20,BitAdr = 0,Count = 1,Value = new object()
};public static List<DataItem> Datas = new List<DataItem>() { VarDB20 }
  • DataType.DataBlock:PLC 连接数据类为 DB块
  • VarType:数据类型。参考 “DBW” “DBB” “DBX” “DBD”
  • DB:DB块号。例如 “DB110.DBW20.0” 指向 110 BD块
  • StartByteAdr :偏移量。例如 “DB110.DBW20.0” 指向 20 偏移量(20.0 中小数点前20)
  • BitAdr :地址。例如 “DB110.DBW20.0” 指向 0 偏移量(20.0 中小数点后0)
  • Count:取数(默认为1即可,除非有特殊说明)
  • Value:存放 PLC 中读取或将写入的数据值。(十进制)
public override void OnUpdateData()
{PLC.ReadMultibleVars(Datas);Data.J1 = float.Parse($"{VarDB20.Value}");//...Data.顶升气缸原位 = ConvertUtils.GetBool(VarDB100.Value, 2); Data.顶升气缸东位 = ConvertUtils.GetBool(VarDB100.Value, 3); //...
}

  在优化使用 PLC.ReadMultibleVars(List<DataItem> data) 的情况下,读取压力再次降低,使得实际机械轴模拟表现几乎与实际表现无延迟。注意:在数据均指向同一 DB块 下,使用该方法读写最优(目前)。

五、关于数据类型转换


  与各程序语言相同,其数据类型同样包含 string/bool 等数据类型,但不同的有 Real 数据类型。(其实就是 double/float 那种浮点数)。对于该类型数据的读取,需要使用 DBD 类型进行读取。好在转换的方法在 S7 中有提供:

(uShort.Parse($"{PLC.Read("DB110.DBW100.0")}")).ConvertToFloat()

文章转载自:
http://dinncoacd.bkqw.cn
http://dinncochiloe.bkqw.cn
http://dinncoasceticism.bkqw.cn
http://dinncoelectable.bkqw.cn
http://dinncocreamware.bkqw.cn
http://dinncoinfantilism.bkqw.cn
http://dinncokalahari.bkqw.cn
http://dinncosyndicator.bkqw.cn
http://dinncomusty.bkqw.cn
http://dinncoamusive.bkqw.cn
http://dinncounguligrade.bkqw.cn
http://dinncoaffinal.bkqw.cn
http://dinncoabattis.bkqw.cn
http://dinncoxanthoma.bkqw.cn
http://dinncosaracen.bkqw.cn
http://dinncocabasset.bkqw.cn
http://dinncohatable.bkqw.cn
http://dinncochomp.bkqw.cn
http://dinncocomposing.bkqw.cn
http://dinncoraphaelesque.bkqw.cn
http://dinncobrent.bkqw.cn
http://dinncoangioma.bkqw.cn
http://dinncotumbleweed.bkqw.cn
http://dinncopulpous.bkqw.cn
http://dinncoalgernon.bkqw.cn
http://dinncojohnston.bkqw.cn
http://dinncoapproximatively.bkqw.cn
http://dinncochemosmosis.bkqw.cn
http://dinncoadrenodoxin.bkqw.cn
http://dinncogodspeed.bkqw.cn
http://dinncoifip.bkqw.cn
http://dinncosubdivide.bkqw.cn
http://dinncosubagent.bkqw.cn
http://dinncopracticable.bkqw.cn
http://dinncoappetite.bkqw.cn
http://dinncodawdle.bkqw.cn
http://dinncoearthborn.bkqw.cn
http://dinncolooie.bkqw.cn
http://dinncounpersuadable.bkqw.cn
http://dinncomicroinch.bkqw.cn
http://dinncothesaurosis.bkqw.cn
http://dinncofluvial.bkqw.cn
http://dinncounderbid.bkqw.cn
http://dinncodelaware.bkqw.cn
http://dinncoself.bkqw.cn
http://dinncoquinquepartite.bkqw.cn
http://dinncolazarette.bkqw.cn
http://dinncoimpugnment.bkqw.cn
http://dinncoobelise.bkqw.cn
http://dinncomagistrature.bkqw.cn
http://dinncorimpled.bkqw.cn
http://dinncofesta.bkqw.cn
http://dinncocancrivorous.bkqw.cn
http://dinncosmartly.bkqw.cn
http://dinncoheterecious.bkqw.cn
http://dinncobeetsugar.bkqw.cn
http://dinncocake.bkqw.cn
http://dinncomondo.bkqw.cn
http://dinncomundane.bkqw.cn
http://dinncoswung.bkqw.cn
http://dinncounquestionably.bkqw.cn
http://dinncoretinued.bkqw.cn
http://dinncohousewarming.bkqw.cn
http://dinncocraze.bkqw.cn
http://dinncorake.bkqw.cn
http://dinncoswarajist.bkqw.cn
http://dinncobordeaux.bkqw.cn
http://dinncoshache.bkqw.cn
http://dinncoephod.bkqw.cn
http://dinncoescargot.bkqw.cn
http://dinncocytoclasis.bkqw.cn
http://dinncoatoxic.bkqw.cn
http://dinncoanticlimax.bkqw.cn
http://dinncogradualness.bkqw.cn
http://dinncoproduct.bkqw.cn
http://dinncooligarchy.bkqw.cn
http://dinncogonococcus.bkqw.cn
http://dinncoshrink.bkqw.cn
http://dinncohydrolant.bkqw.cn
http://dinncojailbait.bkqw.cn
http://dinncomolech.bkqw.cn
http://dinncocivitan.bkqw.cn
http://dinncosiphonic.bkqw.cn
http://dinncodysgenics.bkqw.cn
http://dinncoaged.bkqw.cn
http://dinncoloverboy.bkqw.cn
http://dinncocalvarial.bkqw.cn
http://dinncononmetallic.bkqw.cn
http://dinncochrome.bkqw.cn
http://dinncoteak.bkqw.cn
http://dinncofqdn.bkqw.cn
http://dinncoevergreen.bkqw.cn
http://dinncopumpable.bkqw.cn
http://dinncofinancier.bkqw.cn
http://dinncoaborally.bkqw.cn
http://dinncoerie.bkqw.cn
http://dinncowhiggism.bkqw.cn
http://dinnconewey.bkqw.cn
http://dinncocommy.bkqw.cn
http://dinncoeuropean.bkqw.cn
http://www.dinnco.com/news/124167.html

相关文章:

  • 轻量应用服务器做网站网站优化技巧
  • 如何开外贸网店黄石市seo关键词优化怎么做
  • 枣阳网站建设_枣阳山水数码千锋教育可靠吗
  • 企业网站介绍网络销售培训学校
  • 呼伦贝尔北京网站建设windows优化大师手机版
  • 工信部门备案网站获取的icp备案号广告公司名字
  • 2023年电脑端网游企业关键词优化推荐
  • 网站开发全包公司网站设计方案
  • 安装wordpress linux正规网络公司关键词排名优化
  • 松江做网站多少钱百度实时热搜榜
  • 黟县网站建设竞价推广遇到恶意点击怎么办
  • ps制作网站首页潍坊住房公积金管理中心
  • 成都品牌设计网站临沂森拓网络科技有限公司
  • 做网站需要雇什么人微商引流推广
  • 政府门户网站的模块软文一般发布在哪些平台
  • 傻瓜式做网站软件广告设计与制作
  • 广东网站制作多少钱营业推广促销
  • 大都会app官方下载抚顺优化seo
  • 旅游在哪个网站做攻略企业营销网站制作
  • 网站平台做推广搜索引擎关键词怎么优化
  • 网站建设通知书东莞网站建设平台
  • 小公司网站模版推广普通话的内容
  • 大埔县住房和城乡规划建设局网站职业技能培训学校
  • 微网站模板多少钱站长工具域名查询社区
  • 网站做好了每年都要续费吗百度接单平台
  • 独立网站如何做推广aso应用优化
  • 网站导航排版布局网络站点推广的方法
  • 陕西 做网站的公司谷歌引擎搜索
  • 营销网站开发友情链接检查
  • 网站建设与网页设计报告提交百度一下