今天来和大家聊一聊串行通讯的问题。做咱们这行的,应该都使用过通讯,可能是以太网,profibus,等等,但最基本的也是最简单常用的一种通讯方式就是串行通讯,西门子的PLC(S7-200/300/400)系列都支持,只不过使用的是不同的模块,不同的接口,和不同的程序块而已。我们的工程师对此应用都写过相应的文档,需要的朋友可以从下面的链接来下载,希望对您有帮助。
S7-200:
http://www.ad.siemens.com.cn/download/DocList.aspx?TypeId=0&CatFirst=1&CatSecond=153&CatThird=-1
文档编号为 A0136
S7-300/400:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=cp340
文档编号为A0081 和A0440
好像在给我们的文档做广告呢,不过对初次使用的朋友还是有帮助的,赶快进入正题吧。
昨天上午我们有一个用户打热线咨询问题:“使用CP341和多个仪表做自定义串行通讯,通过轮询的方式读取仪表的数据,但通讯不通”,一听就知道用户在现场遇到问题了,那就尽量帮助用户解决问题吧。
先了解用户对产品是否熟悉,热线上经常会遇到用户到了现场调试,但对软件、产品所知甚少,什么都不知道,想帮也帮不上,但有时用户不理解,会说一些让工程师伤心的话,巧妇也难做无米之炊呀。
还好通过和谢工(用户姓谢)沟通,比较熟悉S7-300和Step7,只不过是CP341以前没使用过,但在公司调试过一段时间,有基础。
谢工描述问题很清楚(这点很重要,如果用户描述不清也很难办),这下心里有谱了,凭自己多年的经验,问题肯定能解决(不好意思,过于自信^_^),那就讲讲如何查出问题并解决的吧(最后问题圆满解决)。
首先看 CP341硬件上的TxD和RxD灯的状态,如果有规律的交替闪烁,说明硬件通讯正常,如果只有TxD有时会亮,说明硬件通讯问题或程序问题。很不幸谢工现场只是TxD不时闪一下。
接下来查硬件连接,因为有多个站需要轮询,网络是RS485总线结构,通讯线是谢工自己焊的,使用的是屏蔽双绞线,CP341接口处使用的是15针接头,2和4针脚短接,9和11针脚短接,仪表处使用的是9针接头,使用2和3针脚,CP341上15针的4针脚连到了仪表9针接头的2针脚,11针脚连到了3针脚。谢工说完全按照手册的接线图焊的线,用户经常遇到这样的问题,手册上是这样画的,但CP341上2和4针脚短接,9和11针脚短接是在内部完成了,外部不需要短接,如果使用485接口方式,只需要使用4和11针脚就可以了。说改就改,改完一试,问题依旧。有思想准备,咱们继续查。
接下来看一下模块信息,确认模块有没有问题,显示OK。接着检查硬件配置,传输波特率,数据位,停止位,校验方式,接收完成条件,接口设置,都要和仪表方保持一致,检查发现波特率错了,还是默认的9600bps,应该设成19200。改完一试,TxD和RxD交替闪烁,漂亮极了(当时谢工说的),没检查之前谢工还说过波特率没有问题,看来最不应该出问题的地方也最容易忽略。
说到这里谢工的问题应该就算解决了,既然已经谈到这个话题,那么我们就假设一下,如果波特率也没有错误,硬件配置都正确并和仪表一致,那么我们还需要检查什么呢?
您肯定想到了,检查程序呗,我也是这么认为的,应该检查程序。程序涉及到的东西很多,发送的机制,如何接收数据,报文的组织与解析,FB7/8有没有报错信息,等等很多东西。咳,说了这么多都是废话,没错,检查所有的程序会很困难,并会受到已有思路的限制,因为肯定已经查了很多遍了,能查出来早就查出来了,那怎么办呢?如果是自己编的程序,那就好办,重新编一个简单的通讯程序,可以借用原有的程序,但一定要重新编,换个思路,这样虽然会花点时间,但能够很快找到程序的问题,相信经验比较多的朋友会有同感。如果重新编了,问题找到大家都高兴,如果还是和通讯伙伴不能通讯,并确认程序没有问题了,那就要考虑对方的问题了,那这时该怎么做呢?
如果对方的设备可以调试,那就要检查对方,如果对方不能调试,那只能使用串口调试小软件通过计算机来测试了(计算机上需要使用RS232-485转换器),模拟一下对方的通讯,可以看到我们发出的报文是否正确,并可以使用调试软件发数据给CP341,如果正常,说明是对方设备有问题。如果仍然不能正常通讯,我们还需要检查什么呢?
个人认为如果上面的步骤都作过了,仍不能解决问题,就要考虑硬件是否损坏;还有就是如果使用了RS232-485转换器,是否转换器有问题(转换器最好使用有源的);再有就是通讯伙伴间报文间隔匹配问题,通讯电缆长度问题,通讯线质量,干扰等问题。
写了这么多,只是谈了一些自己的想法,相信您会有更多的经验和解决问题的方法,真诚的希望您和大家分享。