综述
485串口通讯基本在工控领域成为了一种必须具备的通讯方式。不管是PLC、DCS,大到大型的设备,小到一个单片机,基本都会具有485的通讯功能。485通讯只是定义了硬件接口的标准,至于在硬件上跑什么样的协议各个设备厂家会有些不同。我们见到的可能多的就是MODBUS_RTU这种协议。协议的来龙去脉就不研究了,我们只做一个通讯的测试。因为很多时候需要使用MODBUS_RTU通讯方式在仪表与控制器之间进行数据交换。前段时间正好有个流量计需要与200Smart进行通讯。使用200Smart进行串口通讯我也是次使用。由于疫情等种种原因,到现场测试比较难。所以想着在住的地方测试一下串口通讯及程序的工作过程。一、
准备工作
1、硬件准备首先是准备了一个200Smart,具体型号是SR20简单的那一个。再就是准备一个USB转485的通讯线或者通讯板。还有就是要准备一个9针的DB接头(就是公头),网上有免焊接的那种卖,使用起来比较方便,也不贵。 2、软件准备STEP 7-MicroWIN SMART编程软件肯定是必须的,还有就是在电脑上模拟从站的软件。常见的是Modbus Slave和ModSim32。我还是比较喜欢使用ModSim32,纯属个人习惯,这次使用的也是ModSim32。3、辅助材料交换机,网线,手机充电线,当然还需要买个小螺丝刀。二、
200Smart测试程序
200Smart有两个串口通讯库,一个是做主站,一个是做从站。这次使用的是200Smart做主站。1、Modbus RTU 主站初始化梯形图 Baud波特率,根据实际情况设置。Parity 校验。Port 端口,0代表的是CPU本体自带的串口。Timeout 超时,主站等待从站反应时间。Done初始化完成,此位会自动置1,Error 错误代码。 程序运行的实际截图。2、Modbus RTU 主站读写子程序MBUS_MSG网上很多介绍。我也抄来的,但是里面有个地方觉得还是要说一下,就Count这个是定义读取从站多少寄存器,读取的寄存器数量不能比从站提供的数量大,否则会有Error 错误代码102报出来。觉得看错误代码很重要,能确定通讯过程中的错误点。 3、数据处理上面的程序中,如果读写功能完成,M11.0为1,错误码是0,说明通讯功能正常了。有一个很大的缺陷,即使通讯正常了, 200Smart本体上没有任何指示灯提示,这一点很不好。1200PLC使用的小板通讯是会看到指示灯的闪烁,多少能给一些提示。所以建议做通讯测试的时候使用带有指示灯的通讯板,方便调试。通讯成功后就要处理读取的数据,数据一般就是浮点数,长整型。存储类型VD和VB,DW。使用的指令有MOV_R, MOV_B, MOV_DW。MOV_R转出来的是浮点数,MOV_B转出来的是整数,MOV_DW转出来的是长整型。具体如下。
三、
ModSim32设置和模拟从站
在电脑上运行ModSim32模拟从站来响应主站的数据读取。1、ModSim32的RTU设置参数主要是波特率,数据位、停止位、奇偶校验。这几个参数与200Smart的MBUS_CTRL配置相统一,设置好通讯的参数后,确定。 返回到ModSim32的数据页面。如下图 这里主要有Device ID:也就是从站地址,要与200Smart中的MBUS_MSG指令的Slave一致。Address是寄存器起始地址,长度要比在200Smart中设置的要长。MODEBUS Point Type是寄存器类型。要与200Smart中的一致,我们一般使用03功能码居多,也就是保持型寄存器。设置好这些后,NOT CONNECTED就会消失。说明通讯已经建立。如果NOT CONNECTED一直在闪烁。说明通讯没有建立。 还有一点就是我使用的是我们自己设计的多功能通讯板,USB转485,USB转TTL,USB转232,TTL转485。板上带有485通讯指示灯,只要看RX和TX的闪烁情况就能判断通讯情况。如下图: 设置好这些后,就可以查看200Smart与ModSim32之间的数据交换是否一致。 2、设置ModSim32自动发送数据 双击要设置的寄存器地址。弹出Write Floating,在弹出的窗口中点击Auto Simulation在Auto Simulation窗口中使能打钩,选择随机数,或者递增、递减。设置好后OK确认。返回到数据页面,可以看到ModSim32的40001寄存器的数据在不断更新。如下图: 如果你看到的ModSim32的数据与200Smart显示的数据格式不统一,可以在ModSim32的显示设置中选择不同的数据格式,ModSim32的显示格式可以在Display中选择。具体如下图: 从这些数据类型中选择。直到与200Smart数据显示一致。到此200Smart与ModSim32通讯测试完成。在公司测试程序基本可以了,也可以测试开关量。过程基本一样,只是这次没使用到,就没有测试。四、
总结
通过上述的模拟485通讯的模拟测试,主要有以下几个要点:(1)PLC端是串口通讯指令的设置和通讯触发,尤其是通讯触发是一个上升沿脉冲,这个一般没有什么问题。关键的一点是200Smart没有通讯指示灯,给调试带来不少的困扰。有时候设置正确了,但是数据显示不正确,会怀疑设置问题,走一些弯路。(2)再一个就是接线问题。在200Smart本体CPU的串口使用的是3和8脚,刚开始不确定,问了一回杰杰大神,哈哈。有时候485的A、B可能是反的,换一下试试。(3)再一点就是使用通讯板要好一点,好是带485通讯指示灯。如果使用网上买的一些USB转485的线,都是为了图省钱,没有任何指示灯,给通讯测试带来不少困扰。(4)ModSim32的ID地址、寄存器类型一定要与PLC的一致,还有些情况就是数据类型不对,出现数据溢出。次调试还是会带来困扰。数据显示格式也要多试试。只要看到通讯指示灯状态正常,就说明硬件接口是对的,剩下就是数据类型。(5)还有一点就是200Smart中的转换指令,要分清是浮点数,整数,长整型。这个与存储器的长度有关,如果选错长度,转换出来的数据也是乱的。调试多了可能一眼就看出来,但是次调试还是会耽误不少时间。基本就这些,调试中多试试,提前做点功课,问题不大。尝试,失败,再尝试,总结,成功。