上海耀华地磅串口开发(C#)

上海耀华地磅串口开发(C#)

  • 耀华地磅通用的型号为XK3190-DS3q1和电脑采用DB9接线方式,RS232协议传输。
    • 如果需要转接
    • 接线正常后我们开始通过C#遍历计算机所有的串口设备
    • 打开串口
    • 接下来,我们在SerialPort控件的接收数据方法中获取数据。
    • 获取的数据格式如下,每一个数据单元包括特殊起止位字符

耀华地磅通用的型号为XK3190-DS3q1和电脑采用DB9接线方式,RS232协议传输。

首先连接线如图:
上海耀华地磅串口开发(C#)_第1张图片
上图为DB9,母头共九个接线孔

如果需要转接

如果电脑没有RS232接口,可使用RS232转USB连接线,建议采用质量较好的连接线。也可以采用RS232的PCI转接板,转接板可以支持多个磅头连接。

上海耀华地磅串口开发(C#)_第2张图片
串口转USB线,串口连接磅头,USB口连接电脑。
接线以后可以在设备管理器查看串口驱动是否运行正常。

接线正常后我们开始通过C#遍历计算机所有的串口设备

using System.IO.Ports;

///
/// 获取本机所有端口
///
///
public static List loadComPorts()
{
List portsList = new List();
string[] ports = SerialPort.GetPortNames();
if (ports != null)
portsList = ports.ToList();
return portsList;
}

打开串口

返回的串口名称是字符串,我们可以直接打开串口了,我们可以使用定时器,每隔一段时间检查串口是否打开,如果没有打开则尝试自动打开。这里用到了SerialPort控件。
//PORT 设置的参数名称为空
if (string.IsNullOrEmpty(PortName))
{
rtxlog.AppendText(DateTime.Now.ToString(“mm:ss”) + “地磅端口名称错误” + PortName );
return;
}

//检查参数,如果没有设置则设置为默认值
if (String.IsNullOrEmpty(Vars.baud)) Vars.baud = “9600”;
if (String.IsNullOrEmpty(Vars.dsite)) Vars.baud = “8”;
if (String.IsNullOrEmpty(Vars.ssite)) Vars.baud = “1”;
if (String.IsNullOrEmpty(Vars.parity)) Vars.baud = “无”;

if (!serialPort1.IsOpen)
{
try
{
serialPort1.PortName = GlobalVars.Port;
serialPort1.BaudRate = Convert.ToInt32(Vars.baud);
serialPort1.DataBits = Convert.ToInt32(lVars.dsite);
//停止位字符串转换为控件接受的格式
string tzw = Vars.tzw;
if (tzw.Equals(“1”))
serialPort1.StopBits = StopBits.One;
else if (tzw.Equals(“1.5”))
serialPort1.StopBits = StopBits.OnePointFive;
else if (tzw.Equals(“2”))
serialPort1.StopBits = StopBits.Two;
//校验位字符串转换为控件接受的格式
string jyw = GlobalVars.parity;
if (jyw == “无”)
serialPort1.Parity = Parity.None;
else if (jyw == “奇校验”)
serialPort1.Parity = Parity.Odd;
else if (jyw == “偶校验”)
serialPort1.Parity = Parity.Even;
serialPort1.Open();
}catch (Exception exp)
{
LogHelper.Err("打开端口失败: " + exp.Message);
}
}
else
{
SetPontStatus("已打开端口 " + serialPort1.PortName, Color.Green);
}

接下来,我们在SerialPort控件的接收数据方法中获取数据。

private string _recv_string = “”;
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int idx_last = _recv_string.LastIndexOf("");
if (idx_last == -1) return;
string leftstr = _recv_string.Substring(0, idx_last + 1);
_recv_string = _recv_string.Substring(idx_last + 1);

   if (!leftstr.EndsWith("")) return;
   int _idx = leftstr.LastIndexOf("+");
   if (_idx == -1) return;
   string lastitem = leftstr.Substring(_idx + 1, leftstr.Length - _idx - 5); 
   leftstr = "";
   decimal weight_value = StringUtil.parseDecimal(lastitem);

}

获取的数据格式如下,每一个数据单元包括特殊起止位字符

在这里插入图片描述
如上图所示,所受到的字符串是其中的一部分,所以有拼接过程。
在这里插入图片描述
我们准备一个字符串,地磅每次传输的数据要追加到字符串后面,然后尝试去除最后一个完整的数据单元,并且计算出来实际公斤数。
如果地磅设置了按吨位传输,则计算出来的数据是吨位数。

你可能感兴趣的:(称重系统,地磅,上海耀华,windows,c#)