一个项目,需要在尽量少的修改原有西门子S7-1500的程序。如果你想将S7-1500的DB2的数据赋值给DB1,传送给S7-200smart ,可以使用以下步骤:
1. 确保DB块访问设置正确
为了能够通过偏移量访问DB块中的数据,需要将DB块的访问方式设置为非优化。
步骤:
a. 打开DB块的属性设置。
b. 取消勾选“优化块访问”选项,确保块访问是非优化的。
c.注意修改后的DB块要编译。
2、 在OB1中调用`POKE_BLK`指令。
2. 使用`POKE_BLK`指令进行数据块间的数据传递,包括从一个DB块向另一个DB块传递数据。这里直接复制写好的程序,下次好用。
// 位置数字 将数据块DB18中字节6传给DB1中的字节7 ,共1个字节 ,这个指令只能传递整个字节
POKE_BLK(area_src:= 16#84,
dbNumber_src:=18,
byteOffset_src:=6,
area_dest:=16#84,
dbNumber_dest:=1,
byteOffset_dest:=7,
count:=1);
//转发去向数字,临时去向数字 将DB20中的字节2、3传递给DB1的字节10、11
POKE_BLK(area_src:=16#84,
dbNumber_src:=20,
byteOffset_src:=2,
area_dest:=16#84,
dbNumber_dest:=1,
byteOffset_dest:=10,
count:=2);
3、在OB1中调用`POKE_BOOL`指令。想读几个BIT,就只能用BOOL了。
// Put中8 将"8中通讯"."8中要罐" 传递给DB1.DBX22.0
POKE_BOOL(area:=16#84,
dbNumber:=1,
byteOffset:=22,
bitOffset:=0,
value:="8中通讯"."8中要罐");
PEEK_BOOL(
IN area : BYTE; // 存储区域
IN dbNumber : INT; // 数据块号(如果区域是DB块)
IN byteOffset : INT; // 字节偏移量
IN bitOffset : INT // 位偏移量
) : BOOL; // 返回值类型
4、仔细观察昆仑通态中的数据格式和DB块的关系
5、在smart 中调用GET指令,用程序向导设置。
从DB1.DBB7 到DB1.DBB28一共22个字节,放在VB200依次地址中。最后一位是DB1.DBX28.2
在编程中一定要注意DB块地址,S7-200SMART地址,昆仑通态触摸屏地址,我在这里记录下来,年龄大了经常搞错。
1、DB100.DBB0 一个字节有8个位,分别为0---7!例:0.0----0.7共8位。
2、DB100.DBW0一个字有两个字节,分别为 DB100.DBB0和 DB100.DBB1
3、DB100.DBD0一个双字有两个字,分别为 DB100.DBW0和 DB100.DBW2
4、DB100.DBX0.0 一个位,这是最小单位。
5、DBB0有八位:分别为dbx0.0-dbx0.7
6、DBB1有八位:分别为dbx1.0---dbx1.7
6、昆仑通态读取S7-200V区VW、VD和BOOL,从而成功实现了,昆仑通态直读博图改为间接读取博图数据。
7、Modbus-TCP通用父设备及其数据转发
实现原理是,数据转发作为作为子设备,从博图读取数据,其他多屏采用通用父设备读取子设备,在现场实验中,数据丢包严重,延迟较高。
以上就是这个项目的具体实践,成功解决了客户的问题,记录下来作为参考,具体程序看D盘工作文件夹。