91黄动漫 I 欧美 日韩 国产 成人 在线 I a级成人毛片 I 农村黄色片 I 男生捅女生的肌肌 I 精品99一区二区三区 I 妃光莉av I 日日夜夜操操 I 性中国古装videossex I 久久不卡av I 美女高潮动态图 I 极品美女开粉嫩精品 I 牛牛精品一区二区 I 91精品福利视频 I 成人刺激视频 I 91国内精品视频 I 中国一级特黄毛片大片 I 校长狠狠挺进校花体内小说 I 欧美激情黄色片 I 欧美久久久一区 I 爱豆国产剧免费观看大全剧苏畅 I 麻豆国产人妻欲求不满谁演的 I 亚洲一区二区在线免费观看视频 I 国产超碰av人人做人人爽 I 精品国产第一国产综合精品 I 久久免费看av I 欧美一区二区三区白人 I 国产精品夫妻激情 I 校花被肉干高h潮不断 I 欧美最猛黑人xxxx黑人表情 I 国产欧美日韩一区二区搜索 I 极品女神露脸呻吟啪啪 I 人人天天久久 I 亚洲动漫在线 I 日本91福利区 I 五月天 桃色 开心 I av在线免费观看国产 I 男人添女人的免费视频 I 夜夜穞天天穞狠狠穞

