点击或拖拽改变大小

SAMSerial 类

基于SAM协议的串口通信类,支持读取身份证的数据信息,详细参见API文档
Network class implemented by Tcp based on the SAM protocol, which supports reading ID card data information, see API documentation for details
继承层次
SystemObject
  HslCommunication.Core.NetBinaryCommunication
    HslCommunication.SerialSerialBase
      HslCommunication.Profinet.IDCardSAMSerial

命名空间:  HslCommunication.Profinet.IDCard
程序集:  HslCommunication (在 HslCommunication.dll 中) 版本:12.0.2.0 (12.0.2.0)
语法
public class SAMSerial : SerialBase

SAMSerial 类型公开以下成员。

构造函数
  名称说明
公共方法SAMSerial
实例化一个默认的对象
Instantiate a default object
Top
属性
  名称说明
公共属性BaudRate
当前连接串口信息的波特率
Baud rate of current connection serial port information
(继承自 SerialBase。)
公共属性CommunicationPipe
获取或设置当前的管道信息,管道类型为CommunicationPipe的继承类,内置了PipeTcpNet管道,PipeUdpNet管道,PipeSerialPort管道等
(继承自 SerialBase。)
公共属性ConnectionId
当前连接的唯一ID号,默认为长度20的guid码加随机数组成,方便列表管理,也可以自己指定
The unique ID number of the current connection. The default is a 20-digit guid code plus a random number.
(继承自 BinaryCommunication。)
公共属性IsClearCacheBeforeRead
是否在发送数据前清空缓冲数据,默认是false
Whether to empty the buffer before sending data, the default is false
(继承自 SerialBase。)
公共属性代码示例LogNet
组件的日志工具,支持日志记录,只要实例化后,当前网络的基本信息,就以DEBUG等级进行输出
The component's logging tool supports logging. As long as the instantiation of the basic network information, the output will be output at DEBUG
(继承自 BinaryCommunication。)
公共属性PortName
当前连接串口信息的端口号名称
The port name of the current connection serial port information
(继承自 SerialBase。)
公共属性ReceiveEmptyDataCount
获取或设置连续接收空的数据次数,在数据接收完成时有效,每个单位消耗的时间为SleepTime
Obtain or set the number of consecutive times to receive empty data, which is valid when the data is received, and the time consumed by each unit is SleepTime
(继承自 SerialBase。)
公共属性代码示例ReceiveTimeOut
获取或设置接收服务器反馈的时间,如果为负数,则不接收反馈
Gets or sets the time to receive server feedback, and if it is a negative number, does not receive feedback
(继承自 BinaryCommunication。)
公共属性RtsEnable
获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号。
Gets or sets a value indicating whether the request sending (RTS) signal is enabled in serial communication.
(继承自 SerialBase。)
公共属性SendBeforeHex
获取或设置在发送通信报文前追加发送的字节信息,HEX格式,通常用于lora组网时,需要携带 00 00 00 02 四个字节的站地址功能。
Obtain or set the byte information sent before sending communication packets, HEX format, usually used for LORA networking, you need to carry 00 00 00 02 four-byte station address function.
(继承自 BinaryCommunication。)
公共属性SleepTime
获取或设置在正式接收对方返回数据前的时候,需要休息的时间,当设置为0的时候,不需要休息。
Get or set the time required to rest before officially receiving the data from the other party. When it is set to 0, no rest is required.
(继承自 BinaryCommunication。)
Top
方法
  名称说明
