Form1.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Runtime.InteropServices;
  11. using System.Net;
  12. using System.Net.Sockets;
  13. namespace DUCP_Demo
  14. {
  15. public partial class Form1 : Form
  16. {
  17. /*定义网络环境变量 默认IP为192.168.0.10,端口为7*/
  18. public static UdpClient DUCP_NetSocket;
  19. public static IPAddress DeviceIP = IPAddress.Parse("192.168.0.60");
  20. public static IPEndPoint RPoint = new IPEndPoint(DeviceIP, 8888);
  21. public static IPEndPoint TPoint = new IPEndPoint(DeviceIP, 8888);
  22. public static int volume = 10;
  23. /*
  24. #0.实现协议栈数据输出回调函数
  25. */
  26. [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
  27. unsafe public delegate byte cbDUCP_DataOutType(byte* Data, int Size);
  28. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  29. extern static void MB_STK_SetOutCallback(cbDUCP_DataOutType cb);
  30. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  31. unsafe extern static sbyte MB_STK_In(byte* Data, int Size);
  32. private static cbDUCP_DataOutType cbDuCP_dataout;
  33. unsafe static byte cbDUCP_DataOut(byte* Data, int Size)
  34. {
  35. sbyte Ret;
  36. byte[] buff = new byte[256];
  37. byte[] RxBuff = new byte[256];
  38. for (int i = 0; i < Size; i++)
  39. {
  40. buff[i] = Data[i];
  41. }
  42. /*发送数据到显示屏*/
  43. DUCP_NetSocket.Send(buff, Size, TPoint);
  44. /*接收显示屏回复的数据*/
  45. RxBuff = DUCP_NetSocket.Receive(ref RPoint);
  46. /*将显示屏的回复的数据传输给协议栈*/
  47. unsafe
  48. {
  49. fixed (byte* pArray = RxBuff)
  50. Ret = MB_STK_In(pArray, RxBuff.Length);
  51. }
  52. return (byte)Ret;
  53. }
  54. public Form1()
  55. {
  56. InitializeComponent();
  57. /*#1.设置协议栈的回调函数*/
  58. unsafe
  59. {
  60. cbDuCP_dataout = new cbDUCP_DataOutType(cbDUCP_DataOut);
  61. MB_STK_SetOutCallback(cbDuCP_dataout);
  62. }
  63. //GC.KeepAlive(cbDuCP_dataout);
  64. /*#2.创建UDP网络套接字*/
  65. DUCP_NetSocket = new UdpClient();
  66. TextBox.Text = "请缴费100元";
  67. TextBox_WID.Text = "0";
  68. DUCP_HOST_SYS_SetVol(volume);
  69. }
  70. //调节音量
  71. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  72. unsafe extern static byte DUCP_HOST_SYS_SetVol(int vol);
  73. //播放语音
  74. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  75. unsafe extern static byte DUCP_HOST_TTS_Play(byte* pText, byte Opt);
  76. //停止播放语音
  77. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  78. unsafe extern static byte DUCP_HOST_TTS_Stop();
  79. //重启系统
  80. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  81. unsafe extern static byte DUCP_HOST_SYS_Reset();
  82. //显示文本
  83. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  84. unsafe extern static byte DUCP_HOST_TWIN_DisText(int WinID,
  85. byte* pText,
  86. int EnterMode,
  87. int EnterSpeed,
  88. int DelayMode,
  89. int DelayTime,
  90. int EixtMode,
  91. int EixtSpeed,
  92. int FontIndex,
  93. int TextColor,
  94. int BkColor,
  95. int DisTimes);
  96. private void DISTEXT_Click(object sender, EventArgs e)
  97. {
  98. unsafe
  99. {
  100. byte[] Buff = System.Text.Encoding.Default.GetBytes(TextBox.Text);
  101. //byte[] Str = new byte[Buff.Length + 1];
  102. int WID;
  103. //int i;
  104. //for(i = 0;i < Buff.Length;i ++) {
  105. // Str[i] = Buff[i];
  106. //}
  107. //Str[i] = 0;
  108. int.TryParse(TextBox_WID.Text, out WID);
  109. fixed (byte* pArray = Buff)
  110. try
  111. {
  112. DUCP_HOST_TWIN_DisText(WID, pArray,
  113. 0X15, 1,
  114. 0X0B, 3,
  115. 0X15, 1,
  116. 3, 0Xff, 0X00, 0);
  117. }
  118. catch (Exception ex) { Console.WriteLine(ex.Message); }
  119. }
  120. }
  121. private void 播放语音_Click(object sender, EventArgs e)
  122. {
  123. unsafe
  124. {
  125. try
  126. {
  127. byte[] Buff = System.Text.Encoding.Default.GetBytes(TextBox.Text);
  128. fixed (byte* pArray = Buff)
  129. {
  130. DUCP_HOST_TTS_Stop();
  131. DUCP_HOST_TTS_Play(pArray, 0x01);
  132. }
  133. }
  134. catch (Exception ex)
  135. { Console.WriteLine(ex.Message); }
  136. }
  137. }
  138. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  139. extern static byte DUCP_HOST_TWIN_Create(int WinID, int Stile, int x0, int y0, int xSize, int ySize);
  140. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  141. extern static byte DUCP_HOST_TWIN_DelFile(int WinID, int FileID);
  142. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  143. extern static byte DUCP_HOST_TWIN_Del(int WinID);
  144. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  145. extern static byte DUCP_HOST_PIC_Del(int WinID);
  146. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  147. extern static byte DUCP_HOST_2D_SetColor(int Color);
  148. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  149. extern static byte DUCP_HOST_2D_FillRect(int x0, int y0, int x1, int y1);
  150. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  151. extern static byte DUCP_HOST_2D_DrawSysIcon(int x0, int y0, int Num, int Denom, int IconIndex);
  152. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  153. extern static byte DUCP_HOST_PIC_Create(int WinID, int x0, int y0, int xSize, int ySize);
  154. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  155. extern static byte DUCP_HOST_PIC_Add(int WinID, int FID, byte EnterMode, byte EnterSpeed,
  156. byte StopMode, byte StopTime, byte ExitMode, byte ExitSpeed);
  157. //更新IP
  158. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  159. unsafe extern static byte DUCP_HOST_SYS_SetIP(byte* ip);
  160. //更新端口
  161. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  162. unsafe extern static byte DUCP_HOST_SYS_SetPort(int port);
  163. //显示已存文件
  164. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  165. unsafe extern static byte DUCP_HOST_TWIN_DisFile(int WinID, int FileID);
  166. [DllImport("DUCP.dll", CallingConvention = CallingConvention.Cdecl)]
  167. unsafe extern static byte DUCP_HOST_TWIN_DownTextFile(int WinID,
  168. int FileID,
  169. byte* pText,
  170. int EnterMode,
  171. int EnterSpeed,
  172. int DelayMode,
  173. int DelayTime,
  174. int EixtMode,
  175. int EixtSpeed,
  176. int FontIndex,
  177. int TextColor,
  178. int BkColor);
  179. /// <summary>
  180. /// CRC16
  181. /// </summary>
  182. /// <param name="data">要进行计算的数组</param>
  183. /// <returns>计算后的数组</returns>
  184. private static byte[] CRC16(byte[] crcbuf)
  185. {
  186. int crc = 0xffff;
  187. int len = crcbuf.Length;
  188. byte[] redata = new byte[2];
  189. for (int n = 0; n < len; n++)
  190. {
  191. byte i;
  192. crc = crc ^ crcbuf[n];
  193. for (i = 0; i < 8; i++)
  194. {
  195. int TT;
  196. TT = crc & 1;
  197. crc = crc >> 1;
  198. crc = crc & 0x7fff;
  199. if (TT == 1)
  200. {
  201. crc = crc ^ 0xa001;
  202. }
  203. crc = crc & 0xffff;
  204. }
  205. }
  206. redata[1] = (byte)((crc >> 8) & 0xff);
  207. redata[0] = (byte)((crc & 0xff));
  208. return redata;
  209. }
  210. private void BUTTON_DEMO1_Click(object sender, EventArgs e)
  211. {
  212. DUCP_HOST_TWIN_Del(0);
  213. DUCP_HOST_TWIN_Del(1);
  214. DUCP_HOST_TWIN_Del(2);
  215. DUCP_HOST_TWIN_Del(3);
  216. DUCP_HOST_TWIN_Create(0, 0, 0, 0, 64, 16);
  217. DUCP_HOST_TWIN_Create(1, 0, 0, 16, 64, 16);
  218. DUCP_HOST_TWIN_Create(2, 0, 0, 32, 64, 16);
  219. DUCP_HOST_TWIN_Create(3, 0, 0, 48, 64, 16);
  220. //DUCP_HOST_TWIN_Create(4, 0, 0, 64, 64, 16);
  221. //DUCP_HOST_TWIN_Create(5, 0, 0, 80, 64, 16);
  222. //DUCP_HOST_TWIN_Create(6, 0, 0, 96, 64, 16);
  223. //DUCP_HOST_TWIN_Create(7, 0, 0, 112, 64, 16);
  224. unsafe
  225. {
  226. byte[] Buff = System.Text.Encoding.Default.GetBytes("现在时间`C`Y年`M月`D日 星期`V `H:`N:`S");
  227. fixed (byte* pArray = Buff)
  228. DUCP_HOST_TWIN_DownTextFile(0,
  229. 0,
  230. pArray,
  231. 0X15,
  232. 1,
  233. 0X00,
  234. 2,
  235. 0X15,
  236. 1,
  237. 3,
  238. 0XFF,
  239. 0);
  240. Buff = System.Text.Encoding.Default.GetBytes("刚才星期`V `H:`N:`S");
  241. fixed (byte* pArray = Buff)
  242. DUCP_HOST_TWIN_DownTextFile(0,
  243. 1,
  244. pArray,
  245. 0X15,
  246. 1,
  247. 0X00,
  248. 2,
  249. 0X15,
  250. 1,
  251. 3,
  252. 0XFF,
  253. 0);
  254. Buff = System.Text.Encoding.Default.GetBytes("这是第三个`C`Y年`M月`D日");
  255. fixed (byte* pArray = Buff)
  256. DUCP_HOST_TWIN_DownTextFile(0,
  257. 2,
  258. pArray,
  259. 0X15,
  260. 1,
  261. 0X00,
  262. 2,
  263. 0X15,
  264. 1,
  265. 3,
  266. 0XFF,
  267. 0);
  268. Buff = System.Text.Encoding.Default.GetBytes("这是第四个`C`Y年`M月`D日");
  269. fixed (byte* pArray = Buff)
  270. DUCP_HOST_TWIN_DownTextFile(0,
  271. 3,
  272. pArray,
  273. 0X15,
  274. 1,
  275. 0X00,
  276. 2,
  277. 0X15,
  278. 1,
  279. 3,
  280. 0XFF,
  281. 0);
  282. byte[] Buff2 = System.Text.Encoding.Default.GetBytes("欢迎光临");
  283. fixed (byte* pArray = Buff2)
  284. for (int i = 1; i < 8; i++)
  285. {
  286. DUCP_HOST_TWIN_DownTextFile(i,
  287. 0,
  288. pArray,
  289. 0X15,
  290. 1,
  291. 0X00,
  292. 2,
  293. 0X15,
  294. 1,
  295. 3,
  296. 0XFF,
  297. 0);
  298. }
  299. }
  300. }
  301. private void BUTTON_DEMO2_Click(object sender, EventArgs e)
  302. {
  303. // TODO: 在此添加控件通知处理程序代码
  304. //删除文本控件
  305. DUCP_HOST_TWIN_Del(0);
  306. DUCP_HOST_TWIN_Del(1);
  307. //删除图片控件
  308. DUCP_HOST_PIC_Del(4);
  309. DUCP_HOST_PIC_Del(5);
  310. DUCP_HOST_2D_SetColor(0);
  311. //DUCP_HOST_2D_FillRect(0, 0, 63, 31);
  312. DUCP_HOST_2D_DrawSysIcon(-7, 0, 1, 3, 43);
  313. DUCP_HOST_PIC_Create(4, 24, 16, 48, 16);
  314. DUCP_HOST_PIC_Add(4, 45, 1, 2, 0, 0, 6, 6);
  315. DUCP_HOST_TWIN_Create(0, 0, 19, 0, 48, 8);
  316. DUCP_HOST_TWIN_Create(1, 0, 17, 8, 48, 8);
  317. unsafe
  318. {
  319. byte[] Buff = System.Text.Encoding.Default.GetBytes("`H:`N:`S");
  320. fixed (byte* pArray = Buff)
  321. DUCP_HOST_TWIN_DisText(0,
  322. pArray,
  323. 0X00,
  324. 1,
  325. 0X08,
  326. 255,
  327. 0x00,
  328. 1,
  329. 0,
  330. 0XFF,
  331. 0, 0);
  332. byte[] Buff2 = System.Text.Encoding.Default.GetBytes("`D-`M-`Y");
  333. fixed (byte* pArray = Buff2)
  334. DUCP_HOST_TWIN_DisText(1,
  335. pArray,
  336. 0X00,
  337. 1,
  338. 0X08,
  339. 255,
  340. 0x00,
  341. 1,
  342. 0,
  343. 0XFF,
  344. 0, 0);
  345. }
  346. }
  347. private void button1_Click(object sender, EventArgs e)
  348. {
  349. DUCP_HOST_SYS_SetVol(++volume);
  350. label3.Text = "音量:" + volume;
  351. }
  352. private void button2_Click(object sender, EventArgs e)
  353. {
  354. DUCP_HOST_SYS_SetVol(--volume);
  355. label3.Text = "音量:" + volume;
  356. }
  357. private void slider1_ValueChanged(object sender, EventArgs e)
  358. {
  359. volume = slider1.Value / 2;
  360. try
  361. {
  362. DUCP_HOST_SYS_SetVol(volume);
  363. }
  364. catch (Exception ex) { Console.WriteLine(ex.Message); }
  365. label3.Text = "音量:" + volume;
  366. }
  367. private void button3_Click(object sender, EventArgs e)
  368. {
  369. DUCP_HOST_SYS_Reset();
  370. }
  371. private void button4_Click(object sender, EventArgs e)
  372. {
  373. DUCP_HOST_TWIN_Del(0);
  374. DUCP_HOST_TWIN_Del(1);
  375. DUCP_HOST_TWIN_Del(2);
  376. DUCP_HOST_TWIN_Del(3);
  377. DUCP_HOST_TWIN_Create(0, 0, 0, 0, 64, 16);
  378. DUCP_HOST_TWIN_Create(1, 0, 0, 16, 64, 16);
  379. DUCP_HOST_TWIN_Create(2, 0, 0, 32, 64, 16);
  380. DUCP_HOST_TWIN_Create(3, 0, 0, 48, 64, 16);
  381. byte[] Buff1 = System.Text.Encoding.Default.GetBytes("*请重新停车*");
  382. byte[] Buff2 = System.Text.Encoding.Default.GetBytes("X轴超限");
  383. byte[] Buff3 = System.Text.Encoding.Default.GetBytes("Y轴超限");
  384. byte[] Buff4 = System.Text.Encoding.Default.GetBytes("角度超限");
  385. byte[][] Buffs = new byte[4][];
  386. Buffs[0] = Buff1;
  387. Buffs[1] = Buff2;
  388. Buffs[2] = Buff3;
  389. Buffs[3] = Buff4;
  390. unsafe
  391. {
  392. for (int i = 0; i < 4; i++)
  393. {
  394. fixed (byte* pArray = Buffs[i])
  395. DUCP_HOST_TWIN_DownTextFile(i,
  396. 0,
  397. pArray,
  398. 0X15,
  399. 1,
  400. 0X00,
  401. 2,
  402. 0X15,
  403. 1,
  404. 3,
  405. 0XFF,
  406. 0);
  407. }
  408. }
  409. }
  410. private void button5_Click(object sender, EventArgs e)
  411. {
  412. DUCP_HOST_TWIN_DisFile(0, 0);
  413. }
  414. private void button6_Click(object sender, EventArgs e)
  415. {
  416. IPAddress ipa = null;
  417. int port = 0;
  418. try
  419. {
  420. ipa = IPAddress.Parse(textBox_ip.Text);
  421. port = Int32.Parse(textBox_port.Text);
  422. }
  423. catch (Exception ex) { Console.WriteLine(ex.Message); }
  424. if (ipa != null)
  425. {
  426. unsafe
  427. {
  428. try
  429. {
  430. byte[] protocol = new byte[] {
  431. 0x00,0x64,0xff,0xff,0x08,0x04,
  432. 0x00,0x00,0x00,0x00,
  433. 0xE6,0x17
  434. };
  435. byte[] Buff = ipa.GetAddressBytes();
  436. Buff.CopyTo(protocol, 6);
  437. byte[] temp = new byte[10];
  438. Array.Copy(protocol, temp, 10);
  439. byte[] crc = CRC16(temp);
  440. Array.Copy(crc,0,protocol,10,2);
  441. //byte[] Buff2 = new byte[8];
  442. //Buff.CopyTo(Buff2, 0);
  443. //Buff.CopyTo(Buff2, 4);
  444. fixed (byte* pArray = protocol)
  445. {
  446. cbDUCP_DataOut(pArray, 12);
  447. //DUCP_HOST_SYS_SetIP(pArray);
  448. }
  449. }
  450. catch (Exception ex)
  451. { Console.WriteLine(ex.Message); }
  452. }
  453. DUCP_HOST_SYS_SetPort(port);
  454. }
  455. }
  456. /// <summary>
  457. /// 刷新屏幕
  458. /// </summary>
  459. public void DispRefresh()
  460. {
  461. DUCP_HOST_TWIN_Del(0);
  462. DUCP_HOST_TWIN_Del(1);
  463. DUCP_HOST_TWIN_Del(2);
  464. DUCP_HOST_TWIN_Del(3);
  465. DUCP_HOST_TWIN_Create(0, 0, 0, 0, 64, 16);
  466. DUCP_HOST_TWIN_Create(1, 0, 0, 16, 64, 16);
  467. DUCP_HOST_TWIN_Create(2, 0, 0, 32, 64, 16);
  468. DUCP_HOST_TWIN_Create(3, 0, 0, 48, 64, 16);
  469. }
  470. private void button7_Click(object sender, EventArgs e)
  471. {
  472. DispRefresh();
  473. }
  474. private void button8_Click(object sender, EventArgs e)
  475. {
  476. byte[] protocol = new byte[] {
  477. 0x00,0x64,0xff,0xff,0x08,0x04,
  478. 0xc0,0xa8,0x00,0xbc,
  479. };
  480. byte[] temp = CRC16(protocol);
  481. //Console.WriteLine(Convert.ToString(temp[0],2)+","+ Convert.ToString(temp[1], 2));
  482. }
  483. }
  484. }