C#WPF通过串口(232协议)调用基恩士打标机进行打标

        创作背景:突然想起来去年做了一个关于调用基恩士打标机的项目,据我的了解,大多数客户与基恩士设备的通讯都是TCP/IP模式,但是我们这个项目的甲方特意要求使用串口模式进行通讯,二者的指令都是一样的。下面将这个项目的关键处理点分享给大家。

        想要精准控制一个设备,我们首先要了解设备的工作原理,以及控制顺序等信息。这里原理就不做过多介绍(因为我也不懂😂),先给朋友们分享一下我所了解的打标机的指令:

        1、设备准备指令:RX,Ready

        2、开始打标指令:WX,StartMarking

        3、修改参数指令:WX,JOB={0},BLK={1},CharacterString={2}

        4、变更任务号指令:WX,JobNo={0}

        5、查询任务号指令:RX,JobNo

        我把串口通讯需要调用的指令封装在一个类中,方便使用。这里踩过一个雷,就是没有增加通用的尾部标识,导致打标机每次都仅执行我程序启动后的第一个指令,后来发现,需要给尾部增加固定的标识。

    /// <summary>
    /// 打标指令类
    /// </summary>
    public static class MarkingInstruct
    {
        /// <summary>
        /// 通用尾部标识
        /// </summary>
        private static readonly string strTailMark = "\r\n";

        /// <summary>
        /// 仪器准备
        /// </summary>
        public static readonly string StrReady = "RX,Ready" + strTailMark;

        /// <summary>
        /// 开始打标
        /// </summary>
        public static readonly string StrStartMarking = "WX,StartMarking" + strTailMark;

        /// <summary>
        /// 修改参数值,{0}程序号,{1}参数号,{2}参数值
        /// </summary>
        public static readonly string StrCharacterString = "WX,JOB={0},BLK={1},CharacterString={2}" + strTailMark;

        /// <summary>
        /// 变更运行中的任务编号。{0}即将执行的任务编号
        /// </summary>
        public static readonly string StrWriteJobNo = "WX,JobNo={0}" + strTailMark;

        /// <summary>
        /// 查询运行中的任务编号
        /// </summary>
        public static readonly string StrReadJobNo = "RX,JobNo" + strTailMark;
    }

        正常打开串口进行指令的发送和消息的接收即可。因为功能以及屏蔽,所以我提供的代码是注释掉了的。代码如下:

        /// <summary>
        /// 打标串口
        /// </summary>
        //public Serial serial = new Serial("COM1", 9600, Parity.None, 8, StopBits.One);

    
打开串口
//serial.Open();
建立接收事件 
//serial.Thread_ReadMsg += new Serial.OnReadRS232Data(this.ReceivedSerial);
开始接收
//serial.StartReadMsg(15);
        /// <summary>
        /// 接收打标数据
        /// </summary>
        /// <param name="buff">接收的数组</param>
        private void ReceivedSerial(byte[] buff)
        {
            try
            {
                iRisingEdge = 1;
                strMarkReciveMsg = Encoding.Default.GetString(buff, 0, buff.Length);
                ListStationChanged("", "接收", strMarkReciveMsg, 3);
            }
            catch
            {
            }
        }
       /// <summary>
        /// 打标通用发送指令方法
        /// </summary>
        /// <param name="strInstruct">指令</param>
        /// <param name="strCheck">校验字符</param>
        /// <param name="strErrorMsg">错误提示信息</param>
        /// <returns></returns>
        //private void MarkCommonSendMsg(string strInstruct, string strCheck, string strErrorMsg)
        //{
        //    iRisingEdge = 0;
        //    serial.SendMsg(strInstruct);
        //    ListStationChanged("", "发送", strInstruct.TrimEnd(' ').TrimEnd('\n').TrimEnd('\r'), 3);
        //    Thread.Sleep(50);
        //}

        有些方法和属性是我项目中使用的,可以酌情删除。本次就分享到这里,欢迎各路英雄好汉给出建议。

相关推荐

  1. C#WPF通过串口(232协议)调用进行

    2024-04-25 16:30:04       10 阅读
  2. C#Winform调用tcp/ip调用斑马示例

    2024-04-25 16:30:04       20 阅读
  3. ffmpeg 通过遍历视频流,对视频帧进行

    2024-04-25 16:30:04       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 16:30:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 16:30:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 16:30:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 16:30:04       18 阅读

热门阅读

  1. 常用的 Spring Boot 注解及其作用

    2024-04-25 16:30:04       13 阅读
  2. 英语语法速成(4)

    2024-04-25 16:30:04       11 阅读
  3. 李沐63_束搜索——自学笔记

    2024-04-25 16:30:04       14 阅读
  4. 用Python搭建一个猜数字小游戏

    2024-04-25 16:30:04       14 阅读
  5. - 实际案例演示Single-Spa的使用步骤

    2024-04-25 16:30:04       11 阅读
  6. C++人工智能程序01A版本

    2024-04-25 16:30:04       13 阅读
  7. uniapp实现相册、拍照及视频录制功能

    2024-04-25 16:30:04       13 阅读
  8. Flutter 扒一扒图片缓存框架cached_network_image

    2024-04-25 16:30:04       12 阅读