using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using I8124_CE6; using System.Threading; namespace Demo1_CSharp { public partial class Form1 : Form { byte cSlot; delegate void UpdateUICallback(); Thread I8124_Thread; private volatile bool _IsStopUIThread = false; Mutex MyMutex = new Mutex(); UInt64 CMDCount = 0; public Form1() { InitializeComponent(); //I8124SDK.I8124_ActiveModule(); ComboBox_Slot.SelectedIndex = 0; cSlot = 0; serialPort1.PortName = "COM5"; serialPort1.BaudRate = 9600; serialPort1.DataBits = 7; serialPort1.Parity = System.IO.Ports.Parity.Even; serialPort1.StopBits = System.IO.Ports.StopBits.One; serialPort1.Open(); serialPort2.PortName = "COM4"; serialPort2.BaudRate = 9600; serialPort2.DataBits = 7; serialPort2.Parity = System.IO.Ports.Parity.Odd; serialPort2.StopBits = System.IO.Ports.StopBits.Two; serialPort2.Open(); serialPort3.PortName = "COM2"; serialPort3.BaudRate = 9600; serialPort3.DataBits = 7; serialPort3.Parity = System.IO.Ports.Parity.Odd; serialPort3.StopBits = System.IO.Ports.StopBits.Two; serialPort3.Open(); //UI Thread I8124_Thread = new Thread(new ThreadStart(I8124_WorkerObject)); } private void Form1_Closed(object sender, EventArgs e) { _IsStopUIThread = true; I8124_Thread.Abort(); I8124_Thread.Join(); I8124SDK.I8124_CloseModule(cSlot); serialPort1.Close(); serialPort2.Close(); serialPort3.Close(); } private void Button_GetFirmwareVer_Click(object sender, EventArgs e) { UInt32 Ret; Ret = I8124SDK.I8124_GetFirmwareVersion(cSlot); MessageBox.Show("The I-8124 Firmware version is " + Convert.ToString(Ret,16)); } private void Button_MasterID_Click(object sender, EventArgs e) { UInt32 MasterID; MasterID = I8124SDK.I8124_GetMasterMACID(cSlot); if (MasterID >= 64) { MessageBox.Show("Get Master ID Error(" + Convert.ToString(MasterID) + ")!"); return; } ComboBox_MasterID.SelectedIndex = Convert.ToInt32(MasterID); } private void Button_SetMasterID_Click(object sender, EventArgs e) { UInt32 MasterID,Ret; MasterID = Convert.ToByte(ComboBox_MasterID.SelectedIndex); Ret = I8124SDK.I8124_SetMasterMACID(cSlot, Convert.ToByte(MasterID)); if (Ret != 0) MessageBox.Show("Set Master ID Error(" + Convert.ToString(Ret) + ")!"); else MessageBox.Show("Set Master ID OK!"); } private void Button_BaudRate_Click(object sender, EventArgs e) { UInt32 BaudRate; BaudRate = I8124SDK.I8124_GetBaudRate(cSlot); if (BaudRate >= 3) { MessageBox.Show("Get Baud Rate Error(" + Convert.ToString(BaudRate) + ")!"); return; } ComboBox_BaudRate.SelectedIndex = Convert.ToInt32(BaudRate); } private void Button_SetBaudRate_Click(object sender, EventArgs e) { UInt32 BaudRate, Ret; BaudRate = Convert.ToByte(ComboBox_BaudRate.SelectedIndex); Ret = I8124SDK.I8124_SetBaudRate(cSlot, Convert.ToByte(BaudRate)); if (Ret != 0) MessageBox.Show("Set BaudRate Error(" + Convert.ToString(Ret) + ")!"); else MessageBox.Show("Set BaudRate OK!"); } private void Button_ResetFirmware_Click(object sender, EventArgs e) { I8124SDK.I8124_ResetFirmware(cSlot); CMDCount = 0; } private void Button_SearchAllSlave_Click(object sender, EventArgs e) { UInt32 Ret; Ret = I8124SDK.I8124_SearchAllDevices(cSlot); if(Ret != 0) MessageBox.Show("Search All Slaves Error(" + Convert.ToString(Ret) + ")!"); else MessageBox.Show("Start to search all slave devices!\r\n Please wait for about 30 seconds!"); } private void button_Active_Click(object sender, EventArgs e) { uint Ret; cSlot = Convert.ToByte(ComboBox_Slot.SelectedIndex); cSlot++; Ret = I8124SDK.I8124_ActiveModule(cSlot); if (Ret != 0) { MessageBox.Show("Active Error : " + Ret.ToString()); return; } else MessageBox.Show("Active OK"); timer2.Enabled = true; } private void button_startalldevice_Click(object sender, EventArgs e) { uint Ret = 0; CMDCount++; Ret = I8124SDK.I8124_StartAllDevice(cSlot); if (Ret != 0) { MessageBox.Show("Start All Devices Error : " + Ret.ToString()); return; } else { MessageBox.Show("Start All Devices OK"); I8124_Thread.Start(); } } private void I8124_WorkerObject() { UpdateUICallback SyncUI = new UpdateUICallback(UpdateI8124ByThread); while (!_IsStopUIThread) { Invoke(SyncUI, null); Thread.Sleep(1); } } //========================================================== //========================================================== void UpdateI8124ByThread() { byte[] SlaveList = { (byte)1, (byte)40, (byte)42, (byte)44, (byte)46, (byte)53 }; int SlaveNo = SlaveList.Length; byte[] IOData = new byte[100]; uint Ret; ushort i, Counter, Len = 0; string MSG; CMDCount++; label_status.Text = "Status: " + I8124SDK.I8124_GetMasterStatus(cSlot).ToString(); for (Counter = 0; Counter < SlaveNo; Counter++) { MyMutex.WaitOne(); Ret = ReadFunc1(cSlot, SlaveList[Counter], 1, ref Len, IOData); MyMutex.ReleaseMutex(); //Ret = I8124SDK.I8124_ReadInputData(cSlot, SlaveList[Counter], 1, ref Len, IOData); if (Ret != 0) MSG = "Error : " + Ret.ToString(); else { MSG = ""; for (i = 0; i < Len; i++) MSG += IOData[i].ToString("X") + ","; } switch (Counter) { case 0: label_ID0.Text = "ID_" + SlaveList[Counter].ToString(); Label_IO0.Text = MSG; break; case 1: label_ID1.Text = "ID_" + SlaveList[Counter].ToString(); Label_IO1.Text = MSG; break; case 2: label_ID2.Text = "ID_" + SlaveList[Counter].ToString(); Label_IO2.Text = MSG; break; case 3: label_ID3.Text = "ID_" + SlaveList[Counter].ToString(); label_IO3.Text = MSG; break; case 4: label_ID4.Text = "ID_" + SlaveList[Counter].ToString(); label_IO4.Text = MSG; break; case 5: label_ID5.Text = "ID_" + SlaveList[Counter].ToString(); label_IO5.Text = MSG; break; case 6: label_ID6.Text = "ID_" + SlaveList[Counter].ToString(); label_IO6.Text = MSG; break; case 7: label_ID7.Text = "ID_" + SlaveList[Counter].ToString(); label_IO7.Text = MSG; break; case 8: label_ID8.Text = "ID_" + SlaveList[Counter].ToString(); label_IO8.Text = MSG; break; } //----------------------------------------------------- //----------------------------------------------------- MyMutex.WaitOne(); Ret = ReadbackFunc1(cSlot, SlaveList[Counter], 1, ref Len, IOData); MyMutex.ReleaseMutex(); //Ret = I8124SDK.I8124_ReadbackOutputData(cSlot, SlaveList[Counter], 1, ref Len, IOData); if (Ret != 0) MSG = "Error : " + Ret.ToString(); else { MSG = ""; for (i = 0; i < Len; i++) MSG += IOData[i].ToString("X") + ","; } switch (Counter) { case 0: label_BackID0.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO0.Text = MSG; break; case 1: label_BackID1.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO1.Text = MSG; break; case 2: label_BackID2.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO2.Text = MSG; break; case 3: label_BackID3.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO3.Text = MSG; break; case 4: label_BackID4.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO4.Text = MSG; break; case 5: label_BackID5.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO5.Text = MSG; break; case 6: label_BackID6.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO6.Text = MSG; break; case 7: label_BackID7.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO7.Text = MSG; break; case 8: label_BackID8.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO8.Text = MSG; break; } } label3.Text = "CMDCount :" + CMDCount.ToString("X"); } uint ReadFunc1(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc2(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc2(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc3(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc3(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc4(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc4(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc5(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc5(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc6(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc6(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc7(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc7(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc8(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc8(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc9(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc9(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc10(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc10(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { CMDCount++; I8124SDK.I8124_GetSlaveStatus(cSlot, DesMACID); CMDCount++; return I8124SDK.I8124_ReadInputData(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc1(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc2(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc2(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc3(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc3(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc4(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc4(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc5(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc5(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc6(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc6(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc7(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc7(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc8(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc8(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc9(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc9(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc10(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc10(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc11(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc11(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { CMDCount++; I8124SDK.I8124_GetSlaveStatus(cSlot, DesMACID); CMDCount++; return I8124SDK.I8124_ReadbackOutputData(cSlot, DesMACID, ConType, ref IOLen, IODATA); } int i = 0; private void timer2_Tick(object sender, EventArgs e) { //MyMutex.WaitOne(); //label_status.Text = "Status: " +I8124SDK.I8124_GetMasterStatus(cSlot).ToString(); //MyMutex.ReleaseMutex(); i = i % 3; i++; XPacNET.XPac.pac_ChangeSlot((byte)i); try { serialPort1.WriteLine("Command"); //throw new FileNotFoundException(@"data.txt not in c:\temp directory]"); serialPort1.ReadByte(); } catch(Exception ex) {} try { serialPort2.WriteLine("test2"); serialPort2.ReadByte(); } catch (Exception ex) { } try { serialPort3.WriteLine("test2"); serialPort3.ReadByte(); } catch (Exception ex) { } } private void button1_Click(object sender, EventArgs e) { I8124_Thread.Start(); } byte flag = 1; private void button2_Click(object sender, EventArgs e) { byte[] SlaveList = { (byte)1, (byte)40, (byte)42, (byte)44, (byte)46, (byte)53 }; ushort[] SlaveDOLen = { 50,1, 3, 5, 4, 1 }; int SlaveNo = SlaveList.Length; byte[] IOData = new byte[100]; uint Ret; ushort i; if (flag == 1) { for (i = 0; i < 100; i++) IOData[i] = 0xFF; flag = 0; } else { for (i = 0; i < 100; i++) IOData[i] = 0x00; flag = 1; } for (i = 0; i < SlaveNo; i++) { CMDCount++; Ret = I8124SDK.I8124_WriteOutputData(cSlot, SlaveList[i], 1, SlaveDOLen[i], IOData); if (Ret != 0) MessageBox.Show("Error :" + Ret.ToString()); } } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { } private void button3_Click(object sender, EventArgs e) { _IsStopUIThread = true; } } }