C_编程实现Modbus通讯协议

所需积分/C币:48 2018-06-17 11:19:31 675KB PDF
收藏 收藏 3
举报

了解Modbus通讯协议,工作中遇到需要编写一个与温度湿度传感器通讯的软件,刚好有用
32 新乡学院学报 串口,为读取温湿度数据做准备,再将地址码、功能面显示出房间号、温度及湿度数据。若读取温湿度 码、寄存器地址和个数等命令传送给温湿度变送器。数据时岀现错误,将提示相应的错误信息。 温湿度变送器收到命令后,将数据反馈回上位机,由 public bool sendfc3() 上位机提取出温湿度数据,并在界面中显示 4 Modbus协议的编程实现 short values=new shorl 23]; 41串口设置 if (sp IsOpen) 串口参数的正确设置是数据采集与传输的前 /清除接收和发送缓存区 提,参考程序如下。 d Out Buffer() sp. PortName=this.CK.ext;//设置串口号 sp. DiscardInBuffer( sp. Baudrate=int. Parse(this.BTL.Text);//设置波特 byte message=new byte[ 81 byteL 9] sp Data Bits= int, parse( this. SJW, Text);/设直数据建立发送命令数据 Build Message(rcf mcssagc sP. Stop Bits=( Stop Bits Enum. Parse( typeof(sop/发送命令数据到串口并读取接收到的数据 Bits),this.TZW.Text);//设置停止位 sp Parity=-(Parity)Enum Parse( typeof( Parity ) this JYW.Text);//设置校验位 p. write( message,o, message Length) 42发送数据方法 Buildmessage( GetResponse (ref response); 该方法主要功能是将地址码、功能码、寄存器地FJH.Text= Convert. ToString( messages); 址、寄存器个数和CRC校验码合成命令发送给温湿获取温度数据 度变送器,实现主机命令的询问。使用 BuildMes string WDI= Convert. ToString( response3]<8 ae(方法发送命令,内存占用少且响应速度快,可 response) 快速地读取温湿度数据,提高采集效率。程序如下 string wd2-Convert ToInt32(WDI, 16) public void BuildMessage(ref byteLI message ToString (); int WD3-Convert. ToInt32( WD2)/10 bytel] CRC-new byte[2] WD. Text-Convert. ToString(WD3) messageLC]=Convert. ToByte( DZM. 'Text 'Trim());//teetH /获取湿度数据 码 string SD1=Convert ToString( response[ 5]<<8 message[1]=Convert. ToByte(GNM. 'Text 'Trim()); //13 能码 string I)2=Convert. ToInt32(SD1. 16) message[2]=(byte)(Convert. Tolnt32(JCQDZ. Text.Trim T ()》8);/寄存器地址 nt sD3=Convert. Tolnt32(SD2)/10 message[3]-Convert. ToByte(JCQDZ Text. Trim()) SD. Text=Convert. ToString (SD3 message[4]-( byte)( Convert. ToInt32(JCQGS. Text. Trim )》8);//寄存器个数 catch (Exception err) messageL51-Convert. ToByte(JCQGS. Text. Trim() Gctcro( mcssagc, ref cro);//取得CRC校验码 MessageBox. Show( Error in rcad event:+ mcssagc[ mcssagc. Lcngth2-CRC-0] err. Message) cturn fals. mcssagc[ mcssagc Length-1=CRC_1] 43温湿度数据读取 /检验接收到的数据 if( CheckResponsc(responsc)) 程序首先判断串口是否打开,若已打开,则清除 接收和发送缓存区,然后将发送的命令数据mcs MessageBox. Show( Read successful"); iage写入串口的输出缓存区;再由温湿度变送器对 eturn true: 接收到的 mcssagc进行校验后返回数据 rcsponsc 之后程序对 responise进行解析,并分别在上位机界else 21994-2015ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp://www.cnki.net 崔晶,徐晓光,倪康,夏雯娟:C艹编程实现MυdbuS通信协议 33· 工具、集成开发环境(IDE)等工具,可实现基于C MessageBox. Show( CRC error") 的 Modbus串口通信,该界面设计简洁清晰,操作简 return false 单,便于实现。。 6结束语 文中通过Ⅴ isual studio2010上位机软编程件 实现了基于C+语言的 Modbus串行通信,可完成 MessageBox. Show( Serial port not open") 工业自动化控制系统中的远程数据采集及监测等功 return falsc 能。该通信系统编程模式简单、易于使用、有较强的 实时性和有效性。 参考文献: 5 Modbus通信测试界面 1]梁斌王.叩响C#之门「M1.北京:它子工业出版社, 该通信测试界面采用 Visual studio2010实 2009:1-8 现 Modbus通信测试界面设计如图2所示。Ⅴisua「21李正军,现场总线及共应用技术「Ml.北京:机械工业 Studio2010是微软公司推出的开发软件,具有基本 出版社,2005:76-87 完整的开发工具集包括了如UM工具、代码管控3]翟希述,王宝兴,范森基于VslC井的串口通信程 序设计凵J」.乜子科技,2011(2):24-26 率 据何 4 NASKAR S, BASULI K, SARMAR SS. Serial Port s v Dala CoInmunication Using MODBUS Protocol_JJ 厉号 并口 Ubiquity,2008(3):65-68 英闭和口 5]金海琴,陈兴,翟林鹏.基于 Modbus协议的串行通信 的应用].也子设计工程,2013(8):157160 发活数提 t t址 6]祝红涛,玉伟平,郝相林.轻松学C编程_M].北京: 化学工业出版社,2012:1-19. 图2测试界面 Modbus Communication Protocol Achieved by rogram CUI Jing, xU Xiaoguang, NI Kang XIA Wenjuan College of electrical Engineering, Anhui Polytechnic University, Wuhu 211000, China Abstract: Modbus communication system was developed by using C# programming language, which took tempera- ture and humidity acquisition system as an example. Slave machine was temperature and humidity testing modules th Modbus communication function. Multiple modules were connected via bus 485, and the communication bus was connected to a PC serial port though RS232 RS485 converter. System software accessed each module with Modbus protocol. Thus multi point temperature and humidity acquisition was achieved. Keywords: C#; Serialport: Modbus; temperature and humidity 【责任编辑梅欣丽 21994-2015ChinaAcademicJournalElectronicPublishingHouse.Allrightsreservedhttp://www.cnki.net

...展开详情
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