在D脚本编程中,三个地址与一个部件占用的内存一样多。D 脚本的最大可用地址数是 255。触发表达式和脚本程序中使用的寄存器总数。尽可能少地使用地址,因为使用的寄存器越多,响应速度越慢。
D脚本不能在浮点值(浮点变量或实型变量)或结构变量上执行计算。
也不能对结构变量 执行计算。但是,可以对结构变量的单个元素执行计算。
D脚本的大小影响显示扫描时间。需要注意的是,使用大量地址可能会极大地削弱程序性能。
执行写入控制器 /PLC 地址时,请勿为脚本的触发条件指定 [连续操作]、[位ON]、[位OFF]、[条件成立]或[条件不成立]。否则,由于通讯处理不能跟上大量的写入指令,会显示错误消息。
要启用[连续操作],请使用人机界面内部寄存器或临时地址。
当使用[位ON]、[位OFF]、[条件成立]或[条件不成立]触发条件注册多个脚本时,并且脚本运行时终止与控制器/PLC通讯时,新脚本也不会执行。重建通讯后,脚本从所有注册的脚本中开始运行。
即使该处理在窗口画面上运行脚本设置,重建通讯后,脚本从基本画面脚本中开始重启。
最多可以创建9个嵌套层。
最多可以创建254个函数。
如果在执行D脚本命令的同时将一个值分配给一个用于切换画面的地址时,将在所有D脚本都处理完成后才处理画面切换操作。
例如:
ID:00000
数据类型 = Bin,数据长度 = 16Bit,符号 = 无,触发 = 位ON ([b:M0000])
[w:[PLC1]D0100]=0 // (1)
[w:[#INTERNAL]LS0008]=30 // (2)切换至基本画面号30。
[w:[PLC1]D0101]=1 // (3)
[w:[PLC1]D0102]=2 // (4)
当执行了上述D脚本时,画面切换处理在处理完(3)和(4)后进行。
如果D脚本中使用的数据是使用人机界面触摸操作创建的,确保数据写入操作在运行该D脚本前已完成。
*1 通讯周期时间是指从人机界面从控制器/PLC请求数据一直到人机界面收到数据的这一段时间。它以Bin格式保存在内部寄存器地址区LS2037中。单位为毫秒。有+/-10 ms的误差。
使用多台控制器/PLC 时,可以从[系统设置]窗口的[外接设备列表]页中,[控制器/PLC 管理地址列表]中的内部寄存器地址中检查通讯周期。5.19.13 [外接设备列表]设置指南
*2 显示扫描时间是处理一个画面所需的时间。它以Bin格式保存在内部寄存器地址区LS2036中。单位为毫秒。有±10ms的误差。
使用Memory Link和其他控制器的触发条件操作
根据为触发条件指定的设备,画面切换后或打开电源时由触发激活的D脚本操作如下:
O:在画面切换或接通电源后立即执行操作。
X :在画面切换或接通电源后不立即执行操作。
当使用全局D脚本时,仅当GP上电时执行上述操作。当画面切换时,上表不适用,会继续监视触发条件。
若将D脚本触发条件设置为[定时器],使用D脚本切换画面时定时器开始计时。
若将全局D脚本触发条件设置为[定时器],人机界面开机时定时器开始计时。
不要使用触摸屏键来设置触发位或操作程序中的开始位。因为触摸输入的时机可能不正确,从而导致不正确的位输入。
全局D脚本的特定限制
画面切换或其他GP操作过程中全局D脚本操作暂停。
人机界面上电后,全局D脚本操作直到初始画面的所有数据读取完毕后才执行。
在初始画面切换后,全局D脚本操作可以在数据读取完成前执行。
全局D脚本的最大可用控制器数是 255。(触发表达式和脚本程序中使用的寄存器总数。)
当超过这个数时,D脚本不会运行。由于这些寄存器在无论画面为何均读取数据,因此请务必在D脚本中使用尽可能少的寄存器。否则可能影响操作性能。
最多可使用32个全局D脚本。当前使用的函数也算作一个全局D脚本。当全局D脚本数达到32时,将忽略所有后续的全局D脚本。
发送/接收函数中指定的地址不算作D脚本地址。
控制变量是只写变量,而状态和已接收数据是只读变量。读取控制变量或将数据写入状态变量会导致操作失败。
请为发送和接收操作创建单独的 D 脚本 ( 或函数 )。
有关数据传输流程图的更多信息,请参阅21.5.3.1 流程图
LS寄存器(LS20至LS2031和LS2096至LS8191)中的用户区可以为发送/接收函数保存数据。
在[系统设置]中的[脚本]设置页面,若未将[类型]设置为[D脚本/全局D脚本],地址LS2032中的第13个位在[D脚本/全局D脚本]运行[串口操作]的标签设置功能时(发送、接收、控制、读取状态和接收数据大小)置ON。
有关特殊继电器的更多信息:A.1.4.3 特殊继电器 (Direct Access方式)或A.1.5.3 特殊继电器(Memory Link方式)
当使用发送/接收函数时,将D脚本的位长设置为16位。需要注意的是,如将位长设置为32位,操作就会失败。
发送缓冲器的大小是2048字节,而接收缓冲器的大小是8192字节。在至少80%的接收缓冲器充满接收数据后,ER信号(输出)RS信号(输出)置OFF。
BCD格式运算的限制
如果运算过程中发现了一个不能转换成BCD格式的值,程序会停止运行。
这些值包括十六进制格式中的A至F。
请勿使用这样的值。如果程序由于非BCD值而停止,人机界面通用继电器信息(LS2032)中的位7置ON。该位直到人机界面关机或进入离线状态时才置 OFF。
例如,
[w:[PLC1]D0200]=([w:[PLC1]D0300]<<2)+80
如果D300是3,左移两位的结果是0x000C,不能将其转换成BCD格式,因此中断程序运行。
[w:[PLC1]D0200]=[w:[PLC1]D0300]<<2
与上面的例子不同,0x000C是将保存在内存中的运算结果,不会造成程序停止。
零运算的限制
如果在除法(/)和取模(%)运算中除以零,程序将停止。请勿除以0。
请勿使用这样的值。如果程序由于非BCD值而停止,人机界面通用继电器信息(LS2032)中的位8置ON。该位直到人机界面关机或进入离线状态时才置 OFF。
赋值运算中的延迟注意事项
在赋值运算中使用寄存器地址可能造成写延迟,因为人机界面必须从外接控制器中读取地址数据。考虑如下的问题:
例如,
[w:[PLC1]D0200]=[w:[PLC1]D0300]+1 // ...1
[w:[PLC1]D0201]=[w:[PLC1]D0200]+1 // ...2
语句(1)将(D0300+1)赋值给D0200。但是,在语句(2)中,由于与控制器/PLC的通讯耗时较长,语句(1)的结果尚未赋值给D0200。在这种情况下,编程时应先将语句(1)的结果保存在LS区,如下所示。
[w:[#INTERNAL]LS0100]=[w:[PLC1]D0300]+1
[w:[PLC1]D0200]=[w:[#INTERNAL]LS0100]
[w:[PLC1]D0201]=[w:[#INTERNAL]LS0100]+1
处理负数时的注意事项
对于那些在其不接受负数*3的参数中输入了负数的函数来说,输入的数将当作不带符号的数*4进行运算。
*3 例如,_CF_read()参数的“字节数”不能接受负数,因为它是被读取的数据大小。
*4 例如,[-1]被当作16位的65535和32位的4294967295进行处理。
在相同D脚本中读取相同寄存器地址时注意事项
即使在相同D脚本/全局D脚本中使用相同的寄存器地址,从寄存器地址中读取的值也会由于D脚本或全局D脚本处理时间的不同而有所不同。
要避免这种情况,请编程脚本,把数据临时保存在内部寄存器或临时地址中。
示例
使用内部寄存器时(USR区)
[w:[#INTERNAL]USR20000]=[w:[#MEMLINK]0100]
[w:[#INTERNAL]USR00000]=[w:[#INTERNAL]USR20000]
[w:[#INTERNAL]USR00001]=[w:[#INTERNAL]USR20000]
使用临时地址时
[t:0000]=[w:[#MEMLINK]0100]
[w:[#INTERNAL]USR00000]=[t:0000]
[w:[#INTERNAL]USR00001]=[t:0000]
脚本执行期间,内置函数不会受到参数变化的影响。但,下列函数可能受影响。
执行这些函数上的脚本时,请编程不会更改参数的脚本。
memring
_memshift
_memsearch