22.10.1 D脚本/全局D脚本限制

*1 通讯周期时间是指从人机界面从控制器/PLC请求数据一直到人机界面收到数据的这一段时间。它以二进制数据形式保存在内部寄存器LS2037中。单位为10毫秒。有+/-10ms的误差。
使用多台控制器/PLC时,可以从[系统设置] - [外接设备列表]的[控制器/PLC管理地址列表]查看各控制器/PLC与内部寄存器地址的通讯周期。
5.4.13 [系统设置] - [外接设备列表]设置指南

*2 显示扫描时间是处理一个画面所需的时间。它以二进制数据形式保存在内部寄存器LS2036中。单位为毫秒(ms)。有±10ms的误差。

 

使用Memory Link和其他控制器的触发条件操作

根据为触发条件指定的寄存器,画面切换后或打开电源时由触发条件激活的D脚本操作如下:

O:在画面切换或接通电源后立即执行操作。

X:在画面切换或接通电源后不立即执行操作。

 

全局D脚本的特定限制

 

串口端口操作的限制

 

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]