仿三菱

在这里插入图片描述
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
//using Microsoft.VisualBasic.Devices;
namespace 模拟三菱PLC
{

public partial class Form1 : Form
{
    int M0toM7_value = 0;
    private SerialPort port = new SerialPort("COM1", 9600, Parity.Even, 7, StopBits.One);
    int mygetM0M7_value()
    {
        int value = 0;
        //读取M0状态
        if (lable_M0.BackColor == Color.Red)
        {
            value += 0x01;
        }
        //读取M1状态
        if (lable_M1.BackColor == Color.Red)
        {
            value += 0x02;
        }
        //读取M2状态
        if (lable_M2.BackColor == Color.Red)
        {
            value += 0x04;
        }
        if (lable_M3.BackColor == Color.Red)
        {
            value += 0x08;
        }
        if (lable_M4.BackColor == Color.Red)
        {
            value += 0x10;
        }
        if (lable_M5.BackColor == Color.Red)
        {
            value += 0x20;
        }
        if (lable_M6.BackColor == Color.Red)
        {
            value += 0x40;
        }
        if (lable_M7.BackColor == Color.Red)
        {
            value += 0x80;
        }
        return value;
    
    }
    public Form1()
    {
        InitializeComponent();
    }
    private bool MyBytesisEquals(byte[] b1, byte[] b2)
    {
        if (b1.Length != b2.Length) return false;
        if (b1 == null || b2 == null) return false;
        for (int i = 0; i < b1.Length; i++)
            if (b1[i] != b2[i])
                return false;
        return true;
    }
    void myopenport(String comport)
    {
        try
        {

            if (port.IsOpen)
                port.Close();
            port.PortName = comport;
            port.Open();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    private void init()
    {
        cmb_COM.Items.Clear();
        String[] ports = SerialPort.GetPortNames();
        foreach (String portname in ports)
        {
            cmb_COM.Items.Add(portname);

        }
         
        Control.CheckForIllegalCrossThreadCalls = false;
        port.ReadTimeout = 1000;
        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        cmb_COM.SelectedIndex = 0;
        lable_M0.BackColor = Color.Green;
        lable_M1.BackColor = Color.Green;
        lable_M2.BackColor = Color.Green;
        lable_M3.BackColor = Color.Green;
        lable_M4.BackColor = Color.Green;
        lable_M5.BackColor = Color.Green;
        lable_M6.BackColor = Color.Green;
        lable_M7.BackColor = Color.Green;
        //myopenport("COM1");
        ;
        byte[] bytes1 = { 1, 2, 3 };
        byte[] bytes2 = { 2, 3,4 };
        bool isequal = MyBytesisEquals(bytes1,bytes2);
        //MessageBox.Show(isequal.ToString());
        
        

    }

    void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {

        int len = port.BytesToRead;
        byte[] readDatas = new byte[len];
        port.Read(readDatas, 0, len);
        
        bool isequal = MyBytesisEquals(readDatas, FXPLC.bytes_ReadM348);
        if (isequal)
        {
            M0toM7_value = 0;
            M0toM7_value = mygetM0M7_value();
            System.Threading.Thread.Sleep(50);
            byte[] newbytes = FXPLC.Gender_MBytes(M0toM7_value);
            port.Write(newbytes, 0, newbytes.Length);
        }
        else
            port.Write(FXPLC.response_wrong, 0, 1);


        //MessageBox.Show(isequal.ToString());
        //throw new NotImplementedException();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        init();

    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (port.IsOpen)
            port.Close();
    }

    private void cmb_COM_SelectedIndexChanged(object sender, EventArgs e)
    {
        
    }

    private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {

    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        //Global.a=0;
        if(port.IsOpen)
            port.Write(FXPLC.bytes_ReadM348, 0, FXPLC.bytes_ReadM348.Length);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        myopenport(cmb_COM.SelectedItem.ToString());
       // timer1.Enabled = true;
    }

    private void lable_M0_Click(object sender, EventArgs e)
    {
        if (lable_M0.BackColor == Color.Red)
            lable_M0.BackColor = Color.Green;
        else
            lable_M0.BackColor = Color.Red;

    }

    private void lable_M1_Click(object sender, EventArgs e)
    {
        if (lable_M1.BackColor == Color.Red)
            lable_M1.BackColor = Color.Green;
        else
            lable_M1.BackColor = Color.Red;
    }

    private void lable_M2_Click(object sender, EventArgs e)
    {
        if (lable_M2.BackColor == Color.Red)
            lable_M2.BackColor = Color.Green;
        else
            lable_M2.BackColor = Color.Red;
    }

    private void lable_M3_Click(object sender, EventArgs e)
    {
        if (lable_M3.BackColor == Color.Red)
            lable_M3.BackColor = Color.Green;
        else
            lable_M3.BackColor = Color.Red;
    }

    private void lable_M4_Click(object sender, EventArgs e)
    {
        if (lable_M4.BackColor == Color.Red)
            lable_M4.BackColor = Color.Green;
        else
            lable_M4.BackColor = Color.Red;
    }

    private void lable_M5_Click(object sender, EventArgs e)
    {
        if (lable_M5.BackColor == Color.Red)
            lable_M5.BackColor = Color.Green;
        else
            lable_M5.BackColor = Color.Red;
    }

    private void lable_M6_Click(object sender, EventArgs e)
    {
        if (lable_M6.BackColor == Color.Red)
            lable_M6.BackColor = Color.Green;
        else
            lable_M6.BackColor = Color.Red;
    }

    private void lable_M7_Click(object sender, EventArgs e)
    {
        if (lable_M7.BackColor == Color.Red)
            lable_M7.BackColor = Color.Green;
        else
            lable_M7.BackColor = Color.Red;
    }

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《《《《《 PLC指令说明 》》》》》 代码类产品由于具备可复制性,一经销售,买家不得以任何理由退款 、退货,请亲们理解,谢谢! 编译环境:Keil MDK 4.7以上的版本,亲可以去百度或者官网直接下载; CPU需要:STM32F103--RAM内存不小于64K Flash程序空间不小于128K 串口使用:USART1-(PA9\PA10) 我们提供的是项目工程文件,所以主要你的MDK版本兼容直接编译就可以了; C语言单片机开发PLC-基于三菱FX2N,里面包括通讯,以及监控功能,指令执行,在线写入功能,店铺保证程序可以在MDK上编译通过,同时下载进控制器,可以在硬件上运行梯形图程序,如果需要其他的功能,需要亲自己修改代码,我们不提供代码修改服务和技术支持服务,所以拍的话亲需要一定的基础; 支持三菱GX-Develoer/GX-WORKS2 支持人机界面连接,FX2N(不完全支持所有梯形图指令,其他指令亲可以自己添加) 支持梯形图编程、下载、监控. 编程口为程序上下载及与人机界面通信之端口.下面有我们测试维纶的触摸屏与控制器的人机通信; ================================= 基本指令: LD LDI AND ANI OR ORI LDP LDF ANDP ANDF ORP ORF SET RST MPS MPP MRD ANB ORB OUT INV PLS PLF MC MCR NOP END CALL CJ FEND SRET STL RET (基本指令29条全包含) ======================================== 功能指令: ALT MOV ZRST ZCP INC DEC ADD CMP SUB MUL DIV BCD BIN WAND WOR WXOR DECO ENCO REF DHSCS DHSCR PWM RAMP PLSV DRVI DRVA PLSY ZRN PLSR TCMP TZCP TADD TSUB HOUR TRD TWR LD= = AND= = OR= = SFTR SFTL SPD 支持32位D指令,支持上升沿P指令 ======================================= 软件件范围 X0-X77 Y0-Y77 M0-M1535 M8000-M8255 S0-S999 C0-C255 T0-T255 D0-D5999 D8000-D8255 V0-V7 Z0-Z7 软元件掉电保持范围与三菱FX1N兼容 X0-X5高速脉冲捕捉功能与三菱FX1N兼容 Y0 Y1高速脉冲输出功能与三菱FX1N兼容,最高可发两路独立100K脉 冲。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值