xiapeng01
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 62 個
工控威望: 189 點
下載積分: 1198 分
在線時間: 83(小時)
注冊時間: 2012-12-31
最后登錄: 2025-11-21
查看xiapeng01的 主題 / 回貼
樓主  發(fā)表于: 2024-04-13 10:19
復(fù)制粘貼代碼到VsCode 或LinqPad 中,執(zhí)行即可,需要.net8。在我的電腦上實驗成功,歡迎反饋不同型號的結(jié)果。
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("如要確認執(zhí)行請按\"Y\"鍵:");
        //var key=Console.ReadKey();
        //Console.WriteLine();
        //if(key.Key != ConsoleKey.Y)
        {
            //Console.WriteLine("已取消執(zhí)行!");
            //Console.Read();            
            //return;
        }

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

        for(int i=10;i>0;i--)
        {
            //倒計時執(zhí)行
            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("正在更改系統(tǒng)設(shè)置...");
        weintek.SetLB(9020, true);//顯示系統(tǒng)控制按鈕
        weintek.SetLB(9033, true);//允許上傳
        weintek.SetLB(12364, true);//開啟屏幕校正后恢復(fù)出廠設(shè)置的選項
        weintek.SetLB(9048, true);//開啟重啟保護
        weintek.SetLB(9047, true);//重啟觸摸屏
        //設(shè)定LB寄存器時返回報文實例
        //2024/4/13 10:36:54+_接收內(nèi)容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+_接收內(nèi)容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+_接收內(nèi)容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+_接收內(nèi)容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+_接收內(nèi)容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發(fā):        01600000ff000000000008000c 00e5 0300000100000000000000000000ff 0403 000001000000
            //HMI回true:    01600000ff0000000000080005 00e5 030000010000000000000000000000000000 0010 0000  //大端
            //HMI回false:   01600000ff0000000000080005 00e5 030000010000000000000000000000000000 0000 0000 //大端

            //讀LB9047
            //PC發(fā):        01600000ff000000000008000c 00fb 0300000200000000000000000000ff 3502 000001000000

            //讀LB9048
            //PC發(fā):        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>
        /// 設(shè)置觸摸屏的LB寄存器(系統(tǒng)寄存器的值)
        /// </summary>
        /// <param name="ip">觸摸屏的地址</param>
        /// <param name="port">鏈接端口號,默認值為8000</param>
        /// <param name="index">報文序號,返回報文的序號和發(fā)送報文序號相同</param>
        /// <param name="regAddress">LB寄存器地址</param>
        /// <param name="Value">設(shè)定值</param>
        public bool SetLB(int regAddress, bool Value)
        {
        //設(shè)定LB寄存器時返回報文實例
        //2024/4/13 10:36:54+_接收內(nèi)容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+_接收內(nèi)容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+_接收內(nèi)容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+_接收內(nèi)容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+_接收內(nèi)容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,在此處無關(guān)緊要

                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">寄存器個數(shù),當前只支持1個寄存器</param>
        /// <returns>返回值</returns>
        public Int16 GetLW(int regAddress, int count)
        {
            //讀LW9009
            //PC發(fā):    01600000ff000000000008000c00be0300003600000000000000000008ff3123000001000000
            //HMI回:   01600000ff000000000008000500be03000036000000000000000000000000000040400000

            //PC發(fā):    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發(fā):    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()}+_接收內(nèi)容{receiveData.Length}:\t" + BitConverter.ToString(receiveData));
                    return receiveData;
                }
            }catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }

        /// <summary>
        /// 十六進制字符串轉(zhuǎn)字節(jié)數(shù)組
        /// </summary>
        /// <param name="str">要轉(zhuǎn)換的字符串</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>
        /// 大端轉(zhuǎn)小端和小端轉(zhuǎn)大端的操作是相同的,共用同一個即可
        /// </summary>
        /// <param name="dat">要轉(zhuǎn)換的內(nèi)容</param>
        /// <returns></returns>
        static UInt16 ToLittleEndian(UInt16 dat)
        {
            return BitConverter.ToUInt16(BitConverter.GetBytes(dat).Reverse().ToArray());
        }

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

    精華主題: 0
    發(fā)帖數(shù)量: 11977 個
    工控威望: 19785 點
    下載積分: 15415 分
    在線時間: 2836(小時)
    注冊時間: 2013-01-31
    最后登錄: 2025-12-20
    查看往事如風的 主題 / 回貼
    3樓  發(fā)表于: 2024-04-21 15:58
    不明覺厲
    三人行者必有我?guī)?,擇其善者而從之
    biaogege520
    清晨的風
    級別: 家園常客
    精華主題: 0
    發(fā)帖數(shù)量: 306 個
    工控威望: 891 點
    下載積分: 204 分
    在線時間: 92(小時)
    注冊時間: 2015-07-01
    最后登錄: 2025-12-19
    查看biaogege520的 主題 / 回貼
    4樓  發(fā)表于: 2024-05-09 14:07
            

    主站蜘蛛池模板: 国产真实偷乱视频 | 欧美一级免费在线 | 精品国产乱码久久久久久浪潮小说 | 黄网站在线观 | 国偷自产一区二区三区在线视频 | 亚洲视频91| 色综合av男人的天堂伊人 | 91大奶| 在线无码免费的毛片视频 | 日韩在线一区二区三区四区 | 加勒比一区在线 | 成人亚洲视频 | 嫩草影视在线观看 | 国产乱人伦偷精品视频不卡 | 少妇一级淫免费观看 | 四虎成人精品国产永久免费 | 国产一级黄色av | 青青草手机在线视频 | 成人亚洲| 欧美老熟妇xb水多毛多 | 国产特黄特色大片免费视频 | 亚洲成aⅴ人片久青草影院按摩 | 少妇内射视频播放舔大片 | 五月天婷婷基地 | 国产精品久久久久影院亚瑟 | 久久精品日产第一区二区三区乱码 | 国产精品4 | 欧美人成精品网站播放 | 5858s亚洲色大成网站www | 国产在线无码制服丝袜无码 | 伊人久久大香线蕉av一区二区 | 成人精品一区日本无码网 | 国产做爰xxxⅹ久久久小说 | 午夜福到在线a国产4 视频 | 欧美国产在线一区 | 亚洲天堂视频在线播放 | 色乱码一区二区三区 | 国产va免费精品观看精品 | 国精产品源xzl仙踪林仙踪 | 综合在线视频精品专区 | 97无码免费人妻超级碰碰碰碰 | 18禁成年无码免费网站 | 黑人多群性xxxsex | 国产免费爽爽视频 | 熟妇高潮精品一区二区三区 | 日日摸夜夜添夜夜添无码免费视频 | 亚洲国产精品一区二区第一页 | 亚l州综合另中文字幕 | 91pronvideos国产| 国产精品国产三级国产三级人妇 | 亚洲欧洲国产成人综合在线 | 中国女人学生69xxx视频 | 你懂的手机在线观看 | 亚洲视频综合网 | 激情内射人妻1区2区3区 | 无码国模产在线观看免费 | 日韩亚洲精品国产第二页 | 欧美福利视频在线 | 午夜在线视频观看 | 成人免费大片在线观看 | 色婷婷av一区二区 | www.操操操.com| 色老汉av一区二区三区 | 欧美 国产日韩 综合在线 | 亚洲美女性生活视频 | 亚洲免费人成视频观看 | 美女裸体十八禁免费网站 | 亚洲色图在线播放 | 人妻体体内射精一区二区 | 护士张开腿被奷日出白浆 | 亚洲精品国产熟女久久久 | 在线免费激情视频 | 日韩欧美视频一区二区三区 | 亚洲中久无码永久在线观看软件 | 国产成人欧美日本在线观看 | 久久精品视频在线免费观看 | 在线视频亚洲一区 | 国产精品99久久久久久久久 | 久久精品女同亚洲女同 | 成人羞羞国产 | 日本少妇久久 | 欧美精品第一区 | 深夜福利视频免费观看 | 激情欧美日韩一区二区 | 亚洲国产精品久久久久婷蜜芽 | 日日干夜夜操高清视频 | 果冻传媒亚洲区二期 | 欧美激情论坛 | 羞羞视频免费在线看 | 各种少妇正面着bbw撒尿视频 | 9999精品成人免费毛片在线看 | 四虎成人精品无码 | 亚洲日韩午夜av不卡在线观看 | 午夜理伦三级理论 | 精品成人av一区二区三区 | 日韩爆乳一区二区无码 | 国产乱人伦精品一区二区在线观看 | 欧美三区视频 | 日本色妞 |