//使配方读取按钮接通1S
        private void TimerCloseRead_Tick(object sender, EventArgs e)
        {
            //配方读取
            int rsno = CS7TCP.WriteBool(Z通讯设置.plcHandle, 0x84, device.address, 63, 1, 0);

            if (rsno == 0)
            {
                //配方读取后要刷新数据到界面
                refreshPeifang();
                btn_Recipe_Read.BackColor = Color.Red;
            }
            //配方保存
            int rsno1 = CS7TCP.WriteBool(Z通讯设置.plcHandle, 0x84, device.address, 63, 0, 0);

            if (rsno1 == 0)
            {
                btn_Recipe_Save.BackColor = Color.Red;
            }
            //配方确认
            int rsno2 = CS7TCP.WriteBool(Z通讯设置.plcHandle, 0x84, device.address, 63, 2, 0);

            if (rsno2 == 0)
            {
                btn_Recipe_OK.BackColor = Color.Red;
            }
            TimerCloseRead.Enabled = false;
        }
        //对3个按钮进行判断,判断哪一个按钮被按下
        public void btn_MouseDown(object sender)
        {
            A0开机画面 parent = (A0开机画面)Parent.FindForm();

            System.Windows.Forms.Button button = (System.Windows.Forms.Button)sender;
            int rsno = 0;

            switch (button.Name)
            {
            case "btn_Recipe_Save":
                rsno = CS7TCP.WriteBool(Z通讯设置.plcHandle, 0x84, device.address, 63, 0, 1);
                if (rsno == 0)
                {
                    btn_Recipe_Save.BackColor = Color.LightGreen;
                    parent.showLog(device.typeName + device.index + "配方保存操作执行成功");
                    //插入数据到数据库数据表进行记录
                    saveToDatabaseTable();
                }
                else
                {
                    parent.showLog(device.typeName + device.index + "配方保存操作执行失败");
                    MessageBox.Show("配方保存操作执行失败");
                }
                break;

            case "btn_Recipe_Read":
                rsno = CS7TCP.WriteBool(Z通讯设置.plcHandle, 0x84, device.address, 63, 1, 1);
                if (rsno == 0)
                {
                    btn_Recipe_Read.BackColor = Color.LightGreen;
                    parent.showLog(device.typeName + device.index + "配方读取操作执行成功");
                }
                else
                {
                    parent.showLog(device.typeName + device.index + "配方读取操作执行失败");
                    MessageBox.Show("配方读取操作执行失败");
                }
                break;

            case "btn_Recipe_OK":
                rsno = CS7TCP.WriteBool(Z通讯设置.plcHandle, 0x84, device.address, 63, 2, 1);
                if (rsno == 0)
                {
                    btn_Recipe_OK.BackColor = Color.LightGreen;
                    parent.showLog(device.typeName + device.index + "配方确认操作执行成功");
                    //插入数据到数据库数据表进行记录
                    saveToDatabaseTable();
                }
                else
                {
                    parent.showLog(device.typeName + device.index + "配方确认操作执行失败");
                    MessageBox.Show("配方确认操作执行失败");
                }
                break;
            }
            //按下按钮后自动开始计时
            TimerCloseRead.Enabled = true;
        }
        //除尘机风扇启动停止
        private void Chb_Fans_CheckedChanged(object sender, EventArgs e)
        {
            UInt32 FansSet = 0;

            if (Chb_Fans.Checked == true)
            {
                FansSet            = 1;
                Chb_Fans.BackColor = Color.LightGreen;
                Chb_Fans.Text      = "启动";
            }
            else
            {
                FansSet            = 0;
                Chb_Fans.BackColor = Color.Red;
                Chb_Fans.Text      = "停止";
            }

            int resno = CS7TCP.WriteWord(Z通讯设置.plcHandle, 0x84, device.address, 6, FansSet);
        }
        //除尘机毛刷反转
        private void Chb_Brush_R_CheckedChanged(object sender, EventArgs e)
        {
            UInt32 BrushsSet = 0;

            if (Chb_Brush_R.Checked == true)
            {
                Chb_Brush.Checked     = false;
                Chb_Brush.BackColor   = Color.Red;
                BrushsSet             = 2;
                Chb_Brush_R.BackColor = Color.LightGreen;
                Chb_Brush_R.Text      = "反转";
            }
            else
            {
                BrushsSet             = 0;
                Chb_Brush_R.BackColor = Color.Red;
                //Chb_Brush.Text = "反转";
            }

            int resno = CS7TCP.WriteWord(Z通讯设置.plcHandle, 0x84, device.address, 8, BrushsSet);
        }
 //从本地ini文件读取物料编码和配方编号
 public void RecipeNO_Input()
 {
     Int32[]  value = new Int32[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, };
     string[] way   = new string[] { @"\Default-product1.ini", @"\Default-product2.ini", @"\Default-product3.ini", @"\Default-product4.ini", @"\Default-product5.ini", @"\Default-product6.ini",
                                     @"\Default-product7.ini", @"\Default-product8.ini", @"\Default-product9.ini", @"\Default-product10.ini",
                                     @"\Default-product11.ini", @"\Default-product12.ini", @"\Default-product13.ini", @"\Default-product14.ini", @"\Default-product15.ini", @"\Default-product16.ini",
                                     @"\Default-product17.ini", @"\Default-product18.ini", @"\Default-product19.ini", @"\Default-product20.ini" };
     //如果输入为空时自动返回之前的值
     if (txb_Recipe_NO.Text.Trim() == "")
     {
         UInt32 ReadBack = 0;
         CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 52, ref ReadBack);
         txb_Recipe_NO.Text = Convert.ToString(ReadBack);
         MessageBox.Show("输入无效,配方区间在1-20之间,请输入适当的配方编号");
     }
     else
     {
         for (int i = 0; i < value.Length; i++)
         {
             //把中间转存的Default - code.ini内容路径找到然后读取出内容存储在txb_tiaoma.Text中
             if (Convert.ToUInt32(txb_Recipe_NO.Text) == value[i])
             {
                 string thispath = Application.StartupPath + way[i];                 //定义变量thisPath,获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称+路径
                 if (!System.IO.File.Exists(thispath))
                 {
                     return;                                                                         //确定指定的文件是否存在(文件的路径);如果不存在则执行return
                 }
                 try
                 {
                     lab_Prt_NO.Text = System.IO.File.ReadAllText(thispath);                         //打开一个文本文件,读取文件的所有行,然后关闭该文件
                 }
                 catch { }
             }
         }
     }
 }
        //判定离开后开始执行写入指令
        //配方参数输入,,,,,,对话框中参数输入
        public void handleInputComplete(object sender)
        {
            System.Windows.Forms.TextBox _textbox = (System.Windows.Forms.TextBox)sender;
            switch (_textbox.Name)
            {
            //主输送线速度写入
            case "txb_Control_Conveyor_Main":
                UInt32 Write_Conveyor_Main = 0;                                                     //定义读取变量
                if (txb_Control_Conveyor_Main.Text.Trim() == "")
                {
                    UInt32 ReadBack_Write_Conveyor_Main = 0;
                    CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 0, ref ReadBack_Write_Conveyor_Main);
                    txb_Control_Conveyor_Main.Text = Convert.ToString(Convert.ToDecimal(ReadBack_Write_Conveyor_Main) / 10);
                    MessageBox.Show("参数区间在1-20之间,请输入适当的参数");
                }
                else
                {
                    Write_Conveyor_Main = Convert.ToUInt32(Convert.ToDecimal(txb_Control_Conveyor_Main.Text.ToString()) * 10);              //转换成String格式然后显示在textbox里面
                    if (Convert.ToUInt32(Convert.ToDecimal(txb_Control_Conveyor_Main.Text) * 10) <= 200 && Convert.ToUInt32(Convert.ToDecimal(txb_Control_Conveyor_Main.Text) * 10) >= 0)
                    {
                        int resno = CS7TCP.WriteWord(Z通讯设置.plcHandle, 0x84, device.address, 0, Write_Conveyor_Main);             //写入配方编号
                        if (resno == 0)
                        {
                            A0开机画面 parent = (A0开机画面)Parent.FindForm();
                            parent.showLog("     输送线速度写入成功!");
                        }
                        else
                        {
                            MessageBox.Show("输送线速度写入失败,请重新输入");
                        }
                    }
                    else
                    {
                        UInt32 ReadBack_Write_Conveyor_Main = 0;
                        CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 0, ref ReadBack_Write_Conveyor_Main);
                        txb_Control_Conveyor_Main.Text = Convert.ToString(Convert.ToDecimal(ReadBack_Write_Conveyor_Main) / 10);
                        MessageBox.Show("参数区间在1-20之间,请输入适当的参数");
                    }
                }
                break;

            //第一组高度设定写入
            case "txb_Control_Brush_Height":
                UInt32 Write_App1_Height = 0;                                                     //定义读取变量
                if (txb_Control_Brush_Height.Text.Trim() == "")
                {
                    UInt32 ReadBack_Write_App1_Height = 0;
                    CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 2, ref ReadBack_Write_App1_Height);
                    txb_Control_Brush_Height.Text = Convert.ToString(Convert.ToDecimal(ReadBack_Write_App1_Height) / 100);
                    MessageBox.Show("参数区间在1-200之间,请输入适当的参数");
                }
                else
                {
                    Write_App1_Height = Convert.ToUInt32(Convert.ToDecimal(txb_Control_Brush_Height.Text.ToString()) * 100);              //转换成String格式然后显示在textbox里面
                    if (Convert.ToUInt32(Convert.ToDecimal(txb_Control_Brush_Height.Text) * 100) <= 20000 && Convert.ToUInt32(Convert.ToDecimal(txb_Control_Brush_Height.Text) * 100) > 0)
                    {
                        int resno = CS7TCP.WriteWord(Z通讯设置.plcHandle, 0x84, device.address, 2, Write_App1_Height);             //写入配方编号
                        if (resno == 0)
                        {
                            A0开机画面 parent = (A0开机画面)Parent.FindForm();
                            parent.showLog("     第一组高度参数写入成功!");
                        }
                        else
                        {
                            MessageBox.Show("第一组高度参数写入失败,请重新输入");
                        }
                    }
                    else
                    {
                        UInt32 ReadBack_Write_App1_Height = 0;
                        CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 2, ref ReadBack_Write_App1_Height);
                        txb_Control_Brush_Height.Text = Convert.ToString(Convert.ToDecimal(ReadBack_Write_App1_Height) / 100);
                        MessageBox.Show("参数区间在1-200之间,请输入适当的参数");
                    }
                }
                break;

            //第一组高度误差补偿设定写入
            case "txb_Control_Brush_buchang":
                UInt32 Write_App1_buchang = 0;                                                     //定义读取变量
                if (txb_Control_Brush_buchang.Text.Trim() == "")
                {
                    UInt32 ReadBack_Write_App1_buchang = 0;
                    CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 4, ref ReadBack_Write_App1_buchang);
                    txb_Control_Brush_buchang.Text = Convert.ToString(Convert.ToDecimal(ReadBack_Write_App1_buchang) / 100);
                    MessageBox.Show("参数区间在1-20之间,请输入适当的参数");
                }
                else
                {
                    Write_App1_buchang = Convert.ToUInt32(Convert.ToDecimal(txb_Control_Brush_buchang.Text.ToString()) * 100);              //转换成String格式然后显示在textbox里面
                    if (Convert.ToUInt32(Convert.ToDecimal(txb_Control_Brush_buchang.Text) * 100) <= 10000 && Convert.ToUInt32(Convert.ToDecimal(txb_Control_Brush_buchang.Text) * 100) >= 0)
                    {
                        int resno = CS7TCP.WriteWord(Z通讯设置.plcHandle, 0x84, device.address, 4, Write_App1_buchang);             //写入配方编号
                        if (resno == 0)
                        {
                            A0开机画面 parent = (A0开机画面)Parent.FindForm();
                            parent.showLog("     第一组高度误差补偿参数写入成功!");
                        }
                        else
                        {
                            MessageBox.Show("第一组高度误差补偿写入失败,请重新输入");
                        }
                    }
                    else
                    {
                        UInt32 ReadBack_Write_App1_buchang = 0;
                        CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 4, ref ReadBack_Write_App1_buchang);
                        txb_Control_Brush_buchang.Text = Convert.ToString(Convert.ToDecimal(ReadBack_Write_App1_buchang) / 100);
                        MessageBox.Show("参数区间在1-20之间,请输入适当的参数");
                    }
                }
                break;

            //配方编号写入
            case "txb_Recipe_NO":
                UInt32 Write_Recipe_NO = 0;                                                     //定义读取变量
                if (txb_Recipe_NO.Text.Trim() == "")
                {
                    UInt32 ReadBack = 0;
                    CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 52, ref ReadBack);
                    txb_Recipe_NO.Text = Convert.ToString(ReadBack);
                    MessageBox.Show("输入无效,配方区间在1-20之间,请输入适当的配方编号");
                }
                else
                {
                    Write_Recipe_NO = Convert.ToUInt32(txb_Recipe_NO.Text.ToString());              //转换成String格式然后显示在textbox里面
                    if (Convert.ToUInt32(txb_Recipe_NO.Text) <= 20 && Convert.ToUInt32(txb_Recipe_NO.Text) >= 0)
                    {
                        int resno = CS7TCP.WriteWord(Z通讯设置.plcHandle, 0x84, device.address, 52, Write_Recipe_NO);            //写入配方编号
                        if (resno == 0)
                        {
                            A0开机画面 parent = (A0开机画面)Parent.FindForm();
                            parent.showLog("     配方编号写入成功!");
                        }
                        else
                        {
                            MessageBox.Show("配方编号写入失败,请重新输入");
                        }
                    }
                    else
                    {
                        UInt32 ReadBack = 0;
                        CS7TCP.ReadWord(Z通讯设置.plcHandle, 0x84, device.address, 52, ref ReadBack);
                        txb_Recipe_NO.Text = Convert.ToString(ReadBack);
                        MessageBox.Show("输入无效,配方区间在1-20之间,请输入适当的配方编号");
                    }
                }
                break;
            }
        }