公共方法静态成员BuildReadCommand
根据SAM的实际的指令,来生成实际的指令信息
公共方法静态成员CheckADSCommandAndSum
检查当前的指令是否是正确的
公共方法静态成员CheckADSCommandCompletion
检查当前的接收数据信息是否一条完整的数据信息
公共方法CheckSafeModuleStatus
检测安全模块状态
Detecting Security Module Status
公共方法Close
关闭当前的串口连接
Close the current serial connection
(继承自 SerialBase。)
受保护的方法DecideWhetherQAMessage
决定当前的消息是否是用于问答机制返回的消息,默认直接返回 true, 实际的情况需要根据协议进行重写方法
To determine whether the current message is the message returned by the question answering mechanism, the default is true. In actual cases, the rewriting method needs to be performed according to the protocol
(继承自 BinaryCommunication。)
公共方法Dispose
释放当前的对象
(继承自 SerialBase。)
受保护的方法Dispose(Boolean)
释放当前的对象
(继承自 SerialBase。)
公共方法Equals (继承自 Object。)
受保护的方法ExtraAfterReadFromCoreServer
和服务器交互完成的时候调用的方法,可以根据读写结果进行一些额外的操作,具体的操作需要根据实际的需求来重写实现
The method called when the interaction with the server is completed can perform some additional operations based on the read and write results. The specific operations need to be rewritten according to actual needs.
(继承自 BinaryCommunication。)
公共方法静态成员ExtractIdentityCard
从数据中提取出真实的身份证信息
公共方法静态成员ExtractSafeModuleNumber
提炼安全的模块数据信息
受保护的方法代码示例ExtraOnDisconnect
根据实际的协议选择是否重写本方法,有些协议在断开连接之前,需要发送一些报文来关闭当前的网络通道
Select whether to rewrite this method according to the actual protocol. Some protocols need to send some packets to close the current network channel before disconnecting.
(继承自 BinaryCommunication。)
受保护的方法代码示例ExtraOnDisconnectAsync
根据实际的协议选择是否重写本方法,有些协议在断开连接之前,需要发送一些报文来关闭当前的网络通道
Select whether to rewrite this method according to the actual protocol. Some protocols need to send some packets to close the current network channel before disconnecting.
(继承自 BinaryCommunication。)
受保护的方法Finalize (继承自 Object。)
公共方法静态成员GetErrorDescription
获取错误的文本信息
公共方法GetHashCode (继承自 Object。)
受保护的方法GetLogTextFromBinary
获取当前的报文进行日志记录的时候,是否使用二进制的格式记录,默认返回 LogMsgFormatBinary,重写可以根据session对象分别返回不同记录模式
Whether to log the current packet in binary format, the default return is LogMsgFormatBinary. If you want to override it, different recording modes can be returned according to session
(继承自 BinaryCommunication。)
公共方法静态成员GetNationEnumerator
枚举当前的所有的民族信息,共计五十六个民族
公共方法静态成员GetNationText
根据民族的代号来获取到民族的文本描述信息
受保护的方法GetNewNetMessage
获取一个新的消息对象的方法,需要在继承类里面进行重写
The method to get a new message object needs to be overridden in the inheritance class
(重写 BinaryCommunicationGetNewNetMessage.)
公共方法GetType (继承自 Object。)
受保护的方法代码示例InitializationOnConnect
根据实际的协议选择是否重写本方法,有些协议在创建连接之后,需要进行一些初始化的信号握手,才能最终建立网络通道。
Whether to rewrite this method is based on the actual protocol. Some protocols require some initial signal handshake to establish a network channel after the connection is created.
(继承自 BinaryCommunication。)
受保护的方法代码示例InitializationOnConnectAsync
根据实际的协议选择是否重写本方法,有些协议在创建连接之后,需要进行一些初始化的信号握手,才能最终建立网络通道。
Whether to rewrite this method is based on the actual protocol. Some protocols require some initial signal handshake to establish a network channel after the connection is created.
(继承自 BinaryCommunication。)
公共方法IsOpen
获取一个值,指示串口是否处于打开状态
Gets a value indicating whether the serial port is open
(继承自 SerialBase。)
受保护的方法LogRevcMessage(Byte)
使用日志记录一个接收的报文信息
` Logs are used to record information about a received packet
(继承自 BinaryCommunication。)
受保护的方法LogRevcMessage(Byte, PipeSession)
使用日志记录一个接收的报文信息
` Logs are used to record information about a received packet
(继承自 BinaryCommunication。)
受保护的方法LogSendMessage(Byte)
使用日志记录一个发送的报文信息
Logs are used to record information about a send packet
(继承自 BinaryCommunication。)
受保护的方法LogSendMessage(Byte, PipeSession)
使用日志记录一个发送的报文信息
Logs are used to record information about a send packet
(继承自 BinaryCommunication。)
受保护的方法MemberwiseClone (继承自 Object。)
公共方法Open
打开当前的管道信息,返回是否成功打开的结果对象,并通过属性 Content 指示当前是否为新创建的连接对象,如果是,则该值为 true
(继承自 SerialBase。)
公共方法PackCommandWithHeader
对当前的命令进行打包处理,通常是携带命令头内容,标记当前的命令的长度信息,需要进行重写,否则默认不打包
The current command is packaged, usually carrying the content of the command header, marking the length of the current command, and it needs to be rewritten, otherwise it is not packaged by default
(继承自 BinaryCommunication。)
公共方法静态成员PackToSAMCommand
将指令进行打包成可以发送的数据对象
公共方法ReadCard
读取卡片,如果成功的话,就返回身份证的所有的信息
Read the card, if successful, return all the information of the ID cards
公共方法代码示例ReadFromCoreServer(Byte)
将二进制的数据发送到管道中去,然后从管道里接收二进制的数据回来,并返回是否成功的结果对象。
Send binary data to the pipeline, and then receive binary data back from the pipeline, and return whether the success of the result object
(继承自 BinaryCommunication。)
公共方法ReadFromCoreServer(IEnumerableByte) (继承自 BinaryCommunication。)
公共方法代码示例ReadFromCoreServer(Byte, Boolean, Boolean)
将二进制的数据发送到管道中去,然后从管道里接收二进制的数据回来,并返回是否成功的结果对象。
Send binary data to the pipeline, and then receive binary data back from the pipeline, and return whether the success of the result object
(继承自 BinaryCommunication。)
公共方法ReadFromCoreServer(CommunicationPipe, Byte, Boolean, Boolean)
使用指定的管道来进行数据通信,发送原始数据到管道,然后从管道接收相关的数据返回,本方法无锁
(继承自 BinaryCommunication。)
公共方法代码示例ReadFromCoreServerAsync(Byte)
将二进制的数据发送到管道中去,然后从管道里接收二进制的数据回来,并返回是否成功的结果对象。
Send binary data to the pipeline, and then receive binary data back from the pipeline, and return whether the success of the result object
(继承自 BinaryCommunication。)
公共方法ReadFromCoreServerAsync(IEnumerableByte) (继承自 BinaryCommunication。)
公共方法代码示例ReadFromCoreServerAsync(Byte, Boolean, Boolean)
将二进制的数据发送到管道中去,然后从管道里接收二进制的数据回来,并返回是否成功的结果对象。
Send binary data to the pipeline, and then receive binary data back from the pipeline, and return whether the success of the result object
(继承自 BinaryCommunication。)
公共方法ReadFromCoreServerAsync(CommunicationPipe, Byte, Boolean, Boolean)
使用指定的管道来进行数据通信,发送原始数据到管道,然后从管道接收相关的数据返回,本方法无锁
(继承自 BinaryCommunication。)
公共方法ReadSafeModuleNumber
读取身份证设备的安全模块号
Read the security module number of the ID device
公共方法SearchCard
寻找卡片,并返回是否成功
Find cards and return success
公共方法SelectCard
选择卡片,并返回是否成功
Select card and return success
公共方法SerialPortInni(ActionSerialPort)
根据自定义初始化方法进行初始化串口信息
Initialize the serial port information according to the custom initialization method
(继承自 SerialBase。)
公共方法SerialPortInni(String)
初始化串口信息,9600波特率,8位数据位,1位停止位,无奇偶校验
Initial serial port information, 9600 baud rate, 8 data bits, 1 stop bit, no parity
(继承自 SerialBase。)
公共方法SerialPortInni(String, Int32)
初始化串口信息,波特率,8位数据位,1位停止位,无奇偶校验
Initializes serial port information, baud rate, 8-bit data bit, 1-bit stop bit, no parity
(继承自 SerialBase。)
公共方法SerialPortInni(String, Int32, Int32, StopBits, Parity)
初始化串口信息,波特率,数据位,停止位,奇偶校验需要全部自己来指定
Start serial port information, baud rate, data bit, stop bit, parity all need to be specified
(继承自 SerialBase。)
公共方法ToString (重写 SerialBaseToString.)
公共方法UnpackResponseContent
根据对方返回的报文命令,对命令进行基本的拆包,例如各种Modbus协议拆包为统一的核心报文,还支持对报文的验证
According to the message command returned by the other party, the command is basically unpacked, for example, various Modbus protocols are unpacked into a unified core message, and the verification of the message is also supported
(继承自 BinaryCommunication。)
Top
字段
  名称说明
