问:我有一个改造项目新系统的313c plc需要从老系统上用mpi通讯读取一个模拟量和16个数字量的数据,现在问题是用定义全局数据通讯还是在新系统plc中用sfc67和sfc68通讯,是不是编程通讯比全局数据通讯速度快更稳定?请高手指点。(还要问一句如果用编程通讯的话怎么把定义好的全局数据给删除掉)如果不用全局数据的话,用编程,两个plc在组态里用不用连?是不是只用设置一下地址就行了吧?
答:全局数据通信是plc之间进行的不需要编程通过mpi接口在cpu间循环地交换少量数据,当过程映像被刷新时,在循环扫描检测点上进行数据交换;而无组态的连接的mpi通信(编程通信)通过调用sfc67和sfc68来实现,mpi无组态连接就是mpi通信时,不需要组态,只要编写通信程序即可实现通信,plc之间可以采用双边编程通信和单边编程通信方式,你这里应该是采用单边编程通信方式,因为cpu313c需要从老系统上用mpi通讯读取一个模拟量和16个数字量的数据,只要在cpu313c上进行编程就可以实现数据交换,编程通信要比全局数据传输的数据量要大,速度更快;
你首先必须把两个plc之间的mpi端口连接起来,设定主站cpu313c的mpi通信参数(波特率187.5kbit/s)和主站的mp地址如“3”,不能与老的plc的mpi地址重复,把两个站的波特率设定一样,各自下载到plc中;因为你只想老系统上用mpi通讯读取一个模拟量和16个数字量的数据,在cpu313c中单边编程,在读取数据区只要指定对方的plc的mpi地址和数据区就可以了。
x_put(sfc68)为发送数据的指令,通过此指令将数据写入不在同一个本地s7站中的通信伙伴,其中dest_id为对方的mpi地址(这里指你的老系统plc的mpi地址)和var_addr为对方的数据区,sd为本地数据区,必须保证sd参数定义的数据长度和数据类型与通信伙伴上var_addr一致;
x_get(sfc67)为接收数据的指令,可以从本地站s7站以外的通信伙伴(这里指老系统上plc站)中读取数据,其中参数dest_id和var_addr分别指对方的mpi地址和对方的数据区,rd为本机的数据区必须保证rd参数定义的接收区(cpu313c)至少和由var_addr参数定义的要读取的区域一样大,而且类型必须相匹配。
如果不想要全局数据通信,只要在硬件组态界面中选择菜单options(选项)/define global data“(定义全局数据)界面中,打开全局变量发送和接收组态,断口连接,执行保存编译,下载到plc就可以了。