PLC编程基础——进制介绍
1 PLC编程基础
1.1 数据格式及要求
数据格式:即指数据的长度和表示方式。
要求:S7-200 SMART对数据的格式有一定的要求,指令与数据之间的格式一致才能正常工作。
用一位二进制数表示开关量
一位二进制数:一位二进制数有0(OFF)和1(ON)两种不同的取值,分别对应于开关量(或数字量)的两种不同的状态。
位数据的数据类型:布尔(Bool)型。
位地址:由存储器标识符、字节地址和位号组成,如I3.4等。
其它CPU存储区的地址格式:由存储器标识符和起始字节号(一般取偶字节)组成,如V B 100、V W 100、V D 100等。
1.1.1 十进制数
包含0~9共10个数字,以上10个数可以任意组合。规则:逢十进一。例:9+1=10,19+1=20,99+1=100.
1.1.2 八进制数
包含0~7共8个数字,以上8个数可以任意组合。规则:逢八进一。例:7+1=10,17+1=20,77+1=100。注意:S7-200 PLC的输入输出点都是按八进制进行排列。例如:I0.0~I0.7,I1.0~I1.7
1.1.3 二进制数
包含0~1共2个数字,以上2个数可以任意组合。规则:逢二进一。 例:1+1=10,,11+1=100。二进制又叫计算机语言或机器码
数及数制:数用于表示一个量的具体大小。根据计数方式的不同,有十进制(D)、二进制(B)、十六进制(H)和八进制等不同的计数方式。
二进制数的表示:在S7-200中用2#来表示二进制常数,例如 “2# 10111010 ”。
二进制数的大小:将二进制数的各位(从右往左第n位)乘以对应的位权(×2n-1),并将结果累加求和可得其大小。例如:2# 10111010 = 1×2 8-1 +0×2 7-1 +1×2 6-1 +1×2 5-1 +1×2 4-1 +0×2 3-1 +1×2 2-1 +0×2 1-1 = 186
1.1.4 十六进制数
包含0~9共10个数字加上A、B、C、D、E、F共6个字母,合计一起总共16个符号,以上16个数可以任意组合。规则:逢十六进一。例:9+1=A,F+1=10,1F+1=20,FF+1=100 。
十六进制数的引入:将二进制数从右往左每4位用一个十六进制数表示,可以实现对多位二进制数的快速准确的读写。
十六进制数的表示:在S7-200中用16#来表示十六进制常数,例如 “2# 1010 1110 1111 0111 可转换为16# AEF7 ”。
十六进制数的大小:将十六进制数的各位(从右往左第n位)乘以对应的位权(×16n-1),并将结果累加求和可得其大小。例如:16#2F = 2×16 2-1 +15×16 1-1 = 47
1.1.5 BCD码
BCD码释义:BCD码就是用四位二进制数的组合来表示1位十进制数,即用二进制编码的十进制数(Binary Coded Decimal Number)缩写。 例如 十进制数 23 的BCD码为 2# 0010 0011 或表示为 16# 23 ,但其8421码为 2# 00010111 。
BCD码的应用:BCD码常用于输入输出设备,例如拨码开关输入的是BCD码,送给七段显示器的数字也是BCD码。
1.1.6 负数(有符号数)的表示方法
负数的表示:PLC一般用二进制的补码来表示有符号数,其最高位为符号位(0 ——正数、1 ——负数)。
绝对值相等的正负有符号数间的关系:正数的补码是它本身。
PLC编程必备:模拟量计算,结合实际案例详解,这操作一看就懂
模拟量是工业自动化使用的蛮多的一个东西,一般用在对温度、压力等数字量的检测和控制,比较高端的还会结合PID进行使用。在学习模拟量的过程中,读取到相应的数据很简单,困扰大家学习模拟量的最大难题是对模拟量的量程范围的选择以及计算。下面,陈老师将对模拟量的计算进行一个详细的解说,会结合相应的案例,帮助大家理解模拟量。
例1:
如上图,一个温度感应模块,感应的温度时0~150°,对应的输出电压时0~10V,也就是说感应到0的温度,这个模块就输出一个0V的电压;感应到150°,就输出一个10V的电压。中间的每一个温度也会对应一个相应的电压,这里需要去计算么,不不不,现在还不到计算的时候,我们继续往下看。
上图是我们FX系列的plc,加了2个模拟量的模块,其中FX3U-4AD就是用来接收这些电压数值的模块(也可以接收电流)。有一点要记住,plc显示出来的是数字,而不是电压值。而且,显示出来的数值大小也可以是不同范围,例如,可以把0-10V的电压显示为0-10000的数值,也可以显示为0-4000或者0-32000的对应数值,你选择的数值越大,检测的就越精确,看下图的3种模式,我们可以通过plc编程进行设定,选择其中一种:
(由于我们的温度模块是0-10V的,我们plc的接收范围是-10V--+10V,我们把负数部分去掉,对应的数值的负数范围也可以去掉)
下面我们选择0-32000的数值范围进行计算。也就是说,读取到是数值0,就是电压为0v;读取到32000的数值,就是感应到的电压是10V。再对应到我们温度模块的0-150°,可以发现0-10V就是一个中间量,我们不需要拿他来计算, 0数值对应的温度是0°150°对应的数值是32000。
如上图,温度和读取的数值是一个线性关系,我们可以用坐标系表示,温度为X,显示的数值为Y,这时我们发现,他们之间存在一个比例关系,Y是X的k倍,也就是说,显示的数值是实际温度的K倍,具体是多少倍,我们不知道,我们可以列公式 y=k*x,这时可以代入 x=150°时,y=32000,即 32000=k*150,可以求得,k=32000/150=2133
结论是,读取到的数值除以2133就是实际的温度。
选择不同的量程范围,计算的过程都是一样的,这里就不给大家一一演示,下面进入第二个例子,来看看更有难度的计算。
例2:
下图是我们另外一种温度变送器,它能感应到-50°~+150°的温度范围,输出的是4~20ma的电流。
就是说我们的感应器感应到-50°时,输出电流4mA;感应到150°的温度时,输出20mA的电流。参照下图,我们可以选择不用的量程范围
比如,我们选择0~16000的量程范围,那么这时候对应关系如下:
我们把读取的数值命名为y把实际温度命名为x,x变化,我们的y也会跟着变化,这时,因为我们的温度初始检测值不为零,所以计算比前面有所不同。我们先根据-50°对应数值0, +150°对应的数值为16000,做出下图
我们可以列出这样的方程y=k*x+b,然后代入(-50,0)、(150,16000)
这是初中的直线方程的知识点,我们可以接出k=80,b=4000;
y=80*x+4000或x=(y-4000)/80
最后可以得出,实际的数值减去4000,再除以80就是实际的温度。
我们再来回顾下计算的流程。
这就是我们模拟量的计算过程,当然plc也可以通过D\A模块输出电压或者电流,其计算过程和原理都是一样的,这里就留给大家自己去思考。(本文为技成老师原创,作者:陈育鑫,未经授权不得转载,违者必究!)
往期优秀文章回顾:
变频器的控制回路端口详解,图文并茂~
相关问答
plc中如果是负数,要变成正数的化为什么要减去k65535?
mov指令指的是对16位数据进行操作,而65535超过16为,32767以下的都可以,如果你想赋值65535的话,把mov改为DMOV32位操作即可。mov指令指的是对16位数据进行操...
信捷plc怎么计算绝对值?
信捷PLC可以使用绝对值指令ABS来计算一个数的绝对值。该指令可以表示为ABS(X),其中X为输入的数字。该指令会返回X的绝对值,即无论X为正数还是负数,都会返回一...
PLC为什么AIW0采集到的数值是负值呢?
AIW0是模拟量通道0的地址,里面存的数据是采集到的值。当程序中使用AIW0时,里面的数据是根据采集值变化的。0~20mA对应0~32000.AIW0是模拟量通道0的地址,里面...
PLC中,+32767+1=-32768,为什么,高手给个详细解释?
32767十六进制0x7fff这是十六位表示的最大有符号正数了32768十六进制0x8000符号位是1,自然就是负数了正数和负数换算就是二进制位按位取反再+132767...
请教大家三菱PLC中的加减法指令怎么使用,谢谢?
三菱PLC中的加减法指令使用方法如下:1、加法指令ADD是将指定源地址中的二进制数相加,其结果送到指定目标地址中。当X0=ON时,源地址[S1]、[S2]的两个数据寄存...
三菱plc数据寄存器d可以是负数吗?
1.可以是负数。2.因为三菱PLC的数据寄存器D是一个16位的有符号整数,其中最高位表示符号位,0表示正数,1表示负数。因此,D寄存器可以存储负数值。3.这意味着...
用三菱PLC把编码器的角度读出之后为什么是负值?怎样把角度复位?
如果反转就可能是负值。因为正转计数器增大,反转计数器值减小如果反转就可能是负值。因为正转计数器增大,反转计数器值减小
PLC如果对于4-20mA模拟量输入模块来说,小于4mA后转换的数字量是多少?
如果小于4ma,那么将会是输出负值,例如-1对应的是3.9995mA,而1.185mA时,这个数值是-4864(10进制)但是如果小于1.185mA,如果禁止断线检测,这个值是8000(16....
三菱FXPLC如何将32位整数变成16位整数-白日的回答-懂得
从而得到一个相对准确32位数据转16位数据。3、再通过DA模块来进行输出。DA模块选择也有说法,如果有负数只能FX2N-4DA,如果没有负数可以用FX2N-4DA也...
三菱pid指令输出值为什么是负数?
三菱PLC减法一用就变成负数是因为PLC的减法指令中,如果结果小于0,则会将结果保存为最大值(也就是相当于无限大)。因此,在进行减法运算时如果发生负数的情况...