西门子的 S7-200 USS 标准指令库包括 14 个子程序和 3 个中断服务程序。但是只有 8 个指令可供用户使用。一些子程序和所有中断服务程序都在调用相关的指令后自动起作用。
每个 USS 库应用都要先进行 USS 通信的初始化。使用 USS_INIT 指令初始化 USS 通信功能。
图 1. 选择 USS_INIT 指令
打开 USS 指令库分支,像调用子程序一样调用 USS_INIT 指令。
图 2. 调用 USS_INIT 指令
图中:
= | 1 | 设置 Port 0 为 USS 通信协议并进行相关初始化 |
0 | 恢复 Port 0 为 PPI 从站模式 |
= | 2400 |
2400 bit/s |
4800 |
4800 bit/s |
|
9600 |
9600 bit/s |
|
19200 |
19200 bit/s |
|
38400 |
38400 bit/s |
|
57600 |
57600 bit/s |
|
115200 |
115200 bit/s |
USS_INIT 子程序的 Active 参数用来表示网络上哪些 USS 从站要被主站访问,即在主站的轮询表中激活。网络上作为 USS 从站的驱动装置每个都有不同的 USS 协议地址,主站要访问的驱动装置,其地址必须在主站的轮询表中激活。USS_INIT 指令只用一个 32 位长的双字来映射 USS 从站有效地址表,Active 的无符号整数值就是它在指令输入端的取值。
表 1. 从站地址映射位号 | MSB 31 |
30 | 29 | 28 | ... | 03 | 02 | 01 | LSB 00 |
---|---|---|---|---|---|---|---|---|---|
对应从站地址 | 31 | 30 | 29 | 28 | ... | 3 | 2 | 1 | 0 |
从站激活标志 | 0 | 0 | 0 | 0 | ... | 1 | 0 | 0 | 0 |
取 16 进制无符号整数值 | 0 | ... | 8 | ||||||
Active = | 16#00000008 |
在这个 32 位的双字中,每一位的位号表示 USS 从站的地址号;要在网络中激活某地址号的驱动装置,则需要把相应位号的位置设为二进制“1",不需要激活 USS 从站,相应的位设置为”0"。最后对此双字取无符号整数就可以得出 Active 参数的取值。
在表 1 的例子中,我们将使用站地址为 3 的 MM 440 变频器,则须在位号为 03 的位单元格中填入二进制“1"。其他不需要激活的地址 对应的位设置为”0"。取整数,计算出的 Active 值为 00000008 h,即 16#00000008,也等于十进制数 8(如图 1.中的 d)
建议使用 16 进制数,这样可以每 4 位一组进行加权计算出 16 进制数,并组合成一个整数。当然也可以表示为十进制或二进制数值,但有时会很麻烦,而且不直观。
如果一时难以计算出有多个 USS 从站配置情况下的 Active 值,可以使用 Windows 自带的计算器。将其设置为科学计算器模式,可以方便地转换数制。
USS 指令库需要大概 400 个字节的 V 存储区用于支持其工作。调用 USS_INIT 指令后就可以为 USS 指令库分配库存储区。也可以在编程的稍后阶段分配存储区地址,但这一步是必不可少的,否则程序无法通过编译。
根据 S7-200 中的数据存储区分配原则,分配给库指令的数据区绝对不能与其他程序使用的数据区有任何重叠。否则会造成出错。
参见:库存储区分配
用户程序调用 USS_INIT 指令可以重复定义通信口的模式,以恢复为 PPI 从站模式,或者再次定义为 USS 主站模式。
对于只有一个通信口的 S7-200 来说,恢复通信口为 PPI 从站模式但仍保持 CPU 为 RUN 状态可以提供程序调试的便利。CPU 上的工作模式选择开关可以用来简单地实现此功能。
特殊存储区位 SM0.7 的值对应于模式选择开关的位置, 开关位置为 RUN 时,SM0.7 = 1;开关位置为 STOP 时,SM0.7 = 0。 开关从 RUN 或者 STOP 位置拨到 TERM 时, CPU 不改变工作模式。
实际编程如下:
图 3. 通信端口的重定义用法