使用外部存储器时,请阅读以下限制。
5.6.3 外部存储器使用限制
一个D脚本中最多可使用255个地址。在触发条件表达式和脚本程序中,读取的地址数请控制在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脚本前已完成。
参数中不区分大小写。
在D脚本或全局D脚本中,当使用寄存器地址(例如:[w16s:[PLC1]D0100])定义访问类型时,可用的指令和操作符如下所示。
偏移地址
加 (+)、减 (-)、取模 (%)、乘 (*)、除 (/)、赋值 (=)
[w16s:[PLC1]D0100]=[w16s:[PLC1]D0200]*10%5 //正常运行
[w16s:[PLC1]D0100]=20<<1 //发生错误
if([w16s:[PLC1]D0100]==10) { } //发生错误
memcpy([w16s:[PLC1]D0200],[w16s:[PLC1]D0100],5) //发生错误
文件夹名或文件名不能使用以下字符,否则会造成错误
:, = + / " [] | < > ? [空格]
以下限制适用于CF、SD和USB文件操作。
文件名只能使用8.3格式(其中8个字符用于文件名、点号,3个字符用于扩展名)。
要指定根文件夹,请将“ ”(空字符串)指定为文件夹名称。
在触发条件中,不能使用寄存器地址(例如:[w16s:[PLC1]D0100])定义访问类型。
*1 通讯周期时间是指从人机界面从控制器/PLC请求数据一直到人机界面收到数据的这一段时间。它以Bin格式保存在内部寄存器地址区LS2037中。单位为10毫秒。有±10ms的误差。
使用多台控制器/PLC时,可以从[系统设置]-[外接设备列表]页的[控制器/PLC管理地址列表]查看各控制器/PLC与内部寄存器地址的通讯周期。
5.4.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 脚本 ( 或函数 )。
有关数据传输流程图的更多信息,请参阅
22.5.3.1 流程图
LS寄存器(LS20至LS2031和LS2096至LS8191)中的用户区可以为发送/接收函数保存数据。
在[系统设置]工作区的[脚本]设置页面,若未将[类型]设置为[D脚本/全局D脚本],地址LS2032中的第13个位在[D脚本/全局D脚本]运行[串口操作]的标签设置函数(发送、接收、控制、读取状态和接收数据大小)时置ON。
有关特殊继电器的更多信息,请参阅:
A.1.1.3 特殊继电器(Direct Access方式)或A.1.2.3 特殊继电器(Memory Link方式)
当使用发送/接收函数时,将D脚本的位长设置为16位。需要注意的是,如将位长设置为32位,操作就会失败。
发送缓冲器的大小是2048字节,而接收缓冲器的大小是8192字节。在至少80%的接收缓冲器充满接收数据后,ER信号(输出)RS信号(输出)置OFF。
BCD格式运算的限制
如果运算过程中发现了一个不能转换成BCD格式的值,程序会停止运行。
这些值包括十六进制格式中的A至F。
如果程序中止运行,人机界面通用继电器信息(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。
如果程序中止运行,人机界面通用继电器信息(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