quote:以下是引用鼠老爹在2011-01-01 23:46:42的发言:
yanxiao的方案很在理,我做PC与PLC通讯所采用的策略基本如此。当时并不在乎效率,而是为了监视PLC的状态。因为下位机的开启是随机的。
在PLC与第三方仪表的通讯中,我还没有这样做过。在我的理念中,只有实时性要求不是很高的场合,与第三方仪表之间才会采用通讯的方式交换数据。因为第三方仪表通常只能作为从站,等待PLC的数据请求,实时性无法得到保障。因此,我认为PLC在通讯上的效率已经无所谓了。
就像现在正在做的一个项目,PC连着数台PLC,每台PLC要轮询16台仪表的32个数据,波特率只能是2400(其它波特率不太容易匹配),每台PLC还要同时处理16个模拟量,下位机分布面积很大。考虑通讯的可靠性,PLC每2秒钟问一个仪表。这样走一圈就需要半分钟。选择通讯是因为这些数据本身的变化速率很慢,且不需要控制,只要监视记录就行了,无需考虑实时性。用户甚至提出每5分钟读一次数据。考虑到PC的屏幕上等待5分钟跳一次数据对操作者实在是一种折磨,还是把轮询的周期定在1分钟(因为想偷懒,暂时还不想进一步缩短周期)。定时也没有什么精度要求,直接用SM0.4的上升沿来触发。
在这种情况下,不在乎下位机是否在线对通讯效率的影响,而是在乎下位机状态是否能在监视终端的PC上显示出来,避免无效数据被压入数据库。
yanxiao为大家提供了一种逻辑方法,若用户有此类要求,不妨一试。