首先你要明白消息和字符分别是什么含义。消息是包含字符的。比如要接收的一串消息是:#ajt$,那么:#ajt$一是一个完整的消息,里面的#,a,j,t,$都是里面的字符。smater 200里面的SMW92可以有两个配置,一个是作为字符定时器,一个是作为消息定时器,假如SMW92设置为100ms,那么SMW92两种配置的功能分别是:1,当配置为字符定时器时,在接收#,a,j,t,$这些字符时,这些字符间的间隔不可以超过SMW92设置的100毫秒,如果超过,那么就要中止接收,已经接收到的这些字符当作一个消息存到缓存区。2,当配置为消息定时器时,接收到第一个字符后开始计时,如果计时时间达到SMW92设置的100毫秒,那么就中止接收,已接收的字符存到消息缓存区。
另外你提问的空闲时间,你这样想,如果从站一直不停的给PLC发字符,那么是不是所有发过来的字符都是PLC想要的呢?不一定,有可能是干扰,有可能是其它我不想要的字符,怎么样确定是PLC想要的字符并且开始接收呢?有两个方案,一个是空闲时间来确定,一个是起始字符来确定:1,空闲时间,通过SMW90来设置空闲时间,假如SMW90设置为200MS,那么如果现在距离上次接收消息等于或者超过200毫秒,PLC就开始处于接收状态,具体怎么接收和处理,可以参见上一段。2,接收字符,通过SMB88来设置接收字符,比如如果SMB88=16#17,那么当PLC检测到16进制17这个字符的时候,就开始接收下面的所有字符,如果接收到的不是17而是其它字符,那么就把其它字符忽略,接收开始后的动作,也可参考上面一段。
可能LZ问题已经解决,回答这个问题,考虑到其他有需要的兄弟。
LZ是在研究通信协议吧,如果只是做S700自由口进行Modbus Rtu通讯的话不妨下一个协议库,这样可以节省你开发和调试的时间,也免去了你上面所提的这些困扰。