Esempio n. 7
0
        //把通讯读取出来的数据进行分析,采用字节连读的方式,把数据一次读出
        public override void analyseDatasRecyle(int DBaddress)
        {
            lock (this)
            {
                //通讯读取参数
                int resno = CS7TCP.ReadBlockAsByte(Z通讯设置.plcHandle, 0x84, address, 0, 220, datas);
                //当返回值为0时表示通讯成功,
                if (resno == 0)
                {
                    ////获取设备内部已经有的数据
                    ControlAppSpeed1       = getIntFromBytes(datas, 0, 2);
                    ControlDocSpeed1       = getIntFromBytes(datas, 2, 2);
                    ControlZhengpingSpeed1 = getIntFromBytes(datas, 4, 2);
                    ControlAppSpeed2       = getIntFromBytes(datas, 6, 2);
                    ControlDocSpeed2       = getIntFromBytes(datas, 8, 2);
                    ControlConveyorSpeed   = getIntFromBytes(datas, 10, 2);

                    ControlAppSpeed3 = getIntFromBytes(datas, 12, 2);
                    ControlDocSpeed3 = getIntFromBytes(datas, 14, 2);

                    ControlAppHeight1       = getIntFromBytes(datas, 16, 2);
                    ControlZhengpingHeight1 = getIntFromBytes(datas, 18, 2);
                    ControlAppHeight2       = getIntFromBytes(datas, 20, 2);
                    ControlAppHeight3       = getIntFromBytes(datas, 22, 2);

                    ControlAppHeight11       = getIntFromBytes(datas, 24, 2);
                    ControlZhengpingHeight11 = getIntFromBytes(datas, 26, 2);
                    ControlAppHeight22       = getIntFromBytes(datas, 28, 2);
                    ControlAppHeight33       = getIntFromBytes(datas, 30, 2);

                    ControlAppTemp1 = getIntFromBytes(datas, 32, 2);
                    ControlAppTemp2 = getIntFromBytes(datas, 34, 2);
                    ControlAppTemp3 = getIntFromBytes(datas, 36, 2);
                    //配方编号读回
                    bianhao = getIntFromBytes(datas, 52, 2);


                    //输送线速度监控,滚轮参数功率监控
                    MonitorAppSpeed1       = getIntFromBytes(datas, 66, 2);
                    MonitorDocSpeed1       = getIntFromBytes(datas, 68, 2);
                    MonitorZhengpingSpeed1 = getIntFromBytes(datas, 70, 2);
                    MonitorAppSpeed2       = getIntFromBytes(datas, 72, 2);
                    MonitorDocSpeed2       = getIntFromBytes(datas, 74, 2);
                    //主次输送线的速度
                    MonitorConveyorSpeed1 = getIntFromBytes(datas, 76, 2);
                    MonitorConveyorSpeed2 = getIntFromBytes(datas, 78, 2);
                    //3#涂布轮和均布轮的速度
                    MonitorAppSpeed3 = getIntFromBytes(datas, 80, 2);
                    MonitorDocSpeed3 = getIntFromBytes(datas, 82, 2);
                    //1#2#3#涂布轮的高度
                    MonitorAppHeight1 = getIntFromBytes(datas, 84, 2);
                    MonitorAppHeight2 = getIntFromBytes(datas, 86, 2);
                    MonitorAppHeight3 = getIntFromBytes(datas, 88, 2);
                    //1#2#3#涂布轮油漆的温度
                    MonitorAppTemp1 = getIntFromBytes(datas, 92, 2);
                    MonitorAppTemp2 = getIntFromBytes(datas, 94, 2);
                    MonitorAppTemp3 = getIntFromBytes(datas, 96, 2);
                    //输送线运行时间和轮子运行时间
                    MonitorAppRunTime1       = getDoubleFromBytes(datas, 120, 4);
                    MonitorDocRunTime1       = getDoubleFromBytes(datas, 124, 4);
                    MonitorZhengpingRunTime1 = getDoubleFromBytes(datas, 128, 4);
                    MonitorAppRunTime2       = getDoubleFromBytes(datas, 132, 4);
                    MonitorDocRunTime2       = getDoubleFromBytes(datas, 136, 4);
                    MonitorConveyorRunTime1  = getDoubleFromBytes(datas, 140, 4);
                    MonitorConveyorRunTime2  = getDoubleFromBytes(datas, 144, 4);
                    MonitorAppRunTime3       = getDoubleFromBytes(datas, 148, 4);
                    MonitorDocRunTime3       = getDoubleFromBytes(datas, 152, 4);
                    //1#2#3#涂布轮的剩余声明周期
                    MonitorAppLeftTime1 = getDoubleFromBytes(datas, 156, 4);
                    MonitorAppLeftTime2 = getDoubleFromBytes(datas, 160, 4);
                    MonitorAppLeftTime3 = getDoubleFromBytes(datas, 164, 4);

                    //IO数据的解析
                    BitArray array = getBitArrayFromBytes(datas, 210, 4);
                    Q00 = array[0];
                    Q01 = array[1];
                    Q02 = array[2];
                    Q03 = array[3];
                    Q04 = array[4];
                    Q05 = array[5];
                    Q06 = array[6];
                    Q07 = array[7];

                    Q10 = array[8];
                    Q11 = array[9];

                    I00 = array[10];
                    I01 = array[11];
                    I02 = array[12];
                    I03 = array[13];
                    I04 = array[14];
                    I05 = array[15];
                    I06 = array[16];
                    I07 = array[17];

                    I10 = array[18];
                    I11 = array[19];
                    I12 = array[20];
                    I13 = array[21];
                    I14 = array[22];
                    I15 = array[23];

                    //shangWeiJiLiangTiaoZhong = array[24];
                    //quanZiDongYunXingZhong = array[25];
                    //shouDongYunXingZhong = array[26];
                    //baoJingTingJiZhong = array[27];
                    //shuSongxianYunXingZhong = array[28];
                    //UV1YungXingZhong = array[29];
                    //UV2YungXingZhong = array[30];
                    //UV3YungXingZhong = array[31];

                    //shuSongDaiStatusCode = getIntFromBytes(datas, 136, 2);
                    //UV1StatusCode = getIntFromBytes(datas, 138, 1);
                    //UV2StatusCode = getIntFromBytes(datas, 139, 1);
                    //UV3StatusCode = getIntFromBytes(datas, 140, 1);
                    //UV4StatusCode = getIntFromBytes(datas, 141, 1);
                    //UV5StatusCode = getIntFromBytes(datas, 142, 1);
                    //UV6StatusCode = getIntFromBytes(datas, 143, 1);
                    //UV7StatusCode = getIntFromBytes(datas, 144, 1);
                    //UV8StatusCode = getIntFromBytes(datas, 145, 1);
                }
            }
        }