目录
[2、 VR寄存器](#2、 VR寄存器)
一、PLC寄存器说明
1、寄存器(软元件)类型

2、特殊继电器M
M8000:只要PLC处于运行状态,M8000的常开触点一直保持闭合。可以作为需要一直驱动程序的输入条件以及作为控制器的运行状态的显示来使用。
M8001:只要PLC处于运行状态,M8001的常开触点一直断开。
M8002:PLC从停止到运行的时候,M8002仅在第一个扫描周期内导通一次,一般用于初始化参数和程序复位,或者批量赋值。
M8003:PLC从停止到运行的时候,M8003断开第一个扫描周期,然后恢复常闭状态。
M8011:是以10毫秒为周期时间,在这10毫秒内M8011的触点接通5MS,断开5毫秒,不断重复循环。
M8012:是以100毫秒为周期时间,在这100毫秒内M8011的触点接通50MS,断开50毫秒,不断重复循环。
M8013:是以1秒为周期时间,在这1秒内M8011的触点接通500MS,断开500毫秒,不断重复循环。
M8014:是以1分钟为周期时间,在这1分钟内M8011的触点接通30秒,断开30秒,不断重复循环。
M8020:加减运算结果为零时,M8020就会置位,反之则为复位状态。
M8021:减法运算结果小于负的最大值时,借位标志位动作。
M8022:加法运算结果大于正的最大值时,进位标志位动作。
M8023:小数点标志。
M8100-M8199:轴0-99的IDLE标志
M8200-M8299:轴0-99的BUFFER剩余标志
M10000~:IN(0)对应M10000地址,IN(1)对应M10001地址,以此类推。
M20000~:OP(0)对应M20000地址,OP(1)对应M20001地址,以此类推。

当PLC处于run状态时,特殊继电器M8011~M8014的电平变化如下图,当PLC停止时,均不不动作。

3、特殊寄存器D
D8001:版本
D8004:错误
D8010:扫描时间
D8011:扫描最小时间
D8012:扫描最大时间
D8013:秒
D8014:分
D8015:时
D8016:日
D8017:月
D8018:年
D8019:星期
D10000-D10198:DPOS,浮点方式,每个轴占1个MOBBUS_IEEE。
D11000-D11198:MPOS,浮点方式,每个轴占1个MOBBUS_IEEE。
D12000-D12198:VPSPEED,浮点方式,每个轴占1个MOBBUS_IEEE。
D13000-D13128:AOUT,模拟量输出,每个通道占1个MOBBUS_REG。
D14000-D14256:AIN,模拟量输入,每个通道占1个MOBBUS_REG。
以上特殊寄存器除D8000和D8004,其他均为只读,可通过寄存器窗口查看特殊寄存器D的值,如下图,显示当前时间为:星期6,2020年5月16日10时23分42秒。

4、输入继电器X
在控制器中,输入端子是从外部的开关接收信号的窗口。不能用程序来驱动。
输入继电器X输入点(IN)可连接外部输入信号,如感应器、限位开关、按钮。
PLC编程下,X为8进制(X0~X7,X10~X17,...),而控制器的输入口IN为10进制,编写程序时要特别注意,做进制转换,比如,IN8对应X10,IN20口对应X24。
PLC调用Basic程序时还是按10进制。
X可用编号范围依据控制器自身IO点数加所连接的扩展模块IO点数确定。
例:在一段起保停程序中X0作启动信号,X1作停止信号。

5、输出继电器Y
在控制器中,输出端子是向外部的负载发出信号的窗口。不能用程序来驱动。
输出继电器Y输出点(OUT)输出给外部继电器、电磁阀。
PLC编程下,Y为8进制(Y0~Y7,Y10~Y17,...),而控制器的输出口OUT为10进制,编写程序时要特别注意,做进制转换,比如,OUT8对应Y10,OUT20口对应Y24。
PLC调用Basic程序时还是按10进制。
Y可用编号范围依据控制器自身IO点数加所连接的扩展模块IO点数确定。
例:在起保停程序中,Y0作输出信号,也与X0自锁。

6、辅助继电器M
辅助继电器的线圈与输出继电器一样,可由控制器内的软元件的触点来驱动。
辅助继电器不能直接驱动外部负载,外部负载必须要通过输出继电器来进行驱动。辅助继电器是控制器内部的软元件,没有实际的物理端子,不会坏。
此软元件对应MODBUS_BIT(0x寄存器)。
掉电保持型辅助继电器能记忆电源中断瞬间的状态,并在重新通电后再现其状态。
编号:0~4095
掉电保持:2048~2175
例1:在这段程序中,M0作辅助控制功能,与X0自锁和接通定时器。

例2:M2048为掉电保持型,闭合X0和X1,M0和M2048均导通。M0与X0自锁,M2048与X1自锁。

给控制器断电,再次上电后,M0断开,M2048仍导通。但再次运行时如果X3常闭触点为开路,此时M2048不动作。

7、状态继电器S
状态S是对工序步进控制简易编程的重要软元件,经常与步进梯形图指令STL结合使用,不用步进梯形图指令时,状态继电器S可作为辅助继电器M在程序中使用。
一个程序可以包含多个步进流程,步进编号S不能重复,每一个步进流程结束时,一定要写入RET步进结束指令。
编号:0~999
掉电保持:0~127
例:下图中,当起动信号X0有效时,机械手下降,到下降限位X1开始夹紧工件,夹紧到位信号X2为ON时,机械手上升到上限X3则停止。整个过程可分为三步,每一步都用一个状态继电器S20、S21、S22记录。每个状态器都有各自的置位和复位信号(如S21由X1置位,X2复位),并且要做各自的操作(驱动Y0、Y1、Y2)。从起动开始由上之下随着状态动作的转移,下一状态动作,则上面状态自动恢复原状。必须为顺序执行。


初始化过程上电执行一次,将S20、S21、S22均置零。
X0闭合,S20导通,输出Y0。
X1闭合,转移到步进点S21,S21导通,输出Y1,S20断开,Y0断开。
X2闭合,转移到步进点S22,S22导通,输出Y2,S21断开,Y1断开。
X3闭合,将S0-S127置零,RET指令返回,等待执行下一步进流程。
8、数据寄存器D
(1)16位和32位寄存器
控制器中的数据寄存器用于存储模拟量控制、位置量控制、数据I/O所需的数据及工作参数。每一个数据寄存器都是16位(最高位为符号位),可以用两个数据寄存器合并起来存放32位数据(最高位为符号位)。
在32位指令中使用数据寄存器时,会使用两个连续的MODBUS_REG空间来存储32位数据,使用时注意编号,以免数据发生覆盖导致错误。
此寄存器对应MODBUS_REG,(4x寄存器),通过D.可以按位访问。
16位数据,占用一个MODBUS_REG空间,数据范围-32768 ~ +32767。

32位数据,占用连续两个MODBUS_REG空间,数据范围-2147483648 - +2147483647。

编号:0~2047
根据SETCOM的配置来确定映射到VR的方式(参见ZBASIC手册SETCOM指令)。
当需要掉电保持时,推荐variable=3
variable参数是全局的设置,所有的端口共一个。
BASIC中

(2)字软元件的位指定(Dn.b)
Dn.b指定字软元件的位,可以将其作为位数据使用。
Dn.b指定字软元件的位时,请使用字软元件编号n和位编号b(16进制数)进行设定。(例如:D1.2····表示数据寄存器D1的第2位)
在软元件编号,位编号中不能执行变址修正。
对象的字软元件:数据寄存器或特殊数据寄存器
字软元件编号n:0~8000
位编号b:0~15(16进制)

(3)位的位数指定(KnXn)
仅处理ON/OFF信息的软元件被称为位软元件。位软元件包括X,Y,M,S等。
T,C,D等处理数值的软元件被称为字软元件。字软元件包括K,KnX,KnY KnM,KnS,T,C,D,V,Z等。
即使是位软元件,通过组合使用后也可以处理数值,这种情况下,以位数Kn和起始软元件的编号的组合来显示,Kn中的n为1-8的整数,起始位为Xn。
位数为4位单位的K1~K4(16位数据),K1~K8(32位数据),例如:
K1M0表示位软元件M0、M1、M2、M3共4个位组合使用;
K2M0表示位软元件M0、M1、M2、...、M7共8个位组合使用;
K4M0表示位软元件M0、M1、M2、...、M15共16个位组合成16位数据使用;
K8M0表示位软元件M0、M1、M2、...、M31共32个位组合成32位数据使用。
例如:K2M0,由于是M0~M7,所以是2位数的数据。
D0向K2M0传送16位数据,低8位数据存入M0~M7后,数据长度不足的高位部分不被传送(32位数据的情况相同)。

9、定时器T
定时器 的编号按十进制分配**,单位为1ms**,它的作用是当达到所设定的时间输出触点就会动作,相当于继电器电路中的时间继电器。
定时器采用程序储存器内的常数K作设定值,也用数据寄存器D的内容进行间接制定。
寄存器长度32位,当通过16位指令访问时自动使用低16位。
同BASIC的TIMER命令。
处理数值范围(十进制):
16位:0~32767
32位:0~ +2147483647
编号:0~127
掉电保持:100~127,掉电保持型失电后计时值不会清零,下次开启时直接触发。
例1:在下图中,T0的值直接指定,T1的值经由寄存器间接指定。
按下X0,接通T0定时器开始计时,2S时间到,T0闭合,输出Y0。按下X0,若2S时间未到时便断开X0,此时T0的值变为0。
按下X1时,将常数2000传送到寄存器D0,按下X2,接通T1定时器。开始计时,2S时间到,T1闭合,输出Y1。

例2:使用定时器指令,与不使用定时器指令不同之处在于会显示当前计时时间。

例3:T100为掉电保持型,当计时为达到预设值时,断开X0,T0清零,T100保持当前计时数值,X0再次导通,T100从当前值开始计时。X0断开,T0、T100均失电,Y0、Y1断开。

控制器断电后再次上电,掉电保持性定时器数值仍为断电前的值,普通定时器数值清零。
二、BASIC寄存器说明
控制器寄存器主要有TABLE 、FLASH 、VR 、MODBUS 寄存器。将ZDevelop/RTSys软件与控制器连接后,可通过"控制器"-"控制器状态"查看该控制器各寄存器的空间大小,也可以通过在线命令和输出窗口输入**"?*max"来查看各寄存器的数量**,不同的控制器存储空间大小不同。
1、PLC与Basic相关寄存器对应关系

2、 VR寄存器
VR寄存器具有掉电存储功能,可无限次读写,但数据空间较小,一般只有1024或者更少,最新系列控制器的VR空间为8000,用于保存需要不断修改的数据,例如轴参数、坐标等,数据类型为32位浮点型(4系列及以上为64位浮点数)。
可使用**VR_INT强制保存为整型** ,VRSTRING强制保存为字符串。VR、VR_INT、VRSTRING共用一个空间,地址空间是重叠的,VR和VR_INT读写方法相同,VRSTRING保存ASCII码,一个字符占用一个VR。
VR的掉电保存原理是控制器内部有缺电存储器,但数据容量较小,所以数据量较大的或需要长久保存的数据最好写到FLASH块或导出到U盘。
VR寄存器还可用于RTEX控制器传递读写数据,DRIVE_WRITE参数写入,DRIVE_READ参数读取,具体使用方法参见第十六章总线相关的RTEX总线指令。
使用CLEAR指令清除VR内的全部数据,CLEAR_BIT指令将VR某个位置0,READ_BIT指令读取VR寄存器的某个位数据,SET_BIT指令将VR某个位置1。
例一:VR使用方法
VR(0) = 10.58 '赋值
aaa = VR(0) '读取
例二:VR寄存器数据相互转换
VR(100)=10.12
VR_INT(100)=VR(100) '数据转换
?VR_INT(100) '打印结果:10,浮点数转换成整数,丢失小数位
例三:VRSTRING存储字符串
VRSTRING(0,4) = "abc" '从VR(0)开始保存字符串
PRINT VRSTRING(0,4) '打印结果:abc

3、FLASH寄存器
严格来讲,FLASH不是寄存器,但它与寄存器密切相关,所以放于此章叙述。
FLASH具有掉电存储功能,读写次数限制为十万次,长期不上电也不会丢失数据。一般用于存放较大的,不需要频繁读写的数据,比如加工的工艺文件。
读与写时要注意保证要操作的变量,数组等名称和次序高度一致,如果不一致会导致数据错乱。
FLASH使用时是按块编号,块数FLASH_SECTES指令查看,不同的控制器FLASH块数与块数据大小都不同,每块数据大小FLASH_SECTSIZE指令查看。
可以在在线命令行查看,如下图。

CAN通讯设置的参数,IP地址、APP_PASS、LOCK密码等系统参数存储到FLASH。
注意:FLASH在读取之前先要写入,否则会提示警报WARN。
FLASH使用方法:
GLOBAL VAR '变量定义
GLOBAL ARRAY1(200) '数组定义
DIM ARRAY2(100)
'数据存储到FLASH块:把VAR,ARRAY1,ARRAY2数据依次写入FLASH块1
FLASH_WRITE 1,VAR,ARRAY1,ARRAY2
'FLASH块数据读取:把FLASH块1的数据依次读入VAR,ARRAY1,ARRAY2
FLASH_READ 1,VAR,ARRAY1,ARRAY2 '读取次序与写入次序一致
4、TABLE寄存器
TABLE是控制器自带的一个超大数组,数据类型为32位浮点型(4系列及以上为64位浮点数),掉电不保存。编写程序时,TABLE数组不需要再定义,可直接使用,索引下标从0开始。
ZBasic的某些指令可以直接读取TABLE内的值作为参数,比如CAM,CAMBOX,CONNFRAME,CONNREFRAME,MOVE_TURNABS,B_SPLINE,CAN,CRC16,DTSMOOTH,PITCHSET,HW_PSWITCH等指令。
示波器采样的参数也存储在TABLE里。因此在开发应用中要注意多个TABLE区域的分配与使用,不要与示波器采样的数据存储区域重合。
1)TABLE指令读写数据。
TABLE(0) = 10 'TABLE(0)赋值10
TABLE(10,100,200,300) '批量赋值,TABLE(10)赋值100,TABLE(11)赋值200,TABLE(12)赋值300
2)TSIZE指令可读取TABLE空间大小,还可修改TABLE空间大小(不能超出TABLE最大空间)。
PRINT TSIZE '打印出控制器TABLE大小
TSIZE=10000 '设置TABLE的大小,不能超过控制器TABLE最大SIZE
3)TABLESTRING指令按照字符串格式打印TABLE里的数据。
TABLE(100,68,58,92)
PRINT TABLESTRING(100,3) '字符串格式打印数据,转换为ASCII码
打印结果:D:\
TABLE作为参数传递时用法大致相同,以CAM凸轮指令为例:
CAM(start point, end point, table multiplier, distance)
start point:起始点TABLE编号,存储第一个点的位置
end point:结束点TABLE编号
table multiplier:位置乘以这个比例,一般设为脉冲当量值
distance:参考运动的距离
使用方法示例:
TABLE(10,0,80,75,40,50,20,50,0) 'TABLE从10开始存数据,TABLE(10)赋值0,TABLE(11)赋值80
CAM(10,17,100,500) '运动轨迹为TABLE(10)到TABLE(17)
查看TABLE内数据的方式有2种:
第一种:在在线命令行输入?*TABLE(10,8)查询TABLE(10)开始,依次8个数据。

