begin
for j:=1 to 42 do //把42个库位的自动配烟数的值高低字节调换位置存入buffer数组
begin
c0:=table1.fields.fields[j>.asinteger;
clow:=c0 shl 8;
chigh:=c0 shr 8;
cdate:=clow xor chigh;
buffer[j-1>:=cdate;
end;
anzahl:=42;
dbno:=i; //DB块
dwno:=1; //第1个数据字,即DW2
res := db_write(dbno,dwno,@anzahl,@buffer);
函数db_write()的作用是从PC机的数组变量“buffer”中给PLC的第“dbno”个数据块中从“dwno”个数据字开始写“anzahl” 个数据字。如果数据块不存在,将返回错误信息的代码。如果要写的数据字数目的长度超过了数据块的长度,要写的数据字的长度将得到更正,同时此函数还返回303H的错误信息。
需要特别注意的是:数据在缓冲区存放的顺序是从高字节到低字节。而Object Pascal语言中,变量类型为word的变量,它的数据存放顺序是从低字节到高字节。因而,在对所读取的数据进行操作时或给PLC数据块中写数据字时要进行相应的处理。
结束程序之前,必须调用适配器函数unload_tool断开PC机与PLC的连接。否则,将引起PC机死机,或者系统紊乱。
由于数据上传与数据下载的实现方法相近,限于篇幅,数据上传实现的方法本文不予介绍,请读者参考数据下载实现方法部分。
4结束语
运用DELPHI开发环境编写的PLC控制程序调试软件,具有界面友好、人机交互功能方便、数据库功能强大灵活的优点,具有一定的通用性和实用性。而且通过调用PRODAVE S7软件包的动态链接库实现PC机对PLC CPU318-2DP数据的读写操作,不但数据传输数率快,而且数据传输正确率高。在对PLC控制系统的调试过程中,可以大大缩短调试周期,提高工作效率。此通信技术的实现对西门子工控产品的应用及PROFIBUS现场总线的推广应用有着广泛普遍的重要意义。