C# 接收来自称重秤CAS CL5200的数据
需要CAS CL5200电子秤的帮助。 我已经看到了所有关于这个问题的帖子,但是没有一篇是关于CAS CL5200 scale的,它通过USB电缆连接,创建了一个虚拟com端口(COM41) 以下是我遵循的步骤-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
公共部分类表单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;
}
}