winform画面
源代码
namespace C_通过串口与FX3U通讯
{
public partial class formMain : Form
{
public formMain()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
}
ActFXCPU fxCPU = new ActFXCPU();
/// <summary>
/// 打开通讯连接
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Conn_Click(object sender, EventArgs e)
{
string cpu;
int type;
int n;
if (cb_Port.Text.Length > 0)
{
string port = cb_Port.Text;
char sp = 'M';
string[] spm = new string[4];
spm = port.Split(sp);
fxCPU.Close();
fxCPU.ActPortNumber = Convert.ToInt16(spm[1]);
fxCPU.ActBaudRate = Convert.ToInt16(cb_BaudRate.Text);
n = fxCPU.Open();
if (n == 0)
{
lb_connStsTxt.Text = "通讯成功!";
lb_connStsTxt.ForeColor = Color.Green;
fxCPU.GetCpuType(out cpu, out type);
lb_PLCStyleTxt.Text = cpu;
}
else
{
lb_connStsTxt.Text = "通讯失败!";
lb_connStsTxt.ForeColor = Color.Red;
}
}
}
/// <summary>
/// 读取1次X点事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_XReadOnce_Click(object sender, EventArgs e)
{
// readInput();
}
private void readInput()
{
while (true)
{
int[] arrX = new int[10];
int iRetX = fxCPU.ReadDeviceRandom("X0\nX1\nX2\nX3\nX4\nX5\nX6\nX7", 8, out arrX[0]);
//创建存放lable标签的集合
List<Control> lableListX = new List<Control>();
//检索出所有符合名称的标签控件
for (int j = 0; j < 10; j++)
{
//返回值为集合
Control[] conLable = this.Controls.Find("lb_X" + j.ToString(), true);
if (conLable.Count() >= 1)
{
//判断控件是否是标签
if (conLable[0] is Label)
{
lableListX.Add(conLable[0]);
}
}
}
for (int i = 0; i < lableListX.Count; i++)
{
Label lab = lableListX[i] as Label;
lab.BackColor = arrX[i] == 1 ? Color.Green : Color.Red;
}
int[] arrY = new int[10];
int iRetY = fxCPU.ReadDeviceRandom("Y0\nY1\nY2\nY3\nY4\nY5", 6, out arrY[0]);
List<Control> lableListY = new List<Control>();
for (int j = 0; j < 10; j++)
{
Control[] conLable = this.Controls.Find("lb_Y" + j.ToString(), true);
if (conLable.Count() >= 1)
{
if (conLable[0] is Label)
{
lableListY.Add(conLable[0]);
}
}
}
for (int i = 0; i < lableListY.Count; i++)
{
Label lab = lableListY[i] as Label;
lab.BackColor = arrY[i] == 1 ? Color.Green : Color.Red;
}
//读取M点状态
int getM0;
int iRetM = fxCPU.GetDevice("M60",out getM0);
if (getM0 == 1)
{
btn_M60.Text = "M60_ON";
btn_M60.BackColor = Color.Green;
}
else
{
btn_M60.Text = "M60_OFF";
btn_M60.BackColor = Color.Red;
}
//读取测试脉冲
int[] arrD0 = new int[2];
int iRetD0 = fxCPU.ReadDeviceRandom("D0", 1,out arrD0[0]);
textBox1.Text = arrD0[0].ToString();
}
}
/// <summary>
/// 连续读取X点事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_XReadCon_Click(object sender, EventArgs e)
{
//创建一个连续读取委托
ThreadStart myInputReadConn = new ThreadStart(readInput);
//创建一个后台线程
Thread myThread = new Thread(myInputReadConn);
myThread.IsBackground = true;
myThread.Start();
}
private void btn_M60_Click(object sender, EventArgs e)
{
int S;
if (btn_M60.Text=="M60_OFF")
{
S = fxCPU.SetDevice("M60", 1);
}
else
{
S = fxCPU.SetDevice("M60", 0);
}
}
}
}
关注博主好久了,现在自动化plc方面的博客相比于计算机编程那种,真的是少太多了,感谢博主的无私分享
感谢关注,平时工作较忙,会尽量更新的~