Form1.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.Runtime.InteropServices;
  8. using System.Text;
  9. using System.Text.RegularExpressions;
  10. using System.Windows.Forms;
  11. using System.Windows.Forms.DataVisualization.Charting;
  12. using System.Web.ClientServices;
  13. using UAS_MES.CustomControl.DataGrid_View;
  14. using UAS_MES.DataOperate;
  15. using UAS_MES.PublicForm;
  16. using UAS_MES.PublicMethod;
  17. using System.Net;
  18. using System.IO;
  19. using System.Reflection;
  20. using System.Threading;
  21. using UAS_MES.CustomControl;
  22. using System.IO.Ports;
  23. namespace UAS_MES
  24. {
  25. public partial class Form1 : Form
  26. {
  27. public Form1()
  28. {
  29. InitializeComponent();
  30. }
  31. private void Form1_Load(object sender, EventArgs e)
  32. {
  33. Com.PortName = "COM4";
  34. Com.ReadTimeout = 5000;
  35. Com.WriteTimeout = 5000;
  36. Com.BaudRate = 9600;
  37. Com.StopBits = StopBits.One;
  38. Com.Parity = Parity.None;
  39. Com.Open();
  40. }
  41. [DllImport("WinIo64.dll")]
  42. public static extern bool InitializeWinIo();
  43. [DllImport("WinIo64.dll")]
  44. public static extern void ShutdownWinIo();
  45. [DllImport("WinIo64.dll")]
  46. public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal, byte bSize);
  47. [DllImport("WinIo64.dll")]
  48. public static extern bool SetPortVal(IntPtr wPortAddr, int dwPortVal, byte bSize);
  49. //以下是与并口无关
  50. [DllImport("WinIo64.dll")]
  51. public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize, IntPtr PhysicalMemoryHandle);
  52. [DllImport("WinIo64.dll")]
  53. public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, byte pbLinAddr);
  54. [DllImport("WinIo64.dll")]
  55. public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);
  56. [DllImport("WinIo64.dll")]
  57. public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);
  58. [DllImport("user32.dll")]
  59. public static extern int MapVirtualKey(uint Ucode, uint uMapType);
  60. public bool online = false; //WinIo打开标志
  61. //数据端口共8位,控制端口共4位,可以组成1~12位的任意数字输出端口;
  62. //状态端口共5位,控制端口共4位,可以组成1~9位的任意数字输入端口
  63. private static IntPtr data_port = (IntPtr)0x378; //数据端口地址 D0-D7 8个端口
  64. private static IntPtr state_port = (IntPtr)0x379; //状态端口地址 S3-S7 只能读取5位
  65. private static IntPtr control_port = (IntPtr)0x37A; //控制端口地址 C0-C3 只能控制或输出4位
  66. /// <summary>
  67. /// 设定DataPort输出
  68. /// </summary>
  69. /// <param name="WriteValue">设定值:范围为0~255</param>
  70. private void setDateBuff(int WriteValue)
  71. {
  72. IntPtr m_nport = data_port; //数据端口地址data_port
  73. int m_nValue = WriteValue;
  74. //调用WinIo库函数SetPortVal写端口值
  75. SetPortVal(m_nport, m_nValue, 1); //write a BYTE value to an I/O port
  76. }
  77. /// <summary>
  78. /// 设定ControlPort输出
  79. /// 高4位默认设置,请不要修改,因此输出时保持高位值不变,将要输出的值从低4位输出
  80. /// Control端口C2读写正常,C0、C1、C3写入0则输出高电平,写入1输出低电平;读取亦然
  81. /// </summary>
  82. /// <param name="WriteValue">设定值</param>
  83. private void setControlBuff(int WriteValue)
  84. {
  85. IntPtr m_nport = control_port; //获得控制端口地址
  86. //获得控制端口的值,
  87. int temp_dwPortVal = 0;
  88. GetPortVal(m_nport, out temp_dwPortVal, 1); //reads a BYTE value from an I/O port
  89. int temp_aa = temp_dwPortVal & 0xF0; //将低4位置为0;高4位不变
  90. int WriValue = WriteValue & 0x0F; //取设定值低4位;高4位为0
  91. temp_aa = temp_aa | WriteValue; //合并端口值高4位与设定值低4位
  92. temp_aa = temp_aa ^ 0x0B; //将低4位中C0、C1、C3取反(0->1;1->0)(保证设定值与实际电平相吻合)
  93. SetPortVal(m_nport, temp_aa, 1); //写出的值中,高4位保持端口原来的值不变,低4位实际输出
  94. }
  95. /// <summary>
  96. /// 读取ControlPort值
  97. /// Control端口C2读取正常,C0、C1、C3高电平则读入0,低电平则读入1
  98. /// </summary>
  99. /// <returns>返回C0-C3 四个端口的值:范围为0~15</returns>
  100. private int getControlBuff()
  101. {
  102. IntPtr m_nport = control_port; //控制端口地址data_port
  103. int m_nValue = 0;
  104. //调用WinIo库函数SetPortVal写端口值
  105. GetPortVal(m_nport, out m_nValue, 1); //reads a BYTE value from an I/O port
  106. int ValueGet = m_nValue ^ 0x0B; //将低4位中C0、C1、C3取反(0->1;1->0)
  107. ValueGet = ValueGet & 0x0F; //去掉高4位值
  108. return ValueGet;
  109. }
  110. /// <summary>
  111. /// 读取StatePort值
  112. /// State端口S7高电平则读入0,低电平则读入1;其他正常
  113. /// </summary>
  114. /// <returns>返回S3-S7 五个端口的值:范围0-31</returns>
  115. private int getStateBuff()
  116. {
  117. IntPtr m_nport = state_port; //控制端口地址state_port
  118. int dwPortVal = 0;
  119. GetPortVal(m_nport, out dwPortVal, 1); //reads a BYTE value from an I/O port
  120. int ValueGet = dwPortVal ^ 0x80; //将S7取反(保证读取与实际电平相吻合)
  121. ValueGet = ValueGet & 0xF8; //去掉S0 ~S2位;
  122. ValueGet = ValueGet >> 3; //右移3位,将S7~S3变为低5位
  123. return ValueGet;
  124. }
  125. public bool OpenWinIo()
  126. {
  127. if (InitializeWinIo())
  128. {
  129. this.online = true;
  130. return true;
  131. }
  132. else
  133. {
  134. this.online = false;
  135. return false;
  136. }
  137. }
  138. public void CloseWinIo()
  139. {
  140. ShutdownWinIo();
  141. this.online = false;
  142. }
  143. SerialPort Com = new SerialPort();
  144. private void button3_Click_1(object sender, EventArgs e)
  145. {
  146. //byte[] byteArr = new byte[20];
  147. //Com.Write(byteArr, 0, byteArr.Length);
  148. //CloseWinIo();
  149. }
  150. }
  151. }