123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.IO.Ports;
- using System.Threading;
- namespace Tps_LQ_Transmitter.com
- {
- /// <summary>
- /// PCM控制与数据发送类
- /// </summary>
- class PcmControl:MySerial
- {
- SerialPort serial = null;
- public PcmControl()
- {
- serial = new SerialPort();
- serial.PortName = "COM5"; //PCM模块是RS232通信共用计算机的串口COM5
- serial.BaudRate = 115200;
- serial.DataBits = 8;
- serial.StopBits = StopBits.One;//停止位设置为com_stop的值
- serial.Parity = Parity.None;//获取奇偶校验选项的值
- serial.ReadTimeout = 1000; //读取等待时间1000
- serial.RtsEnable = true;
- //this.DataReceived += new System.IO.Ports.SerialErrorReceivedEventHandler(this.Serial_DataReceived);
- if (!serial.IsOpen)
- {
- serial.Open();
- }
- }
-
- public override void portClose()
- {
- serial.Close();
- }
- /// <summary>
- /// PCM读写方法
- /// </summary>
- /// <param name="data">数据</param>
- /// <param name="delay">延时</param>
- /// <returns></returns>
- public byte[] WriteRead(byte[] data, int delay = 50)
- {
- if (data == null)
- return null;
- //先读空
- if (serial.BytesToRead > 0)
- serial.DiscardInBuffer();
- byte[] crc = crc16(data);
- byte[] newarray = new byte[data.Length + 2];
- Array.Copy(data, newarray, data.Length);
- newarray[data.Length] = crc[0];
- newarray[data.Length + 1] = crc[1];
- serial.Write(data, 0, data.Length);
- Thread.Sleep(delay);
- if (serial.BytesToRead > 0)
- {
- byte[] dat = new byte[serial.BytesToRead];
- serial.Read(dat, 0, dat.Length);
-
- return dat;
- }
- else
- {
- return data;
- }
- }
- /// <summary>
- /// PCM仅读方法
- /// </summary>
- /// <returns></returns>
- public byte[] OnlyRead()
- {
- if (serial.IsOpen == true)
- {
- if (serial.BytesToRead > 0)
- {
- byte[] dat = new byte[serial.BytesToRead];
- serial.Read(dat, 0, dat.Length);
- return dat;
- }
- else
- {
- return null;
- }
- }
- else
- {
- return null;
- }
- }
- /// <summary>
- /// PCM设置命令发送
- /// </summary>
- /// <param name="mode">发送模式选择:"UART"/"HDLC"</param>
- /// <param name="choice">"ODD"/"EVEN"/"NONE"/"FALL"/"RISE"</param>
- /// <param name="baudrate">波特率</param>
- /// <returns>结果</returns>
- public bool Setting(string mode,string choice,int baudrate )
- {
- int u = 0;
- if (mode.ToUpper()=="UART")
- {
- u = u | 0x01;
- }
- else if (mode.ToUpper() == "HDLC")
- {
- u = u | 0x41;
- }
- if (choice.ToUpper() == "ODD")//奇校验
- {
- u = u | 0x02;
- }
- else if (choice.ToUpper() == "EVEN")//偶校验
- {
- u = u | 0x04;
- }
- else if (choice.ToUpper() == "NONE")//无校验
- {
- u = u | 0x00;
- }
- else if (choice.ToUpper() == "FALL")//下降沿
- {
- u = u | 0x08;
- }
- else if (choice.ToUpper() == "RISE")//上升沿
- {
- u = u | 0x00;
- }
- int d =((50000000 / baudrate) + 2);
- bool bolrd = false;
- byte[] byst = { 0xF0, 0x0F, 0x02, 0x00, 0x00, 0x03, 0x00, 0xDB, 0x01 };
- byst[8] = (byte)u;
- byst[6] = (byte)((d & 0x0000ff00) >> 8);
- byst[7] = (byte)(d & 0x000000ff);
- byte[] byrd = WriteRead(byst);
- if (byrd.Length>= byst.Length)
- {
- bolrd = true;
- }
- return bolrd;
- }
-
- /// <summary>
- /// PCM数据发送
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- public bool DataSend(byte[] data,int delay=50)
- {
- bool bolrd = false;
- if (data!=null && data.Length>0)
- {
- byte[] sd = new byte[data.Length + 6];
- sd[0] = 0xF0;
- sd[1] = 0x0F;
- sd[2] = 0x03;
- sd[3] = 0x00;
- sd[4] = 0x00;
- sd[5] = (byte)data.Length;
- for (int i = 0; i < data.Length; i++)
- {
- sd[6 + i] = data[i];
- }
- byte[] byrd = WriteRead(sd, delay);
- if (byrd.Length >= sd.Length)
- {
- bolrd = true;
- }
- }
- return bolrd;
- }
- public void Serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
- {
- //
- //
- }
- }
- }
|