Пошук серед найпопулярніших питань
Device is not Logging data in PME and System log shows error "Arithmetic overflow error converting IDENTITY to data type tinyint. Arithmetic overflow occurred."
Issue
Data for at least one node is not being logged into PME. Error message in PME SystemLog:
GroupName.DeviceName failed to write node info to database because 'Arithmetic overflow error converting IDENTITY to data type tinyint. Arithmetic overflow occurred.' Will retry in 60s.
Product Line
Power Monitoring Expert 8.x
Power Monitoring Expert 9.0
Power Monitoring Expert 2020
Power Monitoring Expert 2021
Power Monitoring Expert 2022
Power Monitoring Expert 2023
Environment
SQL Server Management Studio
Device Driver
Cause
At least a one meter driver is returning random values for the volts mode register, which in a result causes the IRM_VoltsMode table to reach its maximum identity value of 255. It needs to be determined which meter(s) are showing this behavior and the corresponding driver(s) will need to be modified to remove the error.
Resolution
**Warning: It is recommended that only those familiar with SQL Management Studio and PME architecture run queries that modify the databases. Always create recent database backups beforehand. Failure to do so can leave the databases in an inoperable state and lead to loss of data. **
Debugging procedure:
1) Shutdown **ALL** PME services (including the ION Application Modules services).
2) Backup ION_Network.
3) Open SQL Server Management Studio and run the following script. This query will delete all columns in IRM_DeviceInfo and IRM_VoltsMode. When LogInserter talks to the nodes again, logging in these two tables will start with an Identity Value of 1.
use ION_Network
delete IRM_DeviceInfo
delete IRM_VoltsMode
DBCC CHECKIDENT ('IRM_DeviceInfo', RESEED, 0)
DBCC CHECKIDENT ('IRM_VoltsMode', RESEED, 0)
4) Start the following services:
- Siteserver
- Application Modules Provider Engine Host
- LogInserter (and LogInserter Router Service if present)
Note: DO NOT start other services.
5) Monitor the IRM_VoltsMode table for any entries that do not seem reasonable volts mode values (numbers, random strings, etc). Record the IDs of those rows.
Note that entries are only added as LogInserter talks to the device for the first time so it may take a few minutes, especially in large systems. The query below helps to find the unreasonable volts mode values (numbers, random strings, etc).
use ION_Network
SELECT * FROM IRM_VoltsMode order by id
SELECT * FROM IRM_DeviceInfo order by id
6) For any IDs noted in Step 5 determine which physical device this is by using the entries in IRM_DeviceInfo. Work backward to determine which device driver the entries correspond to using the device name column to look into the Devices table and from there to the DeviceType table.
7) Open the affected device driver .xml file and find the VoltsMode register. Check if there is a DefaultEnum attribute for that register (it may be using a named Enumeration so look this up at the end of the .xml file). If not present then add a DefaultEnum attribute with a string in the enum list (like 4WYE) or something like "Unknown". This value will be returned whenever the Modbus volts mode register returns a numeric value not on the enum list. This will also help Vista pick which default diagram to open (the first choice will override the invalid value, and the second will prevent the default diagram from opening with an error).
Note: If the value is "Illegal Data", or anything else that looks like a Modbus exception string the above fix will not work and other changes to the driver will be required.
8) Repeat the above steps until all the drivers are fixed.
9) Once all drivers are fixed then start all PME services and resume normal operations.