bpeirson
Member
I have a production line running a custom HMI application that I wrote in VB.NET using the InGear.NET driver for Allen-Bradley to communicate with my PLC. The assembly line has several cameras for vision inspection to make sure parts are assembled in the proper orientation. The cameras are capable of saving a BMP of the inspection to a server, in this case a virtual server that handles some SQL data logging for the rest of the line. With the cameras set to only store a history of 1 image they continually overwrite the same file, Image0.bmp
In an effort to give the operators some feedback as to why the camera is failing a part I want to display the image after the camera saves it. I'm using a file system watcher acting on the change event to do this.
Right now the running program throws a GDI+ exception, with not a lot more detail than that. The current version doesn't have any error handling....
So I put the code in a try statement so that the program wouldn't just hang on the operator. The GDI+ error was occurring because the file was in use. I added a function to try to open the file first and then display it only if the file open was false. That is the code below, and that throws me the same error.
I've tried just about everything I can think of, looking for any suggestions to actually get this image to display reliably, without running into an error (handled or not).
In an effort to give the operators some feedback as to why the camera is failing a part I want to display the image after the camera saves it. I'm using a file system watcher acting on the change event to do this.
Right now the running program throws a GDI+ exception, with not a lot more detail than that. The current version doesn't have any error handling....
So I put the code in a try statement so that the program wouldn't just hang on the operator. The GDI+ error was occurring because the file was in use. I added a function to try to open the file first and then display it only if the file open was false. That is the code below, and that throws me the same error.
I've tried just about everything I can think of, looking for any suggestions to actually get this image to display reliably, without running into an error (handled or not).
VB.NET:
Friend Function CheckForOpenFile(ByVal Path As String)
Try
File.Open(Path, FileMode.Open, FileAccess.Read, FileShare.None)
FileClose(1)
Return False
Catch ex As Exception
Return True
End Try
End Function
Friend Sub DisplayImage()
ImageOpen = CheckForOpenFile(CameraFile)
Try
CameraFile_Buffer = File.ReadAllBytes(CameraFile)
CameraFile_Stream = New MemoryStream(CameraFile_Buffer)
CameraImage = CType(Bitmap.FromStream(CameraFile_Stream), Bitmap)
CameraFile_Stream.Dispose()
frmMain.PictureBox1.Image = CameraImage
frmMain.PictureBox1.Visible = True
Catch ex As Exception
End Try