受保护的字段LogMsgFormatBinary
设置日志记录报文是否二进制,如果为False,那就使用ASCII码
Set whether the log message is binary, if it is False, then use ASCII code
(继承自 BinaryCommunication。)
Top
扩展方法
  名称说明
公共扩展器方法ToJsonString
获取当前对象的JSON格式表示的字符串。
Gets the string represented by the JSON format of the current object.
(由 HslExtension 定义。)
Top
示例
在使用之前需要实例化当前的对象,然后根据实际的情况填写好串口的信息,否则连接不上去。
实例化操作
private SAMSerial sAMSerial = new SAMSerial( );

public void Open( )
{
    // 下面是初始化连接的代码,在读取身份证信息之前需要被调用一次
    // The following is the code to initialize the connection. It needs to be called once before reading the ID information.
    try
    {
        sAMSerial.SerialPortInni( sp =>
        {
            sp.PortName = "COM1";
            sp.BaudRate = 115200;
            sp.DataBits = 0;
            sp.StopBits = System.IO.Ports.StopBits.None;
            sp.Parity = System.IO.Ports.Parity.None;
        } );

        sAMSerial.Open( );

    }
    catch (Exception ex)
    {
        Console.WriteLine( ex.Message );
    }
}
在实际的读取,我们一般放在后台进行循环扫描的操作,参见下面的代码
基本的读取操作
// 通常是放到后台进行循环扫描,此处举例开了一个线程的操作,实际上你在开发的时候需要注意GC回收垃圾的事
// Usually it is placed in the background for circular scanning. Here is an example of a thread operation. In fact, you need to pay attention to GC garbage collection when you develop
public void StartRead( )
{
    new Thread( new ThreadStart( ThreadBackgroundReadCard ) ) { IsBackground = true }.Start( );
}

private void ThreadBackgroundReadCard( )
{
    while (true)
    {
        Thread.Sleep( 100 );
        // 首先进行寻卡,成功才进行下一步
        // Find the card first, then proceed to the next step
        OperateResult search = sAMSerial.SearchCard( );
        {
            if (!search.IsSuccess)
            {
                continue;
            }
        }

        Thread.Sleep( 100 );
        // 寻卡成功后开始选卡,选卡成功才进行下一步
        // Select card after successful card search, then proceed to the next step after successful card selection
        if (sAMSerial.SelectCard( ).IsSuccess)
        {
            OperateResult<IdentityCard> read = sAMSerial.ReadCard( );
            if (read.IsSuccess)
            {
                // read.Content,详细的身份证信息,需要查看 IdentityCard 类型的定义,包含身份的名字,
                Console.WriteLine( read.Content.ToString( ) );
            }
            else
            {
                Console.WriteLine( $"读卡失败:{read.Message}" );
            }
        }
    }
}
参见