您当前的位置:五五电子网电子知识电工技术电工技术基于Modbus协议的智能压力传感器研发(二) 正文
基于Modbus协议的智能压力传感器研发(二)

基于Modbus协议的智能压力传感器研发(二)

点击数:7249 次   录入时间:03-04 12:00:14   整理:http://www.55dianzi.com   电工技术

(2) 在具体编写程序时,把寄存器数组的所有只写属性放入flash 
            
  然后初始化读出。上位机发信息,下位机解释相应命令,读出或写入相应数据。在编写执行03、06、16任务模块时我们把要读取的寄存器数组的起始下标和要读取的数据个数分别根据modbus功能码中的起始地址高、低位和寄存器数高、低位设定成一个变量,这样简化了程序,可读性强。
                
  (3)modbus协议规定,当设备使用rtu模式通信时,整个报文帧必须以连续的字符流发送。报文帧由时长至少为3.5个字符时间的空闲间隔区分。如果两个字符之间的空闲间隔大于1.5个字符时间,则报文帧被认为不完整应该被接收节点丢弃。而在实际通信过程中由于每帧消息不定长,所以程序中最主要的问题是如何找到modbus消息帧的开始和结束时间点,并且要满足两个字符之间的空闲间隔和两个报文帧之间的空闲间隔。程序的解决方法:接收采用中断方式并采用了可重复触发的可编程单稳方式进行处理,在利用modbus协议通信时保证了实时性接收。

  (4)对于报文发错问题(即不符合要发送的报文),已用crc校验程序对其处理。对于发送不符合要求的传感器地址、功能代码、数据、从机设备故障、从机设备忙碌、超时等问题,通过发送不正常响应信息来进行处理。而且上位机也编写了相应的程序代码。
                
  (5) 对于零漂、温漂的补偿以及线性化的问题,通过软件进行补偿处理的。实验证明,系统精度可以控制在千分之五之内。

上位机串口通信是采用 visual basic语言编写,visual basic提供了面向对象的可视化编程工具。开发人员只需按设计要求在屏幕上“画”出所需的用户界面来,并设置这些对象的属性,不必为用户界面设计而编写大量的程序代码[7]。相对于传统编程语言,visual basic最突出的特点是事件驱动编程机制。每个事件都能驱动一段程序的运行。程序员只需编写响应用户动作的代码,各个动作之间不一定有联系,这样的程序一般较短,且易于编写和维护。在visual basic中为了完成串行通信,使用了mscomm控件,它可实现对串口的数据发送和接收。为了实现自动发送功能,还用到了timer控件。这两个控件在程序运行时都是不可见的[8][9],在设计时把它们放在窗体的右上角即可。图3为modbus串口协议通信界面。此串口通信主要完成的功能:
                
  (1)搜索传感器配置信息:当用户在用此传感器时,可能不清楚挂接传感器地址位置以及串口所使用的波特率,为此编写了相应的程序方便用户查询。
                
  (2)读传感器配置信息,包括地址、量程、增益、波特率、程序代码、修正系数、功能代码等。此部分根据modbus功能码03编写,严格按照rtu帧格式编写。
                
  (3)写传感器配置信息。用户可以根据自己的要求,更改地址、量程、增益、波特率、程序代码、修正系数、功能代码等。此部分是根据根据modbus功能码06或16编写。
                
  (4) 采集传感器工作状态。包括传感器压力、供电电压、环境温度、零漂、故障信息等。

部分程序如下:

            private sub timer1_timer()
                if star_find = true then    `如果有启动搜索命令标志
                 area_num = area_num + 1
                 mscomm1.outbuffercount = 0
                if area_num >= 248 then   `如果现波特率下超出下位机地址范围,则地址清零,重新换波特率搜索
                        area_num = 0
                        timer1.enabled = false
                        ll= msgbox("该波特率下无法搜索到下位机地址,请改变波特率!", vbok, "提示")
                    end if
                    call start_find   `开端口,将搜索命令发给下位机,并确定mscomm1.rthreshold属性
                end if
                if star_read = true then     `如果有启动读命令标志
                    call start_read   `开端口,将读命令发给下位机,并确定mscomm1.rthreshold属性
                end if
                if star_write = true then     `如果有启动写命令标志
                    call start_write       
            `开端口,将配置信息强置给下位机,并确定mscomm1.sthreshold属性
                end if
                if star_acq = true then     `如果有启动采集命令标志
                    if acq_end = true then  `如果有结束采集命令标志
                        timer1.enabled = false  `关闭时钟
                        acq_end = false     `清除结束采集命令标志
                    end if
                    call start_read  `开端口,将读命令发给下位机,并确定mscomm1.rthreshold属性
                end if
            end sub
            
  4.3 编程时应注意以下几个问题
                
  (1) 下位机从应答到发送数据并返回回应消息有一定的时间间隔,程序已根据不同波特率对其进行设定。保证对下位机的信息正确读取。
               
  (2) 在搜索传感器配置信息时,若搜索不到,要有提示通信出错信息,不能无限时间搜索。
                
  (3) 每一次的传输是0-255之间的数据,必须把inputmode属性设置为1(默认为0),表示以二进制格式取回数据。否则当设置为0时,超过128的部分会被当成双字节文字处理,结果出现错误。
             
5  结束语
                
  利用上述的软硬件设计方法,通过 vb6.0的mscomm控件可以做到基于modbus通信协议的上位机与下位机的相互通信。该方法编程简单、实用,运行稳定可靠,操作简便易行,通用性强,同时降低了开发成本,很好的满足了工业现场的要求。


本文关键字:压力传感器  智能  电工技术电工技术 - 电工技术