有关对发送指令XMT的疑问
今天下午看到“找答案”里有一个网友提问,大致的问题是用“串口调试软件”检测发送指令XMT与串口调试软件连接后接收到字符数据的结果与发送的数据不符。
由于网友的程序是采用西门子200编写的,我这里因为没有实际的200 PLC测试,我用200samrt PLC替代,并用prot0口来验证。
网友程序:

我当时回答是发送指令应该使用沿触发或者在中断子程序里调用,后来从他上传了图片就是我模拟了上面的程序(稍有修改通讯地址,网友是使用prot1口)。于是,打开电脑开始仿真网友的程序(因那个程序比较简单也就记住了),一试,程序执行是正常的,见图示:

根据我自己仿真的效果,分析网友可能的原因:
1) 通讯连接“干扰”。但凡串口调试软件通讯电缆相对都比较短,这个“干扰”原因应该是连接错误引起,或者USB转换电缆与PPI电缆及PLC端口接触性不良造成。
重新翻出串口通讯协议关于端口电平的定义,见图示:

PPI多主站电缆连接端子定义应该是见图示:

再看3BF21电缆端口定义,见图示:

及200基于RS485通讯口管脚定义,见图示:

那正确应该是3—3;8—8的连接,当然连接5是公共参考地没有问题,其它方式的连接均是错误的连接。由于可能是错误的连接,串口调试软件无法接收到真实的电平信号,故、接收端串口调试软件所接收的字符出现所谓的“乱码”也变的正常了。
2)没有定义SMB94数据总数值,虽然我在模拟网友的程序中也没有加入这个设置,结果仍然能够正常显示,但这个设置值是自由口通讯编写填写的内容。
3)其次,如果发送指令不采用沿触发,则每一个扫描周期均发送一次数据。另外,发送指令后面加一个线圈也不理解。这个线圈如果是继电器输出型PLC,也将无法正常动作,每个周期切换的速度对于继电器输出执行起来实在是太快了,这里的线圈没有实际意义。
上述2)、3)点与数据出错没有直接的联系。
串口通讯所谓的高电平是+2 ~ +6V,低电平是-2 ~ -6V范围,超出这些范围的电平,发送或者接收数据都将可能产生错误的数据。
4)数据出错可能的原因,网友设置的通讯参数SMB130与串口调试软件设置的通讯参数不一致。如停止位个数、错误的选择了校验方式、数据位个数等。
上述仅仅是一种分析,所谓解铃还需系铃人,正确的答案还是需哪位网友自己来回答。