第二种:在寄存器中查看DT(TABLE)数据,起始编号从10开始,个数8个。

5、MODBUS寄存器
MODBUS寄存器符合MODBUS标准通讯协议,分为位寄存器和字寄存器两类。MODBUS寄存器的数据掉电不保存。
位寄存器:MODBUS_BIT ,触摸屏一般称为MODBUS_0X,布尔型。
字寄存器:MODBUS_REG 、MODBUS_LONG 、MODBUS_IEEE 、MODBUS_STRING ,触摸屏一般叫MODBUS_4X,类型如下图。

控制器中MODBUS字寄存器占用同一个变量空间,其中一个LONG占用两个REG地址 ,一个IEEE也占用两个REG地址,使用时要注意错开字寄存器编号地址。
(1)MODBUS_LONG
MODBUS_LONG(0)占用MODBUS_REG(0)与MODBUS_REG(1)两个REG地址。
MODBUS_LONG(1)占用MODBUS_REG(1)与MODBUS_REG(2)两个REG地址。
(2)MODBUS_IEEE
MODBUS_IEEE(0)占用MODBUS_REG(0)与MODBUS_REG(1)两个REG地址。
MODBUS_IEEE(1)占用MODBUS_REG(1)与MODBUS_REG(2)两个REG地址。
所以要注意MODBUS_REG,MODBUS_LONG,MODBUS_IEEE地址在用户应用程序中不能重叠。
计算方式:MODBUS_REG(1)为高位,MODBUS_REG(0)为低位,MODBUS_LONG(0)= MODBUS_REG(1) *2^16+ MODBUS_REG(0)
4X空间示意图:

