• <cite id="uwv89"></cite>
      1. 亚洲综合小综合中文字幕,国产久爱免费精品视频,精品国产品香蕉在线,国产午夜精品在人线播放,精品一二三四区在线观看,国产成人无码免费看视频软件 ,色欲久久人妻内射,午夜在线观看成人av
        xiapeng01
        級別: 探索解密
        精華主題: 0
        發帖數量: 61 個
        工控威望: 189 點
        下載積分: 1197 分
        在線時間: 83(小時)
        注冊時間: 2012-12-31
        最后登錄: 2025-08-21
        查看xiapeng01的 主題 / 回貼
        樓主  發表于: 2024-04-13 10:19
        復制粘貼代碼到VsCode 或LinqPad 中,執行即可,需要.net8。在我的電腦上實驗成功,歡迎反饋不同型號的結果。
        using System.Net.Sockets;
        using System.Runtime.CompilerServices;
        using System.Security.Cryptography.X509Certificates;

        namespace WeintekTest;

        class Program
        {
            static Weintek weintek=new Weintek("192.168.20.51");

            static void Main(string[] args)
            {
                ClearTool();          
            }

            static void Fun0()
            {
                Console.WriteLine(weintek.GetLB(9047));
                Console.WriteLine(weintek.GetLB(9048));
            }

            static void Fun1()
            {
                Console.WriteLine("Done!");
                Console.Read();

                File.WriteAllText("res.txt","");

                for(int i=9000;i<12900;i++)
                {
                    string str=$"{DateTime.Now}:LW{i}:\t"+weintek.GetLW(1, i) + Environment.NewLine;
                    File.AppendAllText("res.txt",str);
                }
                
                Console.WriteLine("Done!");
                Console.Read();
            }

            static void ClearTool()
            {
                //Console.WriteLine("如要確認執行請按\"Y\"鍵:");
                //var key=Console.ReadKey();
                //Console.WriteLine();
                //if(key.Key != ConsoleKey.Y)
                {
                    //Console.WriteLine("已取消執行!");
                    //Console.Read();            
                    //return;
                }

                Console.WriteLine("請謹慎操作!");
                Console.WriteLine("觸摸屏將在稍后重啟,請在觸摸屏重啟后手動進入并執行觸摸屏校準!");
                Console.WriteLine("校準完成后,會彈出對話框詢問是否重置密碼,輸入'yes'即可清空內部項目并重置下載密碼!");

                for(int i=10;i>0;i--)
                {
                    //倒計時執行
                    Console.WriteLine($"倒計時:{i}秒.");
                    Thread.Sleep(1000);
                }

                Console.WriteLine("正在更新日期時間...");
                //更新日期時間
                weintek.SetLW(9022, (short)DateTime.Now.Year);//更新年
                weintek.SetLW(9021, (short)DateTime.Now.Month);//更新月
                weintek.SetLW(9020, (short)DateTime.Now.Day);//更新日
                weintek.SetLW(9019, (short)DateTime.Now.Hour);//更新時
                weintek.SetLW(9018, (short)DateTime.Now.Minute);//更新分
                weintek.SetLW(9017, (short)DateTime.Now.Second);//更新秒
                
                Console.WriteLine("正在更改系統設置...");
                weintek.SetLB(9020, true);//顯示系統控制按鈕
                weintek.SetLB(9033, true);//允許上傳
                weintek.SetLB(12364, true);//開啟屏幕校正后恢復出廠設置的選項
                weintek.SetLB(9048, true);//開啟重啟保護
                weintek.SetLB(9047, true);//重啟觸摸屏
                //設定LB寄存器時返回報文實例
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-01-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-02-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-03-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-04-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-05-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02

                Console.WriteLine("Done!");
                Console.Read();
            }



            public class Weintek
            {
                string _ip;
                int _port=8000;

                int _index=0;
                readonly object lckObj=new object();

                public Weintek(string ip)
                {
                    _ip=ip;
                    _port=8000;
                    
                }

                public Weintek(string ip,int port)
                {
                    _ip=ip;
                    _port=port;
                    
                }

                int GetIndex()
                {
                    lock(lckObj)
                    {
                        return ++_index;
                    }
                }

                int GetEasyWatchIndex()
                {
                    return 1;
                }

                public bool GetLB(int regAddress)
                {
                    //讀LB12364
                    //PC發:        01600000ff000000000008000c 00e5 0300000100000000000000000000ff 0403 000001000000
                    //HMI回true:    01600000ff0000000000080005 00e5 030000010000000000000000000000000000 0010 0000  //大端
                    //HMI回false:   01600000ff0000000000080005 00e5 030000010000000000000000000000000000 0000 0000 //大端

                    //讀LB9047
                    //PC發:        01600000ff000000000008000c 00fb 0300000200000000000000000000ff 3502 000001000000

                    //讀LB9048
                    //PC發:        01600000ff000000000008000c 00fe 0300000300000000000000000000ff 3502 000001000000

                    try
                    {
                        bool ret=false;
                        string sendHeader="01600000ff000000000008000c";
                        string sendConstStr1 = "0300000100000000000000000000ff";
                        string sendConstStr2 = "000001000000";

                        string receiveHeader="01600000ff0000000000080005";

                        var sendStr = sendHeader;
                        sendStr += GetIndex().ToString("x4");
                        sendStr += sendConstStr1;
                        sendStr += GetLBAddress(regAddress).Substring(0,4);
            
                        sendStr += sendConstStr2;
                        
                        var receiveData = Send(sendStr);
                        var receiveStr = BitConverter.ToString(receiveData).Replace("-","").ToLower();
                        if(receiveStr.Length> receiveHeader.Length &&
                            receiveStr.StartsWith(receiveHeader) &&
                            string.Compare(sendStr.Substring(sendHeader.Length,4),receiveStr.Substring(receiveHeader.Length,4))==0)
                        {
                            var dat=ToLittleEndian(Convert.ToUInt16(receiveStr.Substring(66,4),16));
                            var temp =(Convert.ToUInt16(Math.Pow(2,regAddress % 0x10)));
                            ret = (dat & temp) > 0;
                            return ret;
                        }

                        return ret;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        return false;
                    }
                }


                /// <summary>
                /// 設置觸摸屏的LB寄存器(系統寄存器的值)
                /// </summary>
                /// <param name="ip">觸摸屏的地址</param>
                /// <param name="port">鏈接端口號,默認值為8000</param>
                /// <param name="index">報文序號,返回報文的序號和發送報文序號相同</param>
                /// <param name="regAddress">LB寄存器地址</param>
                /// <param name="Value">設定值</param>
                public bool SetLB(int regAddress, bool Value)
                {
                //設定LB寄存器時返回報文實例
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-01-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-02-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-03-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-04-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                //2024/4/13 10:36:54+_接收內容33:    01-60-00-00-FF-00-00-00-00-00-08-00-01-00-05-00-00-00-01-00-00-00-00-00-00-00-00-00-00-00-00-00-02
                    try
                    {
                        string sendHeader="01600000ff000000000008000c";
                        string sendConstStr = "0000000100000000000000020000ff";//前面的01是EasyWatch序號,排第一個的為01,第二個的為02,在此處無關緊要

                        string receiveHeader="01600000FF0000000000080001";

                        var sendStr = sendHeader;
                        sendStr += GetIndex().ToString("x4");
                        sendStr += sendConstStr;
                        sendStr += GetLBAddress(regAddress);
                        sendStr += Value ? "ff" : "00";
                        sendStr += "0000";
                        
                        var receiveData = Send(sendStr);
                        var receiveStr = BitConverter.ToString(receiveData).Replace("-","").ToLower();
                        if(receiveStr.Length> receiveHeader.Length && receiveStr.StartsWith(receiveHeader))
                        {
                            return true;
                        }

                        return false;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        return false;
                    }
                }        

                static string GetLBAddress(int addr)
                {
                    string ret = "";
                    string str = addr.ToString("X5");
                    ret += str.Substring(2, 2);
                    ret += str.Substring(0, 2);
                    ret += "00000";
                    ret += str.Substring(4, 1);
                    return ret;
                }

                public Int16 GetLW(int regAddress)
                {
                    return GetLW(regAddress,1);
                }

                /// <summary>
                /// 讀取LW寄存器的值
                /// </summary>
                /// <param name="ip">觸摸屏IP地址</param>
                /// <param name="port">端口</param>
                /// <param name="index">包序號</param>
                /// <param name="regAddress">LW寄存器地址</param>
                /// <param name="count">寄存器個數,當前只支持1個寄存器</param>
                /// <returns>返回值</returns>
                public Int16 GetLW(int regAddress, int count)
                {
                    //讀LW9009
                    //PC發:    01600000ff000000000008000c00be0300003600000000000000000008ff3123000001000000
                    //HMI回:   01600000ff000000000008000500be03000036000000000000000000000000000040400000

                    //PC發:    01600000ff000000000008000c00bc0300003600000000000000000008ff3123000001000000
                    //HMI回:    01600000ff000000000008000500bc03000036000000000000000000000000000040400000
                    try
                    {
                        UInt16 ret = 0;
                        string sendHeader = "01600000ff000000000008000c";
                        string sendRegConstStr = "0300003600000000000000000008ff";

                        string receiveHeader = "01600000ff0000000000080005";

                        string sendStr = sendHeader;
                        sendStr += GetIndex().ToString("x4");
                        sendStr += sendRegConstStr;
                        sendStr += ToLittleEndian((UInt16)regAddress).ToString("x4");
                        sendStr += "0000";
                        sendStr += ToLittleEndian((UInt16)count).ToString("x4");
                        sendStr += "0000";

                        var receiveData = Send(sendStr);
                        var receiveStr = BitConverter.ToString(receiveData).Replace("-", "").ToLower();

                        if (receiveStr.Length > receiveHeader.Length && //長度無無異常
                            receiveStr.StartsWith(receiveHeader) && //接收頭校驗成功
                            string.Compare(sendStr.Substring(sendHeader.Length, 4), receiveStr.Substring(receiveHeader.Length, 4)) == 0 //包序號校驗成功
                        )
                        {
                            var s1 = receiveStr.Substring(66, 4);
                            ret = Convert.ToUInt16(s1, 16);
                            return (Int16)ToLittleEndian(ret);
                        }
                        return -1;

                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        return -1;
                    }
                }

                public bool SetLW(int regAddress, Int16 value)
                {
                    //寫LW9022=2024    (0xE807)|9022=0x3e23
                    //PC發:    01600000ff000000000008000e 00d9 0300005100000000000000010008ff 3e23 0000 0100 e807 0000
                    //HMI回:        01600000ff0000000000080001 00d9 030000510000000000000000000000000001
                    //              01600000ff00000000000800010001030000510000000000000000000000000001
                    try
                    {
                        string sendHeader = "01600000ff000000000008000e";
                        string sendRegConstStr = "0300005100000000000000010008ff";
                        
                        string receiveHeader = "01600000ff0000000000080001";

                        string sendStr = sendHeader;
                        sendStr += GetIndex().ToString("x4");
                        sendStr += sendRegConstStr;
                        sendStr += ToLittleEndian((UInt16)regAddress).ToString("x4");
                        sendStr += "0000";
                        sendStr += ToLittleEndian(1).ToString("x4");
                        sendStr += ToLittleEndian((UInt16)value).ToString("x4");
                        sendStr += "0000";

                        var receiveData = Send(sendStr);
                        var receiveStr = BitConverter.ToString(receiveData).Replace("-", "").ToLower();

                        if (receiveStr.Length > receiveHeader.Length && //長度無無異常
                            receiveStr.StartsWith(receiveHeader) && //接收頭校驗成功
                            string.Compare(sendStr.Substring(sendHeader.Length, 4), receiveStr.Substring(receiveHeader.Length, 4)) == 0 //包序號校驗成功
                        )
                        {
                            return true;
                        }
                        return false;

                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        return false;
                    }
                }

                byte[] Send(string str)
                {
                    try
                    {
                        using (var client = new TcpClient())
                        {
                            client.Connect(_ip, _port);
                            var s = client.GetStream();
                            var sendData = HexStringToByteArray(str);
                            s.Write(sendData);

                            byte[] buffer = new byte[1024];
                            int n = s.Read(buffer);
                            byte[] receiveData = new byte[n];
                            Array.Copy(buffer, receiveData, n);
                            //Console.WriteLine($"{DateTime.Now.ToString()}+_接收內容{receiveData.Length}:\t" + BitConverter.ToString(receiveData));
                            return receiveData;
                        }
                    }catch(Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        return null;
                    }
                }

                /// <summary>
                /// 十六進制字符串轉字節數組
                /// </summary>
                /// <param name="str">要轉換的字符串</param>
                /// <returns></returns>
                static byte[] HexStringToByteArray(string str)
                {
                    return Enumerable.Range(0, str.Length).Where(x => (x % 2) == 0).Select(y => (byte)Convert.ToByte(str.Substring(y, 2), 16)).ToArray();
                }

                /// <summary>
                /// 大端轉小端和小端轉大端的操作是相同的,共用同一個即可
                /// </summary>
                /// <param name="dat">要轉換的內容</param>
                /// <returns></returns>
                static UInt16 ToLittleEndian(UInt16 dat)
                {
                    return BitConverter.ToUInt16(BitConverter.GetBytes(dat).Reverse().ToArray());
                }

                /// <summary>
                /// 大端轉小端和小端轉大端的操作是相同的,共用同一個即可
                /// </summary>
                /// <param name="dat">要轉換的內容</param>
                /// <returns></returns>
                static UInt32 ToLittleEndian(UInt32 dat)
                {
                    return BitConverter.ToUInt32(BitConverter.GetBytes(dat).Reverse().ToArray());
                }
            }
        }
        [ 此帖被xiapeng01在2024-04-13 15:55重新編輯 ]
        xiapeng01
        級別: 探索解密
        精華主題: 0
        發帖數量: 61 個
        工控威望: 189 點
        下載積分: 1197 分
        在線時間: 83(小時)
        注冊時間: 2012-12-31
        最后登錄: 2025-08-21
        查看xiapeng01的 主題 / 回貼
        1樓  發表于: 2024-04-13 15:51
        內容超長。。。。。。
        觸摸屏重啟后手動進入觸摸屏校準,執行完成校準后會詢問是否恢復下載密碼,輸入yes之后,會清空內部的項目。
        [ 此帖被xiapeng01在2024-04-20 16:16重新編輯 ]
        附件: WeintekTest.rar (161 K) 下載次數:30
        tttabi
        級別: 略有小成
        精華主題: 0
        發帖數量: 121 個
        工控威望: 331 點
        下載積分: 3543 分
        在線時間: 83(小時)
        注冊時間: 2023-10-07
        最后登錄: 2025-08-26
        查看tttabi的 主題 / 回貼
        2樓  發表于: 2024-04-19 17:04
        問題這個怎么放進去呢
        往事如風
        科技改變制造
        級別: 網絡英雄

        精華主題: 0
        發帖數量: 11912 個
        工控威望: 19504 點
        下載積分: 14751 分
        在線時間: 2806(小時)
        注冊時間: 2013-01-31
        最后登錄: 2025-08-23
        查看往事如風的 主題 / 回貼
        3樓  發表于: 2024-04-21 15:58
        不明覺厲
        三人行者必有我師 ,擇其善者而從之
        biaogege520
        清晨的風
        級別: 家園常客
        精華主題: 0
        發帖數量: 295 個
        工控威望: 528 點
        下載積分: 1371 分
        在線時間: 89(小時)
        注冊時間: 2015-07-01
        最后登錄: 2025-08-28
        查看biaogege520的 主題 / 回貼
        4樓  發表于: 2024-05-09 14:07
                

        主站蜘蛛池模板: 欧乱色国产精品兔费视频| 成人国产精品日本在线观看| 日本国产一区二区三区在线观看| 亚洲欧洲日韩国内精品| 野花社区www视频日本| 中文字幕亚洲资源网久久| 国产成人精品一区二区三| 亚洲爆乳少妇无码激情| 免费超爽大片黄| 天美传媒xxxxhd videos3| 无码AV无码免费一区二区| 日韩国产精品中文字幕| 在线看无码的免费网站| 中文字幕在线精品人妻| 可以在线观看的亚洲视频| 麻豆精品一区二区视频在线| 国产在线精彩自拍视频| 激情综合网五月激情五月| 自拍第一区视频在线观看| 亚洲国产欧美在线看片一国产| 人妻另类 专区 欧美 制服| 精品熟女日韩中文十区| 亚洲欧美不卡高清在线| a毛片在线看片免费看 | 久久精品一区二区三区综合| 无码国产偷倩在线播放| 97精品伊人久久大香线蕉APP| 熟女精品视频一区二区三区| 精品国产一区av天美传媒| 国产亚洲精品第一综合| 日本边添边摸边做边爱喷水| 国产旡码高清一区二区三区| 不卡一区二区国产精品| 国产欧美日韩精品丝袜高跟鞋 | 国产亚洲精品岁国产精品| 亚洲综合色区另类av| 国产精品制服丝袜无码| 欧美做受视频播放| 亚洲精品福利一区二区三区蜜桃| 无码丰满人妻熟妇区| 人妻系列中文字幕精品|