C#上位机与欧姆龙PLC的通信04---- 欧姆龙plc的存储区

1、存储区概念

欧姆龙PLC将整个数据存储器分为10个区:输入继电器区、输出继电器区、内部辅助继电器区、特殊继电器区、保持继电器区、暂存继电器区、定时/计数器区、数据存储区、辅助存储继电器区、链接继电器区。

输入输出继电器区

CP1E系列PLC输入继电器区有16个通道,通道号为000~099,每个通道有16个输入继电器,位号为00~15。继电器号=通道号+位号

输出继电器区有16个通道,通道号为100~199,每个通道有16个输出继电器,位号为00~15。继电器号=通道号+位号(例如10003)

内部辅助继电器区W

通道号为W0~W99,位号为00~15

定时/计数器区TC

定时器和计数器分别可用256个,定时器号0~255,计数器号0~255一个编号只能分配一次(例TIM000)

数据存储区D

E型数据存储区通道号为D0~D2047

N型数据存储区通道号为D0~D8191

保持继电器区H

通道号为H0~H49

主要特性:可通过专用软件CX-Programmer for CP1E进行编程监控。

2、分区介绍

AR:特殊辅助继电器区;
HR:保持继电器区;
IO:CIO区,用作控制I/O点的数据,也可以用作内部处理和存储数据的工作位;
LR:链接继电器区
TR,暂时存储继电器区;
DM:动态数据存储器区;
EM:扩展数据存储区;
CNT:计数器区;
TIM:定时器区;
IR:变址寄存器;
DR:数据寄存器。

欧姆龙采用通道概念存储数据,所存储数据的单元称为通道(CH),也叫字。每个存储单元都有一个地址,就叫做首地址,简称通道号,用3位数字表示。每个通道有16位(bit),分别称为00,01,02,15位。每个位就是一个软继电器,简你继电器。因此一个通道就有16个软继电器。通道也可用来存储十进制数据,由于十进制数可用特定的二进制编码BCD表示,因此,当用通道存储十进制数时,每4位分成1组,存储1个由BCD码表示的十进制数,将每4位称为1个数字位。也就是说,一个通道有4个数字位,可存储4位十进制数。

3、认识内存区

3.1 CIO存储区

 

点击“在线”,选择“监视“

 

这里的CIO区我们选择的数据类型是2进制,即每个位只能是1或0,它可以表示设备状态是停止还是启动,将它修改为以下内容

这里的意思是将CIO存储区的0开始地址的第0,1,3位设置为1,即0.0为1,0.1为1,0.3为1,联合起来的意思就是指CIO0.0为1,CIO0.1为1,CIO0.3为1,其他默认都是0,你可以认为CIO0.0表示电机当前状态为启动, CIO0.1表示水轮正在转动,随便怎么理解都可以,总之1,0是布尔类型,换到JAVA或C#就是布尔类型true,false,CIO0.3中CIO0表示CIO区中的第0个寄存器,3表示寄存器中的第3位,因为我们设置了CIO区为2进制类型,所以只能设置为1,0,如果设置为其他类型,则可以有不同设置。

 

这一段内存地址表示的含义内容

3.2 DM区

 DM区即数据内存区( “DM”是Data Memory的简称),为欧姆龙产PLC的I/O内存的一种,字(16位)单位中能够提供的读写的通用数据区域。PLC的电源在ON/OFF时也可以保持数据。作为“数据”的“内存”,可以保存接点以外的各种设定数据、运行数据。与其它区域不同,DM内的数据作为DM的地址,可以间接指定DM区域。

双击D,设置为10进制,输入数据

这里要注意监视时设置的进制也是10进制  

 注意:这个10进制是没有符号的,在C#是用ushort类型表示,在C#占2个字节,在PLC中占一个寄存器,PLC中寄存器占2个字节,用word表示,简称字,10.0是第1个寄存器,10.9是第10个寄存器,D区中的第10个地址共占10个寄存器。

3.3 W区

PLC中的W区是掉电不保存区,DM区在电池有电的情况下是掉电保存的。W该区可以像DM区那样按字操作,也可以按位操作。

 双击W,设置为浮点类型的,输入有关数据,浮点型其实是包括有符号的10进制和无符号的10进制,以及有无符号的小数,如300,-987,12.43,-9.53,它占2个word,即占4个寄存器,即占8个字节,在C#中用float表示

 

D区的地址是D10,D11,D12这样编号下去的,每个占1个寄存器

W区的地址是W0,W2,W4这样编号下去的,每个地址占2个寄存器

注意它们的区别,这些数字你们可以表示为电机转速,温度,水位高度,什么都可以。

一个浮点数占4个字节,即占32位,必须要占用两个连续的寄存器,1个寄存器占2个字节 

这里注意,并不是说CIO区只能是2进制,D区是10进制,W区是float,每个区都可以设置为2进制或10进制有符号无符号或浮点,这里只是拿最常用的3种类型来说明PLC寄存器的地址表示及数制。

3.4 C#与PLC中的数据类型比较 

知识:

C#中:

float 单精度浮点 32bit,
double 双精度浮点64bit,
decimal是高精度 128bit,浮点型。
float double 是 基本类型(primitive type),decimal不是。
float 有效数字7位,范围 ±1.5 × 10E−45 to ±3.4 × 10E38
double 有效数字15/16 位,范围 ±5.0 × 10 E−324 to ±1.7 × 10E308
decimal 有效数字 28/29 位,范围 ±1.0 × 10E−28 to ±7.9 × 10E28
( E -- 下接几次方)

