简介:
s7-200提供了256个定时器,依据分辨率分三种类型:1ms,10ms和100ms;依据功能分为延时型定时器和时间间隔定时器。
s7-200可以实现了时钟50/100小时的断电保持,并为客户提供长达200天的电池卡作为更长时间时钟保持的选择。支持microwin软件在线同步时钟,也可通过软件编程实现hmi上更改时钟;此外还支持与hmi之间的时钟同步功能。
1定时器
s7-200指令提供了下述三种类型的延时定时器和时间间隔定时器。
接通延时定时器(ton):用于单一间隔的定时
有记忆的接通延时定时器(tonr):用于累计许多时间间隔
断开延时定时器(tof): 用于关断或者故障事件后的延时
开始时间间隔(bgn_itime):用于读取内置1毫秒计数器的当前值
计算间隔时间(cal_itime):用于计算间隔时间
图1.定时器指令
1.1延时定时器号和分辨率
定时器对时间间隔计数。定时器的分辨率(时基)决定了每个时间间隔的长短。
定时器号决定了定时器的分辨率(时基)。
simatic定时器有三种分辨率:1ms、10ms和100ms。
s7-200提供了256个可供使用的定时器,即用户可用的定时器号为t0-t255,一旦用户选择了定时器号,就意味着定时器的分辨率(时基)已经确定了。定时器号的分辨率(时基)及大计时时间,如下表:
表1. 定时器号和分辨率
定时器类型
分辨率
大定时值
定时器值
tonr
(可保持)
1 ms
32.767s (0.546min.)
t0, t64
10 ms
327.67s (5.46min.)
t1-t4, t65-t68
100 ms
3276.7s (54.6min.)
t5-t31, t69-t95
ton,tof
(不保持)
1 ms
32.767s (0.546min.)
t32, t96
10 ms
327.67s (5.46min.)
t33-t36, t97-t100
100 ms
3276.7s (54.6min.)
t37-t63, t101-t255
编程实现带有定时器功能的程序,在编译时已经通过,为何下载到cpu中时提示出错?
这种情况往往是调用的定时器号与定时器类型不配合造成的。参见上面的表格,如t7只能用作tonr,而不能用于ton或tof。
不同分辨率的定时器按以下规律刷新:
1ms:1ms分辨率的定时器,定时器位和当前值的更新不与扫描周期同步。对于大于1ms的程序扫描周期,在一个扫描周期内,定时器位和当前值刷新多次。
10ms:10ms分辨率的定时器,定时器位和当前值在每个程序扫描周期的开始刷新。定时器位和当前值在整个扫描周期过程中为常数。在每个扫描周期的开始会将一个扫描累计的时间间隔加到定时器的当前值上。
100ms:100ms分辨率的定时器,定时器位和当前值在指令执行时刷新。因此为了保证正确的定时值,要确保在一个程序扫描周期中,只执行一次100ms定时器指令。
注意:不能将同一个定时器号同时用作tof和ton。例如,不能既有ton t32又有tof t32。也不能重复使用同一定时器号定时。
使用定时器加自复位做一个不断重复的计时,调用其他功能或子程序时,为何看起来工作不规律?
请注意《s7-200系统手册》中,或者前文关于三种定时器刷新规律的描述。
按这种方法使用定时器时,定时器的置位、复位可能与程序扫描周期不配合,存在造成上述问题的机制。
定时比较短的定时任务应使用“定时中断”功能,这样更为可靠。
1.2延时定时器的功能
接通延时定时器(ton): 当使能输入接通时,定时器开始计时,在当前值(txxx)与预置值(pt)相等时,定时器位接通。使能输入断开后,定时器当前值清零。在定时器到达预置值后,它会继续计时直到计到大值32767才停止。
有记忆接通延时定时器(tonr): 当使能输入接通时,定时器开始计时;在当前值(txxx)大于等于预置值时,定时器位接通。当使能输入断开时,定时器当前值保留。若要将定时器当前值清零,必须执行复位命令。在定时器到达预置值后,它会继续计时直到计到大值32767才停止。
断开延时定时器(tof): 在输入端接通时,定时器位立即接通,当前值置为零;当输入端由接通转为断开时,定时器开始计时,直到预置时间。当定时器到达预置时间时,则定时器位断开,定时器当前值停止计时。当输入断开的时间小于预设值时,定时器位保持接通。下一次输入断开后,定时器从零开始重新计时直到达到预置值。
只有有记忆接通延时定时器 (tonr)具有断电保持功能。如图2,断电保持性在系统块中设置,系统默认设置t0-t31,t64-t95已保持。
注意:定时器tonr的保持性仅对当前值有效,定时器位不具有保持性。
图2 定时器断电保持设置
在条件调用子程序的主程序中,当停止子程序调用时,如果定时器已经激活正在计时,停止调用这个子程序会造成定时器的失控。不管此时定时器前面的激活条件如何变化,定时器(1ms、10ms 时基的)会一直走到大值,定时器输出也会在达到设定值时接通;(100ms 时基的定时器会在上述情况下停止计时,但在逻辑上处于失控状态)。
如果用 sm0.0 调用子程序;或者在控制逻辑的时序上做到能够保证定时功能完整执行,定时器会正常运行。使用条件调用含有定时器的子程序时,一定要注意时序逻辑,以免造成程序运行错误。
能否在子程序的局部变量中添加定时器类型?
s7-200的子程序不支持添加定时器或计数器的数据类型。
为什么子程序中的定时器和计数器不工作或者工作不正常?
如果有下面情况产生:
一个在内部使用了定时器或计数器的子程序,在同一时刻被调用了多次相同编号的定时器或计数器被多个子程序使用,且同一时刻这些子程序有两个或者以上被调用则定时器或者计数器资源会因重叠使用而相互影响,造成程序逻辑等方面的错误。
1.4时间间隔定时器“bgn_itime”和“cal_itime”
从 step 7 micro/win 版本 4 开始,功能块“bgn_itime”和“cal_itime” 可用于版本 2 开始的 s7-200 cpus 。注意:由于输出是双字格式,大定时时间是49.7天。
接通延时定时器
输入点 i0.0 接通(上升沿) 3 秒后(3000 ms), 输出点 q0.0 置位。
图3 接通延时定时器
带记忆的接通延时定时器
如果输入点 i0.1 的接通时间等于或大于 3 秒 (3000 ms),输出点 q0.1 置位。输入点 i0.2 用于复位。
图4 带记忆的接通延时定时器
断开延时定时器
输入点 i0.3 断开(下降沿) 3 秒 (3000 ms) 后,输出点 q0.3 复位。
图5 断开延时定时器
脉冲发生
通过激活(下降沿)输入点 i0.4,输出点 q0.4 获取一个持续 3 秒(3000 ms)的脉冲。
图6 脉冲发生
下载:
可下载的附件 ton_tonr_tof_tp.zip 是包含上面所示程序的例子项目。
ton_tonr_tof_tp.zip ( 2 kb )
注意:
关于定时功能的更多的信息可参考step 7 micro/win 帮助。
为什么定时器选项中的bgn_itime和cal_itime有红叉?
需要plc版本02.00及以上支持使用。
图7 plc版本支持
1.5长时间计时
由于定时器均有大定时值的限制,microwin中提供的标准定时器的大定时值只能达到3276.7s(54min)。因此如果需要较长时间的定时要求,就需要编程的方式实现。如下有几种方式:
1. 定时器+累加器组合
采用定时器与累加器组合方式,实现长时间计时。如图为t37(时基100ms)每1s计数一次;计数瓶颈在于双字的存储范围(max:2147483647)。
图8 定时器与累加器组合
同样的,也可采用1ms或10ms时基定时器,如需更长时间计时,可采用计数器叠加计数方式。
注意:建议根据项目要求确定,inc_dw填写的存储区是否设置断电保持。
2. 系统时钟 sm0.4,sm0.5
如图所示,使用系统时钟sm0.4和sm0.5,可分别计时长达4085和68年。
适用于对时钟精度不敏感,但需要长时间计时的应用场合。
图9 sm0.4/0.5计时
3. 时间间隔定时器(大49.7天)
采用mircowin自带的时间间隔定时器,可多实现49.7天的定时。
这种方式也是精度高的(时基1ms),适用于要求时钟精度较高的场合。
图10 时间间隔定时器计时
4. 定时中断计数
通过调用定时器t32/96定时器(时基1ms)自触发,并在进入中断程序时计数,可实现长时间定时。
具体编程请参看1.5章节中定时器32及中断例程。
2.定时中断
定时中断为采用定时进入中断的模式,进行精确到ms的计时或数据采样等程序处理。
s7-200有四个定时中断定时器可以触发中断进程,包含两个特殊寄存器(smb34/smb35)和两个定时器(t32/t96)中断。中断定时计时精确,可以用来执行模拟量定时采样等任务。
定时中断使用要点:
1、定时中断程序的执行时间必须小于设定的间隔时间,如图1:
图1. 中断程序的执行时间必须小于间隔时间
2、若定时中断程序的执行时间大于设定的间隔时间,则将导致看门狗时间错误;如图2和图3:
图2. 中断程序的执行时间大于间隔时间
step7 micro/win编程在线连接plc,通过菜单栏“plc”--->“信息”查看到如下图所示的错误:
图3. 看门狗时间错误提示
2.1 定时器t32/t96
定时器t32/t96 的定时时间范围可设置为1~32767ms,对应中断事件号21、22;
左侧管脚pt填写可设置的定时时间:1-32767(单位:ms);
右侧1ms指此定时器的分辨率为1ms;
如pt填写1000,即定时时间为1000*1ms=1000ms=1s;
定时器t32及其中断的使用例程:
实现:每1s定时进入中断一次,并作加1累加计数。
主程序例程:
图4. 定时器t32主程序例程-1
注意:必须调用中间变量(如m0.0)来进行自动重新触发定时器,而不能使用t32的常闭点作为其自动触发条件。
图5. 定时器t32主程序例程-2
调用的atch(中断连接指令),将中断程序int0(管脚int)与中断事件号21(evnt) 联系起来;
调用eni(中断允许指令),启用中断事件。
中断程序例程:
图6. 定时器t32中断程序例程
注意:在中断程序中加入累加计数add,确认进入中断次数并可由此实现长时间计时。
参考例程:
2.2定时中断smb34/35
特殊寄存器smb34/smb35 可设置1~255ms,对应中断事件号10、11;
与t32/t96相类似,同样是设定分辨率为1ms的定时时间,以便进入定时中断。
定时中断smb34的使用例程:
实现:每255ms定时进入中断一次,并作加1累加计数。
图7. 定时中断smb34主程序例程
使用mov_b指令,将需要设定的定时中断时间255,存入到smb34中;
调用的atch(中断连接指令),将中断程序int0(管脚int)与中断事件号10(evnt) 联系起来;
调用eni(中断允许指令),启用中断事件。
中断程序例程:
图8. 定时中断smb34中断程序例程
定时中断(smb34/smb35)长定时为255ms,如何实现更长时间的定时?
可以采用t32/t96中断,长时间可到32.767s。在定时中断服务程序中对进入中断的次数进行计数,也能实现更长时间的中断延时。
定时中断个数不够怎么办?
每个定时中断服务程序不一定只能处理一项定时任务,可以把几个任务放在一个定时中断服务程序中。
对于定时间隔不同的任务,可以计算出它们的定时长度的大公约数,以此作为定时中断的时间设置。在中断服务程序内部对中断事件进行计数,据此编程别处理不同的任务。
s7-200中可以定义8个pid回路,pid计算就是在定时中断程序执行的。pid编程向导会自动按以上方法处理。
参考例程:
3.实时时钟
s7-200的硬件实时时钟可以提供年、月、时、分、秒的日期/时间数据。
cpu221、cpu222没有内置的实时时钟,需要外插“时钟/电池卡”才能获得此功能。cpu224、cpu226和cpu226 xm都有内置的实时时钟。
s7-200的时钟精度典型值是2分钟/月(25°c),大误差7分钟/月(0 - 55°c)。
为了提高运算效率,应当避免每个程序周期都读取实时时钟。实际上可读取的小时间单位是1秒,可每秒读取一次(使用sm0.5上升沿触发读取指令)。
使用程序读取的实时时钟数据为bcd格式,可在状态图中使用十六进制格式查看。
cpu靠内置超级电容(+外插电池卡)在失去供电后为实时时钟提供电源缓冲;缓冲电源放电完毕后,再次上电后时钟将停止在缺省值,并不开始走动。
要设置日期、时间值,使之开始走动,可以:
用编程软件(micro/win)的菜单命令plc > time of day clock...,通过与cpu的在线连接设置,完成后时钟开始走动编用户程序使用set_rtc(设置时钟)指令设置micro/win可以通过任何编程连接实现实时时钟的设置。
3.1用 micro/win设置时钟
通过编程软件 micro/win 设置 cpu 的时钟,必须先建立编程通信连接。
在 micro/win 菜单中选择“plc > 实时时钟”命令,打开“plc 时钟操作”对话框:
图中:
要设置时钟的 cpu 网络地址,取决于在“通信”界面中的选择
设置日期:选择需要修改的数据字段,直接输入数字,或者使用输入框右侧的上下按钮调整
设置时间:选择需要修改的数据字段,直接输入数字,或者使用输入框右侧的上下按钮调整
读取 pc 时钟:按此按钮可以读取安装 micro/win 的 pc 机的本机时间
读取 plc 时钟:按此按钮读取 plc 内部的实时时钟数据
根据需要选择夏时制调整选项
按“设置”按钮,将上面的时钟日期数据写入 plc
3.2读写时钟指令-bcd格式
read_rtc(读时钟)和set_rtc(设置时钟)指令靠数据缓冲区在用户程序与硬件芯片间交换数据,它们的缓冲区格式相同。
表1. 时钟缓冲区
* 1 = 星期日,7 = 星期六,0 = 表示禁止计星期t 就是缓冲区的起始字节地址,可以由用户自由设置(在cpu允许的v存储区范围内)。如果设置t为vb100,那么读取时钟后,“年”的信息就会保存在vb100中,“月”保存在vb101中。
read_rtcx(扩展的读时钟)和set_rtcx(扩展的设置时钟)指令从plc读取/设置当前时间,日期及夏令时。它们的缓冲区共占用19个字节格式前8个字节与表1完全一致,后11个字节见下表2。
表2 扩展的时钟缓冲区
*1:
00h=修正已禁用
01h=欧盟(相对于utc的时区调整=0小时)
02h=欧盟(相对于utc的时区调整=+1小时)
03h=欧盟(相对于utc的时区调整=+2小时)
08h=欧盟(相对于utc的时区调整=-1小时)
10h=美国
11h=澳大利亚
12h=澳大利亚(塔斯马尼亚)
13h=新西兰
参考例程:
本例程需要 micro/win v3.2 sp4 以上版本打开。
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。
3.3clock integer 指令库-十进制格式
使用 step 7-micro/win中标准的read_rtc(读取实时时钟)和 set_rtc(设置实时时钟)指令时, 读取和设置的数据格式都是 bcd 码的。如果觉得不便计算、处理,可使用 clock integer 指令库。
clock_integer 指令库用于将 bcd 码格式的 s7-200 日期、时间转换为十进制整数格式,以及将十进制整数格式的日期、时间值设定为 s7-200 时钟。
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。
要使用 clock_integer 指令库,须遵循下列步骤:
取得 clock_integer 指令库文件,并添加到编程软件 step 7-micro/win 中;
按照要求编写用户程序调用 clock_integer 指令库。
clock_integer 指令库
点击上面的链接下载 clock_integer 指令库到本地计算机硬盘,建议保存在 micro/win 安装目录的 lib 文件夹中。以下是一个完整路径的例子:
c:\program files\siemens\step 7-micro/win v4.0\lib
然后将指令库库手动添加到 micro/win 软件中。
成功添加指令库后,用户可以在step7 micro/win的指令树中找到‘clock_integer (v1.0)'
图2.clock_integer 库
3.4clock_integer 指令库编程应用 - 读取系统时钟
1、调用 read_rtc_i,读取 plc 时钟 ,并将其转换为十进制整数格式 :
表 3. read_rtc_i参数
参数
数据类型
注释
en
bool
信号为‘1’时激活库指令
address
dword
起始偏移地址,转换为十进制格式的 plc 时钟被保存在以此地址为起始地址的 8 个字节中
2、分配库存储区:
调用指令 read_rtc_i 或 set_rtc_i 后,必须定义 8 位(一个字节)的 v 存储区为库存储区。
表4. 8 字节时间缓冲区的格式
address
年
address+1
月
address+2
日
address+3
小时
address+4
分钟
address+5
秒
address+6
保留
address+7
星期(1)
(1) 1 = 星期天;7 = 星期日;0 = 禁止星期
如图 2 所示,当 v50.0 为 ‘1’ 时,转换后的实时时钟被存储在 vb10 至 vb17 中。
在状态表中用户可以看到:
图4.状态表
可以看出,此时的 plc 时钟为: 2006 年 4 月 6 日,23 时 48 分 1 秒,星期四。
注意:此指令库读取的整数格式时钟数据以连续字节的形式保存,而后续的整数运算需要一个字(两个字节)长度的数据。编程时要注意这一点。
3.5clock_integer 指令库编程应用 - 设置系统时钟
1、调用 set_rtc_i,将以十进制整数格式存储的日期时间设定为 plc 时钟
图5.set_rtc_i
参数
数据类型
注释
en
bool
信号为‘1’时激活库指令
address
dword
起始偏移地址,以此地址为起始地址的 8 个字节中,应已经存储着用户时间数据
表5. set_rtc_i 参数
8 字节时间缓冲区的格式同表 2。
2、分配库存储区:
调用指令 read_rtc_i 或 set_rtc_i 后,必须定义 8 位(一个字节)的 v 存储区为库存储区。
注意:该例程必须使用 micro/win v4.0 sp3 或以上版本软件打开。
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。
注意:
cpu221、cpu222 没有内置的实时时钟,需要外插“时钟/电池卡”才能获得此功能。
只有 step7 micro/win v3.2+sp4 和 v4.0 版本才支持使用该指令库。
在使用 ‘set_rtc_i’ 设定 plc 时钟时,被设定的时间必须有实际意义,否则设定操作不能成功完成。例如: 不能将月份设为 13,或者将分钟设为 61 等。
address 端必须输入地址指针,如:&vb10,&vb20;或者为双字地址,如:vd100,md10,ac0等,在该地址中存有地址
3.6时钟保持性,电池卡
在 cpu 停电时,实时时钟的走动靠 cpu 的内置超级电容供电。如果停电时间较长,只能在 cpu 上插入电池卡以保持时钟。
时钟电池卡:内部兼有实时时钟和备份电池,专用于cpu221/cpu222
bc293:电池卡,为cpu数据保持提供电源。用于cpu224/224 xp/226保持数据和实时时钟数据
cpu224及以上的cpu具有内置的实时时钟,而cpu221及cpu222需要外加时钟电池卡才具有实时时钟功能。
s7-200的时钟电池卡/电池卡,在连续无供电时,可使用200天(即保持数据达200天)。cpu在不断电的情况下电池卡有效寿命为10年。
注意:时钟电池卡/电池卡均为1次性使用,不可充电。
可通过下表查看保持时间:
表6. s7-200新cpu(23版)的数据保持时间
表6. s7-200新cpu(23版)的数据保持时间
3.7同步操作面板与 s7-200 控制器的日期和时间
hmi 人机操作界面与 s7-200 的时钟同步功能包括两个方向的时钟同步:
plc 到面板的时钟同步。
西门子操作面板可分为硬件时钟面板(tp/op/mp270,mp370 等)和软件时钟面板(xp170x, xp177x,k-tp178 micro 等)。软件时钟面板和无备份电池的硬件时钟面板, 当断电关机后, 面板的内部时钟就会丢失, 回到出厂时的状态。但面板可以通过设置,来定时读取 plc 的硬件时钟信息,以保持和 plc 时钟一致,这就是 plc 到面板的时钟同步。
面板 到plc的时钟同步。
与上述相反,即用面板的时钟来校准 plc 的系统时钟。plc 实际上是得到面板的时钟信息后,调用相应设置时钟的函数(或者通过用户编制的程序),更改自己的系统时钟,以保持和面板时钟一致。在本文所提供的例程中,实现的是用 plc 的时间同步面板系统时钟,同时可以在面板上修改 plc 的时钟,从而间接地修改了面板的系统时钟。
s7-200cpu到面板的时间同步主要操作步骤如下:
1. 在 s7-200 中编程读取 cpu 系统时钟。周期调用 read_rtc 函数,以读取 s7-200 cpu 的系统时钟,将时钟信息存放在 v 存储区,比如 vb100。
图6. 读取 s7-200 实时时钟
2. 在面板上配置时钟同步功能
plc 到面板的时钟同步。请先设置好通讯参数;然后在“区域指针”页内,建立“日期/时间 plc”, 指向 s7-200 中存放时间信息的区域 vw100 即可。见下图:
图7. 在 wincc flexible 中配置面板时钟同步
请先设置好控制器的通讯参数;然后插入“日期/时间-plc” 区域指针, 指向s7-200 中存放时间信息的区域vw100即可。见下图:
图8. 在 protool 中配置面板时钟同步
3.8面板上在线修改s7-200 实时时钟
通过操作面板修改 s7-200 的实时时钟,主要有以下几个步骤:
1. 在面板上建立相应的输入变量
可以新建一个标志变量(比如:地址为 v20.0)和用于触发 s7-200 cpu 的写实时时钟功能,建立年、月、日、时、分、秒 、星期等 byte 变量,按照 s7-200 时钟缓冲区的格式分别连接到 plc 的连续 v 存储区中,比如:vb70 – vb77。
因 s7-200 时钟设置指令的要求,这些 byte 变量必须是以 bcd 格式存在,在配置时可选用“16进制”数据格式。在面板上设置的数据必须是有效的 bcd 格式的时间、日期数据,包括星期的信息(有如需要,星期信息可能需要进行必要的转换处理),否则会导致时钟同步失败。(如果使用上文提到的clock integer 指令库,则可选用10进制数据格式)
2. 在 s7-200 中编程,用标志变量触发来调用 set_rtc,将 vb70 起始的缓冲区地址作为时间参数传递给该函数,来实现通过面板修改s7 plc时间。
图9. 编程设置 s7-200 时钟。其中 v20.0 为触发写时钟的标志。
3.9时钟指令常问问题
clock_integer 指令库和 micro/win 指令树中的读、写实时时钟指令有什么不同?
clock_integer 指令库读出或写入的 plc 时钟是以十进制整数格式存储;而读、写实时时钟指令读出或写入的 plc 时钟为 bcd 码格式。
写时钟指令(todw)为何不能正常改写时钟内容
写时钟指令需要严格按照8个字节的时钟缓冲区格式,设置相应的数据单元,任何不合格的数据都可能造成不能写入的现象。注意数据的格式必须是bcd格式,可以说是将10进制数换成16进制表示,如16#59(59h)就是59(秒/分等)。
执行写时钟指令要保证缓冲区所有字节都包含合法数据;仅修改某些数据时,其他字节不能包含非法数值,否则会发生错误。
写时钟指令必须使用一次性的脉冲(沿)触发条件,不能持续激活写时钟指令。
如何实现 k-tp 178 micro 面板与 s7-200 的时钟同步?
步骤和方法与上述2.7章节内容相同。
4.step 7-micro/win32的指令库
为了便于用户的编程,micro/win提供了对指令库的支持。指令库就是独立于具体工程项目文件,而与micro/win集成的子程序集。
micro/win可以集成两种类型的指令库:
西门子提供的标准指令库
用户自定义的指令库
指令库存在于micro/win指令树的libraries(指令库)分支中:
图1. 指令库
一个子程序中可以包括几个子程序、中断服务程序。可以如同调用子程序一样在用户程序中使用指令库中的子程序;如果调用的子程序中用到了指令库中的中断程序,micro/win会自动调用,不必用户处理。
和子程序一样调用库指令
调用库指令后,可以查看子程序的局部变量表,一般都可以找到参数的意义和格式(除非生成库时没有指定)如果生成库时指定了密码,库指令的内容无法查看
西门子指令库还可能需要在编程时分配库指令内存区
4.1分配库指令数据区
调用step 7 - mciro/win32 v3.2 instruction library(指令库)需要分配库指令数据区(library memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。
如果在编程时不分配库指令数据区,编译时会产生许多相同的错误(错误18)。
操作步骤(以modbus rtu库指令为例):
步:在指令树的project(项目)中,以鼠标右键单击program block(程序块),在弹出的快捷菜单中选择library memory。如图1所示:
图2.分配指令库
第二步:在弹出的选项卡中设置库指令数据区,如图2所示:
图3. 缺省情况下是从vb0开始,但因为与modbus的保持寄存区冲突,所以手动改为vb2000。按“suggest address”按钮也可以自动分配。
可以使用suggest address(推荐地址)设置数据区,但要注意编程软件设置的数据区地址,只考虑到了其他一般寻址,而未考虑到诸如modbus数据保持寄存器区等的设置。应当确保不与其他任何已使用的数据区重叠、冲突。不应重复按suggest address按钮,否则也会造成混乱。
在step 7-micro/win32 v3.1中,有分配库指令数据区时有不同的操作方法,需要在symbol table(符号表)中设置一个首地址。我们强烈建议使用当时新的编程版本。
4.2添加指令库
注意:添加自定义指令库,需要关闭编辑库指令的项目,新建立一个项目。如果要添加其他来源的库指令自然不需要如此。
步:在micro/win的file(文件)菜单中选择add/remove libraries...(添加/删除指令库)命令 ;或者在指令树的libraries(指令库)分支上单击鼠标右键,选择add/remove libraries...
图4. 选择添加/删除指令库命令
添加/删除对话框中将显示已经在本机的micro/win中集成的用户自定义指令库。
图5. 已安装的库指令
第二步:按add(添加)按钮,选择新定义的库文件路径。用户自定义库将自动添加到micro/win指令树的libraries分支下。
图6. 选择库文件
缺省情况下,micro/win到图8中的路径下寻找库指令文件。用户也可以指定其他路径。但要注意库文件应当保持在非移动的介质上,如果指定了一个可移动硬盘,则硬盘不在时会发生找不到库的错误。建议用户使用缺省设置。
4.3删除库指令
步:选择添加/删除指令库命令
图7. 选择命令
第二步:选中须卸载的库所对应的库文件,按remove(删除)按钮
图8. 选中要删除的库指令文件