CanonTX_F
来源:互联网 发布:js获取所有兄弟节点 编辑:程序博客网 时间:2024/06/04 19:17
using System;using System.Collections.Generic;using System.Text;using System.Collections;using System.Timers;using Canon.Medical.Common.Engine.SerialDeviceDll;using System.IO.Ports;using System.Diagnostics;using System.IO;using System.Windows.Forms;namespace CYYF.CheckUPInstruments.DataExchange{ /// <summary> /// CanonTX_F /// author CYTD Young /// 2017-06-24 09:40:12 /// music: Keith Jarrett - The Koln Concert 1975 /// </summary> public class CanonTX_F : ComTransferBase, IAccessInstrument { private System.Timers.Timer _objTimer = new System.Timers.Timer(1); //private bool _bolSentInfo = true; private byte[] _bytArrSendInfo = { 0x02, 0x38 }; public event EventHandler OnCheckEnd; public Hashtable CheckItemCodes { set; get; } private List<byte> binaryData = new List<byte>(); private byte[] buf = new byte[0x1000]; private const int bufferSize = 0x1000; private bool communicationFinished = false; private int dataLength = 0; private SerialDevice serialPort = null; //private bool usedDsr = false; private string viewString = ""; //private int NakReplyNumberListIndex = 0; public List<int> nakReplyNumberList = new List<int>(); /// <summary> /// /// </summary> public CanonTX_F() { if (this.serialPort == null) { this.serialPort = new SerialDevice(); } this.serialPort.PortName = this._objSerialPort.PortName; this.serialPort.BaudRate = uint.Parse("" + this._objSerialPort.BaudRate);// 0x2580; this.serialPort.DataBits = byte.Parse("" + this._objSerialPort.DataBits);//8; this.serialPort.Parity = this._objSerialPort.Parity;//Parity.None; this.serialPort.StopBits = this._objSerialPort.StopBits;//StopBits.One; this.serialPort.Handshake = this._objSerialPort.Handshake;//Handshake.RequestToSend; this.serialPort.DataReceived += new OnSerialDeviceDataReceived(this.OnSerialPortDataReceived); this.serialPort.Priority = ThreadPriorityLevel.Highest; this.serialPort.Interval = 1; this.serialPort.ReadTimeout = 0x186a0; this.serialPort.WriteTimeout = 0x2710; this.serialPort.ReadBufferSize = 0x7d000; _objReceivedData = new ArrayList(); _objTimer.Elapsed += new ElapsedEventHandler(Timer_OnElapsed); this.StartExchange();//开启端口:生产环境要打开;test工程测试时候要注释 } private void Timer_OnElapsed(object sender, ElapsedEventArgs e) { _objTimer.Enabled = false; ParseReceiveData(); } private void ParseReceiveData() { //MessageBox.Show("ParseReceiveData1"); try { string strResult一次接收 = this.strReceivedData; //MessageBox.Show("ParseReceiveData1" + strResult一次接收); int indexZuo = strResult一次接收.IndexOf("["); int indexYou = strResult一次接收.IndexOf("]"); //MessageBox.Show("ParseReceiveData1 z" + indexZuo + "y" + indexYou); string resultText = strResult一次接收.Substring(indexZuo + 1, indexYou - indexZuo - 1); //resultText = resultText.Trim(); int indexMiddle = 8; string result右眼 = resultText.Substring(0, indexMiddle).Trim(); string result左眼 = resultText.Substring(indexMiddle).Trim(); //MessageBox.Show("ParseReceiveData1 z" + result左眼 + "y" + result右眼); { CheckItemResult objEventArs4CheckEnd = new CheckItemResult(); objEventArs4CheckEnd.ItemResult = result右眼; objEventArs4CheckEnd.CheckResultType = ResultType.String; objEventArs4CheckEnd.ItemCode = ReturnKey.YYY; OnCheckEnd(this, objEventArs4CheckEnd); //rightResult = result右眼; } { CheckItemResult objEventArs4CheckEnd = new CheckItemResult(); objEventArs4CheckEnd.ItemResult = result左眼; objEventArs4CheckEnd.CheckResultType = ResultType.String; objEventArs4CheckEnd.ItemCode = ReturnKey.YYZ; OnCheckEnd(this, objEventArs4CheckEnd); //leftResult = result左眼; } //MessageBox.Show("ParseReceiveData2"); } catch (Exception ex) { //MessageBox.Show("ParseReceiveData1 是否测量了两只眼" + ex.Message); } finally { _objReceivedData.Clear(); this.strReceivedData = string.Empty; } } public class ReturnKey { public static string YYZ = "YYZ";//眼压左 public static string YYY = "YYY";//眼压右 } private string strReceivedData; /// <summary> /// 接收数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnSerialPortDataReceived(object sender, SerialData e) { //MessageBox.Show("OnSerialPortDataReceived1"); if (true && this.communicationFinished) { this.ClearData(); this.communicationFinished = false; } //MessageBox.Show("OnSerialPortDataReceived2"); this.dataLength = this.serialPort.BytesToRead; this.buf = this.serialPort.Read(this.dataLength); for (int i = 0; i < this.dataLength; i++) { this.binaryData.Add(this.buf[i]); } if (this.IsEndDataBlock()) { this.SendReply(); this.viewString = Encoding.GetEncoding("Shift_JIS").GetString(this.binaryData.ToArray(), 0, this.binaryData.Count); if (viewString==null||string.IsNullOrWhiteSpace(viewString.Trim())) { return; } //MessageBox.Show("OnSerialPortDataReceived3" + viewString); this.SaveBinaryData(); //MessageBox.Show("OnSerialPortDataReceived3" + strReceivedData); this.strReceivedData = viewString; } this.dataLength = 0; _objTimer.Enabled = true; //MessageBox.Show("OnSerialPortDataReceived3"); } private int ReplyCount = 0; private void ClearData() { this.binaryData.Clear(); this.viewString = ""; //this.NakReplyNumberListIndex = 0; this.ReplyCount = 0; } public override void StartExchange() { //bool flag = false; try { if (PortIsOpen()) { return; } //if (this.serialPort.IsExist) //{ // return; //} //_objSerialPort.Open(); this.serialPort.RtsEnable = true; this.serialPort.DtrEnable = true; this.serialPort.Open(); //flag = true; //if (!this.usedDsr) //{ //return flag; //} //int num = 50;//尝试五十次 //while (!this.serialPort.DsrHolding && (num-- > 0)) //{ // System.Threading.Thread.Sleep(10); //} //if (!this.serialPort.DsrHolding) //{ // throw new Exception("DSR not High."); //} } catch (Exception exception) { MessageBox.Show("打开端口错误!\n" + exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); //flag = false; } //return flag; } public override void StopExhange() { //_objSerialPort.Close(); try { this.serialPort.Close(); //return true; } catch (Exception exception) { MessageBox.Show("关闭端口错误!\n" + exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); //return false; } } public bool PortIsOpen() { return serialPort.IsOpen; } /// <summary> /// 是否结束接收 /// </summary> /// <returns></returns> private bool IsEndDataBlock() { bool flag = false; int count = this.binaryData.Count; if (this.dataLength > 0) { if (this.binaryData[count - 1] != 13) { return flag; } if (count <= 1) { return flag; } if (this.binaryData[count - 2] == 5) { flag = true; } if (this.binaryData[count - 2] == 4) { flag = true; this.communicationFinished = true; } if (this.binaryData[count - 2] == 3) { flag = true; } } return flag; } /// <summary> /// 保存二进制 /// </summary> /// <param name="strm"></param> private void SaveBinaryData() { FileStream stream; string str = "BIN_" + "TXF" + "_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".bin"; string str6 = Application.StartupPath + @"\\"; string path = str6 + str; stream = new FileStream(path, FileMode.Create); stream.Write(this.binaryData.ToArray(), 0, this.binaryData.Count); stream.Close(); } /// <summary> /// 发数据 /// </summary> /// <param name="data"></param> private void SendData(byte[] data) { this.serialPort.Write(data); } /// <summary> /// 重放 /// </summary> private void SendReply() { byte[] buffer = new byte[10]; List<byte> list = new List<byte>(); this.ReplyCount++; list.Add(6); list.Add(13); this.SendData(list.ToArray()); } private enum FormatName { FMT_R10, FMT_K1, FMT_RK3, FMT_JMOIA, FMT_RKF2, FMT_T2EACH, FMT_T2ALL, FMT_TXF, FMT_JMOIA_TX, FMT_TX20, FMT_TX20P } }}
<?xml version="1.0"?><configuration><startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> <!--<log4net debug="false"> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="e:\Applog.txt" /> <param name="datePattern" value="yyyy-MM-dd HH:mm" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> <appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="e:\Log.txt" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="10" /> <param name="MaximumFileSize" value="5MB" /> <param name="RollingStyle" value="Size" /> <param name="StaticLogFileName" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="LogFileAppender" /> </root> </log4net>--></configuration>
阅读全文
0 0
- CanonTX_F
- Redis读书笔记
- [Python3] 初识py, 一个简单练手的小玩意. 快递查询
- express入门(2)-路由
- 使用Stack堆栈集合大数据运算
- 如何手动将Metasploit的Payloads注入到Android应用中
- CanonTX_F
- PCM-简介
- 网络编程
- 自定义字符数组处理函数:strlen,strcmp,strcat,strcpy
- Leetcode Palindrome Permutation I & II
- 文章标题
- org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'XXXX' is defined
- 欢迎使用CSDN-markdown编辑器
- scrapy爬虫基础知识