SIEMENS西门子六盘水授权总代理
当在程序中使用 "I..." 或 "Q..." 对输入、输出进行访问时,实际上并未直接访问输入、输出模板,而是访问 CPU 的系统存储区。此 "I"/ "Q" 区分别被称作输入过程映像区 (PII) 和输出过程映像区 (PIQ)。只有在过程映像区刷新时刻,I 区和 Q 区的内容才与输入/输出的实际值相同,所以它们并不能直接反映输入/输出的实际状态。因此,在某些需要对输入/输出进行较为实时处理的场合,需要选择使用直接外设寻址。
若将 I/O 输入输出模块 I/O 地址分配在过程映像区以外,必须通过外设寻址方式访问这些 I/O。
外设寻址
过程映像区不能涵盖整个 CPU 的输入/输出地址区域。如,CPU 315-2DP (6ES7315-2EG10-0AB0) 的 I/O 地址总量*大为 2048 字节,但其过程映像区的大小为 128 字节。
一旦所要使用的模板 I/O 地址超出了过程映像区范围,就必须使用外设寻址。外设地址使用户程序与外设地址进行快速数据交互。这一点对模拟量和过程报警尤为重要。
通过外设寻址同样可以访问已被分配过程映像的 I/O 地址区域。
外设寻址意指直接访问外设模板,在地址前加上字母 ''P'' 来表示:
PIB --> Peripheral bbbbb Byte 外设输入字节
PQB --> Peripheral output Byte 外设输出字节
PIW --> Peripheral bbbbb Word 外设输入字
PQW --> Peripheral output Word 外设输出字
PID --> Peripheral bbbbb Double-word 外设输入双字
PQD --> Peripheral Output Double-word 外设输出双字
下列情况需要使用外设寻址:
模板地址未分配至过程映像区
用户程序需要比过程映像更为实时的输入值
输出值需要即刻输出至模板 (至少一个字节)
共享符号和局部符号
符号使得可以采用具有某种意义的符号名来代替**地址进行工作。使用简短的符号和详细的注释能满足有效程序创建和良好程序文档的要求。
本地符号和局部符号的区别如下:
共享符号 | 局部符号 | |
有效性 | 在整个用户程序中有效 能被所有块使用 在所有块中有相同的含义 在整个用户程序中的名称必须是的 | 仅在对其进行定义的块中有效 同一个符号可以根据不同用途在不同的块中使用 |
允许的字符 | 字母,数字,特殊字符 除0x00, 0xFF和引号的变元音符号 当使用特殊字符时,符号必须位于引号中 | 字母 数字 下划线 ( _ ) |
用法 | 可定义共享符号用于: I/O信号 (I, IB, IW, ID, Q, QB, QW, QD) 外围输入/输出(PI, PQ) 位存储器(M, MB, MW, MD) 定时器 (T)/ 计数器(Z) 代码块(OB, FB, FC, SFB, SFC) 数据块 (DB) 用户定义数据类型 (UDT) 变量表(VAT) | 可定义局部符号用于: 块参数(输入, 输出和输入-输出参数) 块静态数据 块临时数据 |
定义点 | 符号表 | 块的变量声明表 |
注意事项:
在代码中,共享符号通过引号("...") 被识别,而本地符号通过前面标识符(#)识别。识别由STEP 7自动实现。但是,如果一个符号既作为共享符号,又作为局部符号存在,那么必须明确指明它的标识以避免混淆。此外,使用包含空格的共享符号时也需要该标识
在一个S7项目下创建2个CPU,而一个CPU需要利用另一个CPU的点
比如2#CPU想利用1#CPU的 I13.0这个DI点,怎样编程才能使2#CPU看到1#CPU的相应点?
答:不知道你用多少个信号需要传输,如果多的话就用通讯方式。
你的cpu通过什么方式和上位机连接的?
我给你一个方法:通过tcp/ip方式传输数据。我是用315-2dp+cp343-1lean来实现的。首先在硬件组态的网络组态中点击一个cpu,然后在下面的窗口中双击local id插入一个iso-on-tcp connection,注意这个连接的block bbbbbeter参数中的id和laddr。在通讯编程中要用到的。然后编译保存网络。并分别下载到两个cpu中。
然后cpu1用西门子做的fc5(ag_send)发送数据,cpu2用fc6(ag_recv)接受数据,发送接受的规则是慢发快收防止丢包,比如你在200ms中发送,100ms中接受因为是定时中断中发送接受的,所以发送功能和接受功能的act参数就都是1,就行了。id和laddr参数就是上面说的id和laddr参数。send引脚是你要发送的数据的起始地址和数据长度,len是是发送的数据长度和send引脚包含的那个数据长度一致就行了。剩余三个参数就不用我说了。