decimal的有效位数很大,达到了28位,但是表示的数据范围却比float和double类型小。
使用的时候会对计算时的性能有影响。
常数写法:
float f = 12.3F; (带F)
double x=12.3; (不带就是double)
decimal d = 12.30M; (带M)
--------------------------------------------------------------------------------------------------
PLC与C#数据类型对应
Bit      =>     bool
Byte     =>     byte
word     =>     ushort
DWord     =>     uint
Int     =>     short
DInt     =>     int
float=>     float 
String     =>     string 
 --------------------------------------------------------------------------------------------------

一个英文字母,无论大写和小写都是一个字符、一个字节,8位。
一个汉字是一个字符、两个字节,16位

PLC中:

位(bit):是计算机 内部数据 储存的最小单位,11001100是一个八位二进制数。

字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写  B  来表示,1B(byte,字节)= 8bit(位)

字符:是指计算机中使用的字母、数字、字和符号

B是字节(8位),即byte

W是字(16位),即PLC中的word,占一个寄存器,在C#占2个字节,用short或ushort表示,用来表示整数(不用带小数),short分为有符号(如-89)和无符号(如75)两种,ushort只有无符号一种,如79

DW是双字(32位),即PLC中的dword,占两个寄存器,在C#中占4个字节,用float表示,用来表示带有小数的数,分为有符号(如-28.5)和无符号(如29.6)两种

一个浮点数占4个字节,即占32位,必须要占用两个连续的寄存器,1个寄存器占2个字节  

(1)1个字节=8个位,用B(byte)表示

(2)1个字=16个位,用W(word)表示

(3)1个双字=32个位,用D(double word)表示


 

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

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

相关文章

Docker 文件和卷 权限拒绝

一 创作背景 再复制Docker影像文件或访问Docker容器内已安装卷上的文件时我们常常会遇到:“权限被拒绝”的错误,在此,您将了解到为什么会出现“权限被拒绝”的错误以及如何解决这个问题。 二 目的 在深入探讨 Docker 容器中的 Permission De…

SpringCloudGateway网关处拦截并修改请求

SpringCloudGateway网关处拦截并修改请求 需求背景 老系统没有引入Token的概念,之前的租户Id拼接在请求上,有的是以Get,Param传参形式;有的是以Post,Body传参的。需要在网关层拦截请求并进行请求修改后转发到对应服务。…

​ SK Ecoplant借助亚马逊云科技,海外服务器为环保事业注入新活力

在当今全球面临着资源紧缺和环境挑战的大背景下,数字技术所依赖的海外服务器正成为加速循环经济转型的关键利器。然而,很多企业在整合数字技术到运营中仍然面临着一系列挑战,依然存在低效流程导致的不必要浪费。针对这一问题,SK E…

工具系列:PyCaret介绍_用外生变量单变量时间序列预测

工具系列:PyCaret介绍_用外生变量单变量时间序列预测 在这组笔记本中,我们将介绍使用外生变量进行建模。我们的行动计划如下: 对数据集进行探索性数据分析,以提取关于生成时间序列的过程的有价值的见解。 构建一个基准模型&…

元旦厦门游--ChatGPT/GPT4科研实践应用与AI绘图技术

2023年我们进入了AI2.0时代。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车,就有可能被淘汰在这个数字化时代,如何能高效地处理文本、文献查阅、PPT…

YOLOv8改进 | 主干篇 | 利用MobileNetV2替换Backbone(轻量化网络结构)

一、本文介绍 本文给大家带来的改进机制是MobileNetV2,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。其在MobilNetV1的基础上采用反转残差结构和线性瓶颈层。这种结构通过轻量级的深度卷积和线性卷积过滤特征,同时去除狭窄层中的非线性&#xff…

力扣每日一题day37[113.路径总和ii]

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

lamda表达式(史上最全)

一、函数式接口 在jdk8中什么是函数式接口: 被FunctionalInterface注解修饰的。接口里边只有一个非default的方法。 满足以上2个条件的即为函数式接口,ps:即使一个接口没有FunctionalInterface修饰,但是满足2,那么这…

Netty Review - Netty与Protostuff:打造高效的网络通信

文章目录 概念PrePomServer & ClientProtostuffUtil 解读测试小结 概念 Pre 每日一博 - Protobuf vs. Protostuff&#xff1a;性能、易用性和适用场景分析 Pom <dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-…

打破Tomcat中的双亲委派机制:探讨与实践

目录 引言 1. 双亲委派机制概述 2. 打破双亲委派机制的场景 3. Tomcat中的类加载器体系 4. 打破双亲委派机制的方法 4.1 在catalina.properties中配置common.loader 4.2 在META-INF/context.xml中配置Loader元素 4.3 编写自定义的类加载器 5. 潜在的问题与解决方案 5…

Android13 Wifi启动流程分析

Android13 Wifi启动流程分析 文章目录 Android13 Wifi启动流程分析一、正常开关wifi 启动流程1、WifiManager2、WifiServiceImpl3、ActiveModeWarden4、ConcreteClientModeManager5、WifiNative6、WifiVendorHal7、HalDeviceManager8、wifi.cpp 二、重启设备时自动开启wifi流程…

关于LayUI弹出层表单提交两次问题

在弹出层点击 注册 按钮表单会提交两次 但是在单独页面点击是正常的 经过排查发现&#xff0c;问题在于主页面和注册页面重复引用了layui.js&#xff0c;页面要被渲染两次 <script src"../layui/layui.js"></script>