西门子S7-1200PLC模块山东代理价格
西门子S7-300/400 PLC的取反码指令
在计算机系统中,数据存在原码、反码和补码3种形式;作为工业控制计算机的代表,PLC控制系统当然也满足这个基本规定。下面先介绍一下原码、反码和补码的基础知识。
在计算机的存储器中,以字节作为基本单位来存储信息。如图4-38 (a)所示为一个无符号的8位二进制数的原码;在原码的基础上,对每一位数据取反,比如原来为“1”的位现在设置为“0”,这样得到该8位二进制数的反码,如图4-38 (b)所示;在反码的基础上,在这个二进制数的一位加上“1”,在加的过程中满“2”则向前面进一位,得到如图4-38 (c)所示的补码形式。
图4-38 8位二进制数的原码、反码和补码形式
(1)对整型数取反码的指令
对整型数取反码指令的结构如图4-39所示,其基本结构和前面介绍的数据类型转换指令的结构相似。
标题INV_I代表对整型数取反码,EN和ENO端口的基本作用及流通的数据形式和BCD_I等指令一样。IN端口输入INT类型的数据,OUT端口同样输出INT类型的数据,且后者输出的数据是前者输入数据的反码形式。
INV_I指令读取输入端IN的数据,并使用十六进制掩码W#16#FFFF执行逻辑“异或”运算,将原来数据的每一位变成相反状态。在指令的整个执行过程中ENO始终与EN的信号状态相同。
INV_I指令在程序中的具体应用如图4-40所示。
图4-39 INV_I指令结构
图4-40 INV_I指令具体的编程
当I0.1为高电位“1”时,INV_I指令将IW2内的数据每一位取反,然后输出到MW4所指向的存储区内。例如,IW2=01001011 10101101,取反后输出到MW4,则MW4=10110100 01010010。
(2)对长整型数取反码的指令
对长整型数取反码指令的结构如图4-41所示,其基本结构和对整型数取反码指令类似,的差别在于INV_DI指令的IN端和OUT端输入、输出的数据类型为DINT。INV_DI指令读取输入端IN的数据,并使用十六进制掩码W#16#FFFFFFFF执行逻辑“异或”运算,将每一位转换为相反状态。在指令的整个执行过程中ENO始终与EN的信号状态相同。
图4-41 INV_DI指令结构
(1) BCD码与整型数的转换指令
BCD码到整型数的转换指令如图4-31所示。
该指令有一个标题,即BCD_I,用于指明这个指令实现哪两种数据类型的转换。实现不同数据类型之间转换的指令其标题不同。
该指令还有一个使能输入端(EN)和使能输出端(ENO),使能输入端为高电位“1”时,该指令工作;相反,如果为低电位“0”,则此时该指令不能工作。在指令正常工作时使能输出端为高电位,这样EN和ENO端的电位状态始终一致。EN和ENO端的数据都是BOOL类型的数据,可以是I、Q、M、L、D存储区的数据。
IN端用于读入数据,可以是直接的BCD码数据,也可以是数据存储的地址;OUT端用于输出转换后的数据,并且将数据存储在OUT指定的存储位置中。
对于BCD_I的转换指令,IN端输入的必须为WORD类型的BCD码数据,OUT端为INT类型的数据,两者的数据均可以来自I、Q、M、L、D存储区。
BCD_I指令将IN端的数据以3位BCD码数字(+/-999)读取,并将其转换为整型值(16位)。整型值的结果通过OUT端输出。
BCD_I指令在程序中的具体应用如图4-32所示。EN端可以通过一些位状态进行控制,其ENO端也可以输出信号控制其他的指令。在IN端和OUT端给出的数据存储地址,必须以WORD类型的数据形式进行操作。
图4-31 BCD码到整型数转换的BCD_I指令结构
图4-32 BCD_I指令具体的编程
当I0.1为高电位“1”时,BCD_I指令读入IW2区域内的数据,并将其转换成OUT形式的16位数据输出到MW4中;与此同时,ENO端输出高电位“1”,在M2.0为低电位“0”时,将置位Q2.5。
如图4-33所示为整型数到BCD码转换的指令结构。
图4-33 整型数到BCD码转换的I_BCD指令结构
I_BCD指令的结构与BCD_I指令类似,在IN端和OUT端同样只能是WORD类型的数据。
I_BCD指令工作时,IN端的数据以整型值(16位)读取,并将其转换为3位BCD码数字(+/-999)。结果由OUT端输出。如果在转换的过程中产生溢出,ENO端输出低电位“0”。
(2) BCD码与长整型数据的转换指令
BCD码转换为长整型数据或长整型数据转换为BCD码的指令结构分别如图4-34 (a)、图4-34 (b)所示。
图4-34 BCD码与长整型数据之间的转换指令
BCD_DI指令的IN端必须为DWORD类型的BCD数据,OUT端为DINT类型的数据。两者的数据均可以来自I、Q、M、L、D存储区。BCD_DI指令将IN端的数据以7位BCD码(+/-9999999)数字读取,并将其转换为长整型值(32位)。长整型值的结果通过OUT端输出。整个指令执行过程ENO始终与EN的信号状态相同。
DI_BCD指令的IN端必须为DINT类型的数据,OUT端为DWORD类型的BCD数据。
DI_BCD指令将IN端的数据以长整型值(32位)读取,并将其转换为7位BCD码数字(+/-9999999)。结果由OUT端输出。如果产生溢出,ENO的状态为“0”。
BCD_DI指令在程序中的具体应用如图4-35所示。
图4-35 BCD_DI指令具体的编程
在图4-35中,当I0.1为高电位“1”时,BCD_DI指令将ID4的内容以7位BCD码数字读取,并将其转换为长整型值。结果存储在MD8中。
(3)整型数据转换为长整型数据的指令
整型数据转换成长整型数据的指令结构如图4-36所示。该指令同样有EN和ENO端口,数据输入端和输出端与前面介绍的指令类似。
IN端输入的数据必须为INT类型的数据,OUT端输出的数据为DINT类型,两者的数据均可以来自I、Q、M、L、D存储区。I_DI指令将输入端IN的数据以整型(16位)读取,并将其转换为长整型(32位)。结果由输出端OUT输出。ENO始终与EN的信号状态相同。
(4)长整型数据转换为浮点型数据的指令
长整型数据转换为浮点型数据的指令结构如图4-37所示,具体指令的结构与前面介绍的指令完全一样。
IN端输入的数据必须为DINT类型的数据,OUT端输出的数据为REAL类型,两者的数据均可以来自I、Q、M、L、D存储区。DI_R指令将输入端IN的数据以长整型读取,并将其转换为浮点型。结果由输出端OUT输出。ENO始终与EN的信号状态相同。
图4-36 I_DI指令结构
图4-37 DI_R指令结构
西门子S7-1200PLC模块山东代理价格