C# 接收来自称重秤CAS CL5200的数据

C# 接收来自称重秤CAS CL5200的数据,c#,winforms,serial-port,C#,Winforms,Serial Port,需要CAS CL5200电子秤的帮助。 我已经看到了所有关于这个问题的帖子,但是没有一篇是关于CAS CL5200 scale的,它通过USB电缆连接,创建了一个虚拟com端口(COM41) 以下是我遵循的步骤- 为了测试通信,我安装了CL Works(某些功能的scales软件)-->working 已安装免费设备监视Studio以查看所有连接参数 在超级终端-->不工作的情况下测试 免费设备监控工作室报告“W”已写入com端口,但未返回任何内容 这里的代码是我在其他相关文章中找到的,用byt

需要CAS CL5200电子秤的帮助。 我已经看到了所有关于这个问题的帖子,但是没有一篇是关于CAS CL5200 scale的,它通过USB电缆连接,创建了一个虚拟com端口(COM41)

以下是我遵循的步骤-

  • 为了测试通信,我安装了CL Works(某些功能的scales软件)-->working
  • 已安装免费设备监视Studio以查看所有连接参数
  • 在超级终端-->不工作的情况下测试
  • 免费设备监控工作室报告“W”已写入com端口,但未返回任何内容
  • 这里的代码是我在其他相关文章中找到的,用byte[]和string对其进行了测试,不管是哪种方式,代码都写在COM41“W”上,但没有什么可读的
  • 代码:

    公共部分类表单1:表单
    {
    private const int波特率=19200;//波特率常数
    专用串行端口_SerialPort;
    私有无效按钮1\u单击\u 1(对象发送者,事件参数e)
    {
    if(_serialPort!=null&&u serialPort.IsOpen)
    _serialPort.Close();
    如果(_serialPort!=null)
    _serialPort.Dispose();
    _serialPort=新的serialPort(“COM41”,波特率,奇偶校验。无,8,停止位。1);//使用组合框中选择的名称创建新的serialPort
    _serialPort.Handshake=Handshake.None;
    //\u serialPort.DataReceived+=SerialPortOnDataReceived;//每当组件接收到新数据时,都会发生此事件
    _serialPort.DataReceived+=新的SerialDataReceiveDevenHandler(\u serialPort\u DataReceived);
    _serialPort.RtsEnable=true;
    _serialPort.DtrEnable=true;
    _serialPort.Open();
    textBox1.Text=“侦听”+\u serialPort.PortName+“…\r\n”;
    //byte[]towrite=GetBytes(“W”);//从磅秤中获取重量,以byte[]
    //_serialPort.Write(towrite,0,1);
    _serialPort.WriteLine(“W”);
    }
    私有委托无效闭包();
    void\u serialPort\u DataReceived(对象发送方,SerialDataReceivedEventArgs e)
    {
    if(invokererequired)//确保调用该函数以在UI线程中正常工作
    
    BeginInvoke(新闭包(()=>{u serialPort_DataReceived(sender,e);}))//0)//进一步测试表明,事件DataReceived和ErrorReceived不会触发……有人……有什么想法吗?通过串行侦听器,我使用一些命令(如“R88A”)查看标尺并与标尺通信(该命令读取plu表),但在权重读取方向上,还没有。我希望有人能更进一步。我做到了。请求权重的命令是“R45F04,00”发送为字符串接收,类似于“W45F04000L00D:W=00017E.W=3.”,其中W是六进制的权重。
    public partial class Form1 : Form
    {
        private const int BaudRate = 19200; // BaudRate Constant
    
        private SerialPort _serialPort;
    
        private void button1_Click_1(object sender, EventArgs e)
        {
            if (_serialPort != null && _serialPort.IsOpen)
                _serialPort.Close();
            if (_serialPort != null)
                _serialPort.Dispose();
    
            _serialPort = new SerialPort("COM41", BaudRate, Parity.None, 8, StopBits.One); // Creates new SerialPort using the name selected in the combobox
            _serialPort.Handshake = Handshake.None;
            // _serialPort.DataReceived += SerialPortOnDataReceived; // this event happens everytime when new data is received by the ComPort
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
            _serialPort.RtsEnable = true;
            _serialPort.DtrEnable = true;
            _serialPort.Open();
    
            textBox1.Text = "Listening on " + _serialPort.PortName + "...\r\n";
    
           // byte[] towrite = GetBytes("W"); // get the weight from scale wiyh "W" as byte[]
           // _serialPort.Write(towrite,0,1);
            _serialPort.WriteLine("W");
        }
    
        private delegate void Closure();
        void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (InvokeRequired) // makes sure the function is invoked to work properly in the UI-Thread
                BeginInvoke(new Closure(() => { _serialPort_DataReceived(sender, e); })); //<-- Function invokes itself
            else
                while (_serialPort.BytesToRead > 0) //<-- repeats until the In-Buffer is empty
                {
                    //textBox1.Text += string.Format("{0:X2} ", _serialPort.ReadByte());
                    textBox1.Text += _serialPort.ReadExisting();
                    //<-- bytewise adds inbuffer to textbox
                }
        }
    
        private byte[] GetBytes(string str)
        {
            byte[] bytes = new byte[str.Length * sizeof(char)];
            Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
            return bytes;
        }
    }