例程1:
MODBUS_REG(0)=0 '初始化置0
MODBUS_REG(1)=0 '初始化置0
MODBUS_LONG(0)=70000 'modbus_long赋值70000,modbus_reg范围-32768~32767
?MODBUS_REG(0),MODBUS_REG(1)
'打印出reg(0)为4464,reg(1)为1,long(0)=reg(1)*2^16+reg(0)

在串口设置(SETCOM参数)过程中,寄存器选择为VR时,此时一个VR映射到一个MODBUS_REG,其中VR是32位浮点型,MODBUS_REG是16位有符号整数型,从VR传递数据给MODBUS_REG会丢失小数部分,当VR数据超过正负15位时,MODBUS_REG数据会改变;MODBUS_REG传递数据给VR不会有问题,见如下例程,更多信息参见SETCOM指令。
例程2:
VR(0)=0 '初始化VR(0)和MODBUS_REG(0)为0
MODBUS_REG(0)=0
SETCOM(38400, 8,1,0,0,4,0) '设置VR映射到MODBUS_REG
VR(0)=100.345 '设置VR(0)=100.345
?MODBUS_REG(0) '打印结果为100,VR已经映射到REG,但是REG是整型,所以小数部分丢失
MODBUS_REG(0)=200 'REG(0)设为200
?VR(0) '打印结果为200,REG变化也会改变VR
当使用MODBUS协议与其他设备通讯时,就需要将数据放在MODBUS寄存器内进行传递,比如与触摸屏通讯。不进行MODBUS通讯时,亦可将MODBUS寄存器作为控制器本地数组使用。
控制器直接从MODBUS_BIT地址10000开始与输入IN口对应,20000与输出OUT口对应(注意读取的IO是原始的状态,INVERT_IN反转输入指令不起作用),30000与PLC编程的S寄存器对应。
MODBUS_IEEE地址10000开始对应轴DPOS区间,11000开始对应轴MPOS区间,12000开始对应轴VP_SPEED区间;MODBUS_REG的13000开始对应模拟量DA输出区间,14000开始对应模拟量AD输入区间。

三、ZHMI寄存器说明
大部分的元件都包含"寄存器类型"这一属性,用来与各类寄存器建立数据联系。
可通过元件控制寄存器的值,或获取寄存器的值显示,可用寄存器类型如下表。

