大金空调485通信代码(哪位大神有C#Rs485通讯代码?)

发布日期:2024-05-08 23:56:09 更新时间:2024-11-22 04:25:42 浏览次数:2672  

哪位大神有C#Rs485通讯代码?

我有!我是用485转232的。

大金空调485通信代码(哪位大神有C#Rs485通讯代码?)

using?System;

using?System.Collections.Generic;

大金空调485通信代码(哪位大神有C#Rs485通讯代码?)

using?System.Linq;

using?System.Text;

using?System.IO.Ports;

namespace?serial

{

????public?class?ModBus

????{

???????///?

????????///?modbus状态

???????///?

????????public?static?string?modbusStatus;?

????????///?

????????///?定义SerialPort变量

????????///?

????????public?static?SerialPort?Port?=?new?SerialPort();

????????///?

????????///?打开串口

????????///?

????????///?串口号

????????///?波特率

????????///?数据位

????????///?奇偶校验

????????///?停止位

????????///?返回BOOL型,True为成功,False为失败

????????public?static?bool?OpenPort(string?m_Port,?int?BaudRate,?int?m_dataBits,?Parity?m_Parity,?StopBits?m_StopBits)?

????????{

????????????if?(Port.IsOpen)

????????????{

????????????????return?true;

????????????}

????????????else?

????????????{

????????????????Port.PortName?=?m_Port;

????????????????Port.BaudRate?=?BaudRate;

????????????????Port.DataBits?=?m_dataBits;

????????????????Port.Parity?=?m_Parity;

????????????????Port.StopBits?=?m_StopBits;

????????????????Port.Open();

????????????????if?(Port.IsOpen)

????????????????{

????????????????????return?true;

????????????????}

????????????????else

????????????????{

????????????????????return?false;

????????????????}

????????????}

????????}

????????///?

????????///?关闭串口

????????///?

????????///?返回BOOL型,True为成功,False为失败

????????public?static?bool?PortClose()?

????????{

????????????if?(Port.IsOpen)

????????????{

????????????????Port.Close();

????????????????return?true;

????????????}

????????????else?

????????????{

????????????????return?false;

????????????}????????

????????}

????????public?static?void?GetCRC(byte[]?message,??byte[]?CRC)

????????{

????????????//Function?expects?a?modbus?message?of?any?length?as?well?as?a?2?byte?CRC?array?in?which?to??

????????????//return?the?CRC?values:?

????????????ushort?CRCFull?=?0xFFFF;

????????????byte?CRCHigh?=?0xFF,?CRCLow?=?0xFF;

????????????char?CRCLSB;

????????????for?(int?i?=?0;?i?

????????????{

????????????????CRCFull?=?(ushort)(CRCFull?^?message[i]);

????????????????for?(int?j?=?0;?j?

????????????????{

????????????????????CRCLSB?=?(char)(CRCFull?&?0x0001);

????????????????????CRCFull?=?(ushort)((CRCFull?>>?1)?&?0x7FFF);

????????????????????if?(CRCLSB?==?1)

????????????????????????CRCFull?=?(ushort)(CRCFull?^?0xA001);

????????????????}

????????????}

????????????CRC[1]?=?CRCHigh?=?(byte)((CRCFull?>>?8)?&?0xFF);

????????????CRC[0]?=?CRCLow?=?(byte)(CRCFull?&?0xFF);

????????}

????????///?

????????///?CRC16算法

????????///?

????????///?原始数组

????????///?保存变量

????????public?static?void?BuildMessage(byte[]?te,?ref?byte[]?message)

????????{

????????????//Array?to?receive?CRC?bytes:?

????????????byte[]?CRC?=?new?byte[2];

????????????for?(int?i?=?0;?i?

????????????{

????????????????message[i]?=?te[i];

????????????}

????????????GetCRC(message,?CRC);

????????????message[message.Length?-?2]?=?CRC[0];

????????????message[message.Length?-?1]?=?CRC[1];

????????}

????????///?

????????///?发送数据

????????///?

????????///?需写入的数据

????????///?操作类型0为多输出口控制与open参数不共用,1为单控制口输出open为255时线圈闭合0时线圈释放

????????///?1为单控制口输出open为255时线圈闭合0时线圈释放

????????///?返回True或false

????????public?static?bool?SendMessage(byte?m_date,int?type,bool?open=true)?

????????{

????????????if?(!Port.IsOpen)

????????????{

????????????????return?false;

????????????}

????????????else?

????????????{

????????????????switch?(type)?

????????????????{

????????????????????case?0://多个DO输出控制数据位{?地址,?功能,?线圈起始地址前位,?线圈起始地址后位,?线圈结束地址前位,?线圈结束地址后位,?数据字节,?线圈状态?};

????????????????????????byte[]?data?=?new?byte[10];

????????????????????????byte[]?dd?=?{?1,?15,?0,?0,?0,?8,?1,?m_date?};

????????????????????????ModBus.BuildMessage(dd,?ref?data);

????????????????????????Port.Write(data,?0,?data.Length);

????????????????????????break;

????????????????????case?1://单个控制输出{?地址,?功能,?线圈起始地址前位,?需控制的线圈地址,?开关状态255为开0为关,?线圈开关后位?};

????????????????????????byte[]?data_one?=?new?byte[8];

????????????????????????byte?temp0;

????????????????????????if?(open)

????????????????????????{?temp0?=?255;?}

????????????????????????else

????????????????????????{?temp0?=?0;?}

????????????????????????byte[]?dd1?=?{?1,?5,?0,?m_date,?temp0,?0?};

????????????????????????ModBus.BuildMessage(dd1,?ref?data_one);

????????????????????????Port.Write(data_one,?0,?data_one.Length);

????????????????????????break;

????????????????????case?2:

?????????????????????????byte[]?getsig?=?new?byte[8];

?????????????????????????byte[]?getsige?=?{?1,?2,?0,?0,?0,?m_date?};

?????????????????????????ModBus.BuildMessage(getsige,?ref?getsig);

?????????????????????????Port.Write(getsig,?0,?getsig.Length);

????????????????????????break;

????????????????????case?3:

????????????????????????break;??????????????

????????????????}

????????????????return?true;

????????????}

????????}

????????#region?Check?Response

????????private?static?bool?CheckResponse(byte[]?response)

????????{

????????????//Perform?a?basic?CRC?check:?

????????????byte[]?CRC?=?new?byte[2];

????????????GetCRC(response,??CRC);

????????????if?(CRC[0]?==?response[response.Length?-?2]?&&?CRC[1]?==?response[response.Length?-?1])

????????????????return?true;

????????????else

????????????????return?false;

????????}

????????#endregion

????????#region?Get?Response

????????private?static?void?GetResponse(ref?byte[]?response)

????????{

????????????//There?is?a?bug?in?.Net?2.0?DataReceived?Event?that?prevents?people?from?using?this?

????????????//event?as?an?interrupt?to?handle?data?(it?doesn't?fire?all?of?the?time).??Therefore?

????????????//we?have?to?use?the?ReadByte?cmand?for?a?fixed?length?as?it's?been?shown?to?be?reliable.?

????????????for?(int?i?=?0;?i?

????????????{

????????????????response[i]?=?(byte)(Port.ReadByte());

????????????}

????????}

????????#endregion?

????????public?static?bool?GetModbusData(ref?byte[]?values)?

????????{

????????????if?(Port.IsOpen)?

????????????{

????????????????int?count?=?Port.BytesToRead;

????????????????if?(count?>?0)

????????????????{

????????????????????byte[]?readBuffer?=?new?byte[count];

????????????????????GetResponse(ref?readBuffer);

????????????????????//?CRC?验证?

????????????????????if?(CheckResponse(readBuffer))

????????????????????{

????????????????????????//显示输入数据?

????????????????????????values?=?readBuffer;

????????????????????????Port.DiscardInBuffer();

????????????????????????return?true;

????????????????????}

????????????????????else

????????????????????{

????????????????????????Port.DiscardInBuffer();

????????????????????????return?false;

????????????????????}

????????????????}

????????????????else?return?false;

????????????}

????????????else?return?false;

????????}

????}

}

通信基站大金空调的故障代码

按住遥控器上的定时取消键约六秒可进入自检,然后根据显示代码查故障方便点

好判断啊。

一分钟左右运转的是否正常?比如外机风扇,压缩机是否运转?压力是否正常?

设定是否正常?

都正常检测各个传感器是否正常?

快修店
为大家整理了液晶电视、冰箱、空调、洗衣机、热水器等11种家庭电器的故障及维修方法,希望可以帮助大家自己维修家电的小故障。
家电知识 家电知识 家电知识 故障知识 故障解答 故障解答

企业网站开发经验,成熟的技术,完善的服务,公正的价格!