温湿度设备开发总结

来源:互联网 发布:中国离婚率数据 编辑:程序博客网 时间:2024/05/17 02:58
 

 温湿度设备是S200HT型号,基于RS-485通信接口,报文格式如下:

发送例文:01 03 00 03 00 24 34 0b

接受例文:01 03 04 01 3b 02 d3 ca ff

 

温度值计算:0x013b/10=315/10=31.5(℃);

湿度值计算:0x02d3/10=723/10=72.3%.

 

思路:使用.net的串口进行开发,但是在这之前使用google进行查询是否有现成的代码或者类库。

 

使用.net串口进行开发,模拟相应的发送报文,在标签为2的时候可以成功发送,并接受到相应的报文,但是按照计算,结果不正确。

使用NModbus类库,进行多次测试和应用,结果正确。

总结:第一,遇到问题的首要是不要慌张,告诉自己一定能解决,结果就是能解决的。第二,多使用类库或者别人的经验,这样做的原因主要能快速解决问题,当然如果是学习,可以自己来写,但是工作呢还是快速结束为好,毕竟公司需要你多产出。第三,多思考,结合整体来进行思考。报文的传输,二进制数据传输,如何解析等等。第四,做项目并不是所有的问题都要解决才开始动手,先将大致的框架搭好,然后逐步解决程序中的各个问题,遇到花1-2小时不能解决或者解决无望的情况下,赶紧跳过,进行下一个功能点的开发,将最复杂的放到后面,这样进度就不会受到影响。

 

以下是核心代码:

using (SerialPort serialPort = new SerialPort())

            {

                serialPort.PortName = "COM1";

                serialPort.BaudRate = 9600;

                //以下配置不需要进行手工配置 遵守 RS-485通信协议

                serialPort.Parity = Parity.None;

                serialPort.StopBits = StopBits.One;

                serialPort.DataBits = 8;

                serialPort.Open();

 

                // create Modbus RTU Master by the comport client

                //document->Modbus.Device.Namespace->ModbusSerialMaster Class->CreateRtu Method

                ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(serialPort);

 

                // read the input register 0~9 (30001~300010) of the device slave ID 1

                //document->Modbus.Device.Namespace->ModbusMaster Class->ReadInputRegisters Method

               byte slaveID = 1;//标签ID

                //开始地址为0

                ushort startAddress = 0;

                ushort numOfPoints = 9;

                master.Transport.ReadTimeout = 300;

                try

                {

                    ushort[] register = master.ReadHoldingRegisters(slaveID, startAddress, numOfPoints);

 

                    float temperatureValue = Convert.ToSingle(register[3]) / 10;

                    float humidityValue = Convert.ToSingle(register[4]) / 10;

 

原创粉丝点击